Changeset 891 in ProjectBuilder for devel/pb/bin/pb


Ignore:
Timestamp:
Oct 28, 2009, 10:25:19 AM (14 years ago)
Author:
Bruno Cornec
Message:
  • setuptvm now uses as well the conf file
  • removal of hardcoded stuff in pb_install_deps
  • conf file updated with new contetn for setupvm
  • Variable for the home dir (not /home on Solaris)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • devel/pb/bin/pb

    r888 r891  
    21112111    my ($ntpline,$dateline) = pb_date2v($vtype,$v);
    21122112
     2113    # Get distro context
     2114    my ($name,$ver,$darch) = split(/-/,$v);
     2115    chomp($darch);
     2116    my ($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd) = pb_distro_init($name,$ver,$darch);
     2117   
    21132118    # Name of the account to deal with for VM/VE
    21142119    # Do not use the one passed potentially with -a
     
    21702175
    21712176        if (defined $vepkglist) {
    2172             # Get distro context
    2173             my ($name,$ver,$darch) = split(/-/,$v);
    2174             chomp($darch);
    2175             my ($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd) = pb_distro_init($name,$ver,$darch);
    2176    
    21772177            my $postparam = pb_distro_get_param($ddir,$dver,$darch,$vepkglist);
    21782178            # Change the list of pkg in to a space separated list
     
    22212221EOF
    22222222        if (defined $ntpline) {
    2223             print SCRIPT "system(\"$ntpline\");\n";
     2223            print SCRIPT "pb_system(\"$ntpline\");\n";
    22242224        } else {
    2225             print SCRIPT "system(\"$dateline\");\n";
     2225            print SCRIPT "pb_system(\"$dateline\");\n";
    22262226        }
    22272227    }
     
    22382238    \$found = 1 if (/^$pbac->{$ENV{'PBPROJ'}}:/);
    22392239EOF
    2240     print SCRIPT << 'EOF';
     2240
     2241my $home = "/home";
     2242# Solaris doesn't like that we use /home
     2243$home = "/export/home" if ($dtype eq "pkg");
     2244
     2245    print SCRIPT << "EOF";
    22412246}
    22422247close(PBFILE);
    22432248
    2244 if ( $found == 0 ) {
    2245     if ( ! -d "/home" ) {
    2246         pb_mkdir("/home");
     2249if ( \$found == 0 ) {
     2250    if ( ! -d "$home" ) {
     2251        pb_mkdir_p("$home");
    22472252    }
    22482253EOF
    22492254    print SCRIPT << "EOF";
    22502255pb_system("groupadd $pbac->{$ENV{'PBPROJ'}}","Adding group $pbac->{$ENV{'PBPROJ'}}");
    2251 pb_system("useradd $pbac->{$ENV{'PBPROJ'}} -g $pbac->{$ENV{'PBPROJ'}} -m -d /home/$pbac->{$ENV{'PBPROJ'}}","Adding user $pbac->{$ENV{'PBPROJ'}} (group $pbac->{$ENV{'PBPROJ'}} - home /home/$pbac->{$ENV{'PBPROJ'}}");
    2252 }
     2256pb_system("useradd -g $pbac->{$ENV{'PBPROJ'}} -m -d $home/$pbac->{$ENV{'PBPROJ'}} $pbac->{$ENV{'PBPROJ'}}","Adding user $pbac->{$ENV{'PBPROJ'}} (group $pbac->{$ENV{'PBPROJ'}} - home $home/$pbac->{$ENV{'PBPROJ'}}");
     2257}
     2258EOF
     2259
     2260    # Copy the content of our local conf file to the VM/VE
     2261    my $content = pb_get_content(pb_distro_conffile());
     2262    print SCRIPT << "EOF";
     2263    #
     2264    # Create a temporary local conf file for distribution support
     2265    # This is created here before its use later. Its place is hardcoded, so no choice for the path
     2266    #
     2267    my \$tempconf = pb_distro_conffile();
     2268    pb_mkdir_p(dirname(\$tempconf));
     2269    open(CONF,"> \$tempconf") || die "Unable to create \$tempconf";
     2270    print CONF q{$content};
     2271    close(CONF);
    22532272EOF
    22542273
     
    22572276# allow ssh entry to build
    22582277#
    2259 mkdir "/home/$pbac->{$ENV{'PBPROJ'}}/.ssh",0700;
     2278mkdir "$home/$pbac->{$ENV{'PBPROJ'}}/.ssh",0700;
    22602279# Allow those accessing root to access the build account
    2261 copy("\$ENV{'HOME'}/.ssh/authorized_keys","/home/$pbac->{$ENV{'PBPROJ'}}/.ssh/authorized_keys");
     2280copy("\$ENV{'HOME'}/.ssh/authorized_keys","$home/$pbac->{$ENV{'PBPROJ'}}/.ssh/authorized_keys");
    22622281chmod 0600,".ssh/authorized_keys";
    2263 pb_system("chown -R $pbac->{$ENV{'PBPROJ'}}:$pbac->{$ENV{'PBPROJ'}} /home/$pbac->{$ENV{'PBPROJ'}}","Finish setting up the account env for $pbac->{$ENV{'PBPROJ'}}");
     2282pb_system("chown -R $pbac->{$ENV{'PBPROJ'}}:$pbac->{$ENV{'PBPROJ'}} $home/$pbac->{$ENV{'PBPROJ'}}","Finish setting up the account env for $pbac->{$ENV{'PBPROJ'}}");
    22642283
    22652284EOF
     
    23052324# We need to have that pb_distro_init function
    23062325# Get it from Project-Builder::Distribution
    2307 my ($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $arch) = pb_distro_init();
    2308 print "distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $pbsuf, $arch))."\n";
     2326# And we now need the conf file required for this to work created above
     2327
     2328my ($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $darch) = pb_distro_init();
     2329print "distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $pbsuf, $darch))."\n";
    23092330
    23102331# Adapt sudoers
     
    23402361
    23412362EOF
    2342        
    2343     my $SCRIPT = \*SCRIPT;
     2363
     2364    # We may need a proxy configuration. Get it from the local env
     2365
     2366    if (defined $ENV{'http_proxy'}) {
     2367        print SCRIPT "\$ENV\{'http_proxy'\}=\"$ENV{'http_proxy'}\";\n";
     2368    }
     2369
     2370    if (defined $ENV{'ftp_proxy'}) {
     2371        print SCRIPT "\$ENV\{'ftp_proxy'\}=\"$ENV{'ftp_proxy'}\";\n";
     2372    }
     2373
     2374    print SCRIPT << 'EOF';
    23442375   
    2345     pb_install_deps($SCRIPT);
     2376    my ($ospkgdep,$osperldep,$osperlver) = pb_conf_get_if("ospkgdep","osperldep","osperlver");
    23462377   
    2347     print SCRIPT << 'EOF';
     2378    # First install all required packages
     2379    pb_system("yum clean all","Cleaning yum env") if (($ddir eq "fedora") || ($ddir eq "asianux") || ($ddir eq "rhel"));
     2380    my $pkgdep = pb_distro_get_param($ddir,$dver,$darch,$ospkgdep,$dfam,$dtype);
     2381    pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,join(' ',split(/,/,$pkgdep))));
     2382
     2383    # Then install manually the missing perl modules
     2384    my $perldep = pb_distro_get_param($ddir,$dver,$darch,$osperldep,$dfam,$dtype);
     2385    foreach my $m (split(/,/,$perldep)) {
     2386        my $dir = $m;
     2387        $dir =~ s/-.*//;
     2388        pb_system("rm -rf $m"."* ; wget http://search.cpan.org/CPAN/modules/by-module/$dir/$m-$osperlver->{$m}.tar.gz ; gzip -cd $m-$osperlver->{$m}.tar.gz | tar xf - ; cd $m"."* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf $m"."*","Installing perl module $m-$osperlver->{$m}");
     2389    }
     2390
    23482391# Suse wants sudoers as 640
    23492392if (($ddir eq "sles") || (($ddir eq "opensuse") && ($dver =~ /10.[012]/))) {
     
    23512394}
    23522395
    2353 pb_system("rm -rf ProjectBuilder-* ; wget --passive-ftp ftp://ftp.mondorescue.org/src/ProjectBuilder-latest.tar.gz ; tar xvfz ProjectBuilder-latest.tar.gz ; cd ProjectBuilder-* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf ProjectBuilder-* ; rm -rf project-builder-* ; wget --passive-ftp ftp://ftp.mondorescue.org/src/project-builder-latest.tar.gz ; tar xvfz project-builder-latest.tar.gz ; cd project-builder-* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf project-builder-* ;","Building Project-Builder");
    2354 system "pb 2>&1 | head -5";
     2396pb_system("rm -rf ProjectBuilder-* ; wget --passive-ftp ftp://ftp.mondorescue.org/src/ProjectBuilder-latest.tar.gz ; gzip -cd ProjectBuilder-latest.tar.gz | tar xf - ; cd ProjectBuilder-* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf ProjectBuilder-* ; rm -rf project-builder-* ; wget --passive-ftp ftp://ftp.mondorescue.org/src/project-builder-latest.tar.gz ; gzip -cd project-builder-latest.tar.gz | tar xf - ; cd project-builder-* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf project-builder-* ;","Building Project-Builder");
     2397pb_system("pb 2>&1 | head -5","verbose");
    23552398EOF
    23562399    if ($vtype eq "ve") {
     
    23732416    }
    23742417
    2375     # Adds pb_distro_init from ProjectBuilder::Distribution and Base
     2418    # Adds pb_distro_init and all functions needed from ProjectBuilder::Distribution and Base
    23762419    foreach my $d (@INC) {
    2377         my @f = ("$d/ProjectBuilder/Base.pm","$d/ProjectBuilder/Distribution.pm");
     2420        my @f = ("$d/ProjectBuilder/Base.pm","$d/ProjectBuilder/Distribution.pm","$d/ProjectBuilder/Conf.pm");
    23782421        foreach my $f (@f) {
    23792422            if (-f "$f") {
    23802423                open(PBD,"$f") || die "Unable to open $f";
    23812424                while (<PBD>) {
    2382                         next if (/^package/);
    2383                         next if (/^use Exporter/);
    2384                         next if (/^use ProjectBuilder::/);
    2385                         next if (/^our /);
     2425                    next if (/^package/);
     2426                    next if (/^use Exporter/);
     2427                    next if (/^use ProjectBuilder::/);
     2428                    next if (/^our /);
    23862429                    print SCRIPT $_;
    23872430                }
     
    24392482}
    24402483return;
    2441 }
    2442 
    2443 sub pb_install_deps {
    2444 
    2445 my $SCRIPT = shift;
    2446 
    2447 print {$SCRIPT} << 'EOF';
    2448 # We may need a proxy configuration. Get it from the local env
    2449 EOF
    2450 
    2451 if (defined $ENV{'http_proxy'}) {
    2452     print SCRIPT "\$ENV\{'http_proxy'\}=\"$ENV{'http_proxy'}\";\n";
    2453 }
    2454 
    2455 if (defined $ENV{'ftp_proxy'}) {
    2456     print SCRIPT "\$ENV\{'ftp_proxy'\}=\"$ENV{'ftp_proxy'}\";\n";
    2457 }
    2458 
    2459 print {$SCRIPT} << 'EOF';
    2460 # Get and install pb
    2461 my $insdm = "rm -rf Date-Manip* ; wget http://search.cpan.org/CPAN/authors/id/S/SB/SBECK/Date-Manip-5.54.tar.gz ; tar xvfz Date-Manip-5.54.tar.gz ; cd Date-Manip* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf Date-Manip*";
    2462 my $insmb = "rm -rf Module-Build* ; wget http://search.cpan.org/CPAN/authors/id/K/KW/KWILLIAMS/Module-Build-0.2808.tar.gz ; tar xvfz Module-Build-0.2808.tar.gz ; cd Module-Build* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf Module-Build*";
    2463 my $insfm = "rm -rf File-MimeInfo* ; wget http://search.cpan.org/CPAN/authors/id/P/PA/PARDUS/File-MimeInfo/File-MimeInfo-0.15.tar.gz ; tar xvfz File-MimeInfo-0.15.tar.gz ; cd File-MimeInfo* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf File-MimeInfo*";
    2464 my $insfb = "rm -rf File-Basedir* ; wget http://search.cpan.org/CPAN/authors/id/P/PA/PARDUS/File-BaseDir-0.03.tar.gz ; tar xvfz File-BaseDir-0.03.tar.gz ; cd File-BaseDir* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf File-BaseDir*";
    2465 my $insms = "rm -rf Mail-Sendmail* ; wget http://search.cpan.org/CPAN/authors/id/M/MI/MIVKOVIC/Mail-Sendmail-0.79.tar.gz ; tar xvfz Mail-Sendmail-0.79.tar.gz ; cd Mail-Sendmail* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf Mail-Sendmail*";
    2466 my $cmtdm = "Installing Date-Manip perl module";
    2467 my $cmtmb = "Installing Module-Build perl module";
    2468 my $cmtfm = "Installing File-MimeInfo perl module";
    2469 my $cmtfb = "Installing File-Basedir perl module";
    2470 my $cmtms = "Installing Perl-Sendmail perl module";
    2471 my $cmtall = "Installing required modules";
    2472 
    2473 if ( $ddir eq "fedora" ) {
    2474     pb_system("yum clean all","Cleaning yum env");
    2475     if ($dver == 4) {
    2476         pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"rpm-build wget patch ntp sudo perl-DateManip perl-ExtUtils-MakeMaker"));
    2477         pb_system("$insmb","$cmtmb");
    2478         pb_system("$insfm","$cmtfm");
    2479         pb_system("$insfb","$cmtfb");
    2480         pb_system("$insms","$cmtms");
    2481     } else {
    2482         pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"rpm-build wget patch ntp sudo perl-DateManip perl-ExtUtils-MakeMaker perl-File-MimeInfo perl-Mail-Sendmail"));
    2483     }
    2484 } elsif ($dtype eq "pkg") {
    2485     pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"make wget ntp"));
    2486     pb_system("$insmb","$cmtmb");
    2487     pb_system("$insdm","$cmtdm");
    2488     pb_system("$insfm","$cmtfm");
    2489     pb_system("$insfb","$cmtfb");
    2490     pb_system("$insms","$cmtms");
    2491 } elsif ($ddir eq "asianux") {
    2492     pb_system("yum clean all","Cleaning yum env");
    2493     pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"rpm-build wget patch ntp sudo perl-DateManip"));
    2494     pb_system("$insmb","$cmtmb");
    2495     pb_system("$insfm","$cmtfm");
    2496     pb_system("$insfb","$cmtfb");
    2497     pb_system("$insms","$cmtms");
    2498 } elsif (( $dfam eq "rh" ) || ($ddir eq "suse") || ($ddir eq "sles") || (($ddir eq "opensuse") && (($dver eq "10.1") || ($dver eq "10.0"))) || ($ddir eq "slackware")) {
    2499     # Suppose pkg are installed already as no online mirror available
    2500     pb_system("rpm -e lsb 2>&1 > /dev/null","Removing lsb package");
    2501     pb_system("$insdm","$cmtdm");
    2502     pb_system("$insmb","$cmtmb");
    2503     pb_system("$insfm","$cmtfm");
    2504     pb_system("$insfb","$cmtfb");
    2505     pb_system("$insms","$cmtms");
    2506 } elsif ($ddir eq "opensuse") {
    2507     # New OpenSuSE
    2508     pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"make wget patch sudo ntp"));
    2509     pb_system("$insmb","$cmtmb");
    2510     pb_system("$insfm","$cmtfm");
    2511     pb_system("$insfb","$cmtfb");
    2512     pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"perl-Date-Manip perl-File-HomeDir perl-Mail-Sendmail"));
    2513     if ($dver < 11) {
    2514         pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"ntp"));
    2515     } else {
    2516         pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"sntp"));
    2517     }
    2518 } elsif ( $dfam eq "md" ) {
    2519         my $addp = "";
    2520         if (($ddir eq "mandrake") && ($dver eq "10.1")) {
    2521             pb_system("$insdm","$cmtdm");
    2522         } else {
    2523             $addp ="perl-DateManip";
    2524         }
    2525         pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"rpm-build wget sudo patch ntp-client perl-File-MimeInfo perl-Mail-Sendmail $addp"));
    2526 } elsif ( $dfam eq "du" ) {
    2527     if (( $dver eq "3.1" ) && ($ddir eq "debian")) {
    2528         pb_system("$insfb","$cmtfb");
    2529         pb_system("$insfm","$cmtfm");
    2530         pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"wget patch ssh sudo debian-builder dh-make fakeroot ntpdate libmodule-build-perl libdate-manip-perl libmail-sendmail-perl"));
    2531     } else  {
    2532         pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"wget patch openssh-server dpkg-dev sudo debian-builder dh-make fakeroot ntpdate libfile-mimeinfo-perl libmodule-build-perl libdate-manip-perl libmail-sendmail-perl"));
    2533     }
    2534 } elsif ( $dfam eq "gen" ) {
    2535         #system "emerge -u system";
    2536         pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"wget sudo ntp DateManip File-MimeInfo Mail-Sendmail"));
    2537 } else {
    2538     pb_log(0,"No pkg to install\n");
    2539 }
    2540 EOF
    25412484}
    25422485
Note: See TracChangeset for help on using the changeset viewer.