- Timestamp:
- Feb 11, 2011, 12:17:49 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
devel/pb/bin/pb
r1177 r1179 1505 1505 ($pbver,$pbtag) = split(/-/,$vertag); 1506 1506 1507 if (($cmt eq "Sources") || ($cmt =~ / V[EM]build/)) {1507 if (($cmt eq "Sources") || ($cmt =~ /(V[EM]|RM)build/)) { 1508 1508 $src = "$src $ENV{'PBDESTDIR'}/$pbpkg-$pbver.tar.gz $ENV{'PBDESTDIR'}/$pbpkg-$pbver.pbconf.tar.gz"; 1509 1509 if ($cmd eq "") { … … 1769 1769 1770 1770 # Useless for VE 1771 my $nport = pb_get_port($sshport ->{$ENV{'PBPROJ'}},$cmt) if ($cmt !~ /^VE/);1771 my $nport = pb_get_port($sshport,$pbos,$cmt) if ($cmt !~ /^VE/); 1772 1772 1773 1773 # Remove a potential $ENV{'HOME'} as tdir should be relative to pb's home … … 1782 1782 # should use a hash instead... 1783 1783 my ($shcmd,$cpcmd,$cptarget,$cp2target); 1784 my ($odir,$over,$oarch);1785 1784 if ($cmt !~ /^VE/) { 1786 1785 my $keyfile = pb_ssh_get(0); … … 1793 1792 } else { 1794 1793 my $tp = $vepath->{$ENV{'PBPROJ'}}; 1795 ($odir,$over,$oarch) = split(/-/,$v); 1796 my $tpdir = "$tp/$odir/$over/$oarch"; 1794 my $tpdir = "$tp/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"; 1797 1795 my ($ptr) = pb_conf_get("vetype"); 1798 1796 my $vetype = $ptr->{$ENV{'PBPROJ'}}; 1799 1797 if ($vetype eq "chroot") { 1800 $shcmd = "sudo chroot $tpdir /bin/su - $mac -c ";1798 $shcmd = "sudo /usr/sbin/chroot $tpdir /bin/su - $mac -c "; 1801 1799 } elsif ($vetype eq "schroot") { 1802 1800 $shcmd = "schroot $tp -u $mac -- "; 1803 1801 } 1804 $cpcmd = "sudo cp -r ";1802 $cpcmd = "sudo /bin/cp -r "; 1805 1803 # We need to get the home dir of the target account to deliver in the right place 1806 1804 open(PASS,"$tpdir/etc/passwd") || die "Unable to open $tpdir/etc/passwd"; … … 1859 1857 1860 1858 $src =~ s/^ *//; 1861 pb_mkdir_p("$ENV{'PBBUILDDIR'}/$ odir/$over/$oarch");1859 pb_mkdir_p("$ENV{'PBBUILDDIR'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"); 1862 1860 # Change pgben to make the next send2target happy 1863 1861 my $made = ""; … … 1873 1871 foreach my $p (split(/ +/,$src)) { 1874 1872 my $j = basename($p); 1875 pb_system("$cpcmd $cp2target/$delim$p$delim $ENV{'PBBUILDDIR'}/$ odir/$over/$oarch 2> /dev/null","Recovery of package $j in $ENV{'PBBUILDDIR'}/$odir/$over/$oarch");1876 $made="$made $ odir/$over/$oarch/$j"; # if (($pbos->{'type'} ne "rpm") || ($j !~ /.src.rpm$/));1873 pb_system("$cpcmd $cp2target/$delim$p$delim $ENV{'PBBUILDDIR'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} 2> /dev/null","Recovery of package $j in $ENV{'PBBUILDDIR'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"); 1874 $made="$made $pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/$j"; # if (($pbos->{'type'} ne "rpm") || ($j !~ /.src.rpm$/)); 1877 1875 } 1878 1876 print KEEP "$made\n"; … … 1892 1890 undef $pbaccount; 1893 1891 pb_log(2,"Before sending pkgs, vmexist: $vmexist, vmpid: $vmpid\n"); 1894 pb_send2target("Packages",$ odir."-".$over."-".$oarch,$vmexist,$vmpid);1895 pb_rm_rf("$ENV{'PBBUILDDIR'}/$ odir/$over/$oarch");1892 pb_send2target("Packages",$pbos->{'name'}."-".$pbos->{'version'}."-".$pbos->{'arch'},$vmexist,$vmpid); 1893 pb_rm_rf("$ENV{'PBBUILDDIR'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"); 1896 1894 } 1897 1895 } … … 1936 1934 } 1937 1935 if (($cmt =~ /^VE/) && ($snapme != 0)) { 1938 ($odir,$over,$oarch) = split(/-/,$v); 1939 my $tpdir = "$vepath->{$ENV{'PBPROJ'}}/$odir/$over/$oarch"; 1940 pb_system("sudo tar cz -f $vepath->{$ENV{'PBPROJ'}}/$odir-$over-$oarch.tar.gz -C $tpdir .","Creating a snapshot of $tpdir"); 1936 my $tpdir = "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"; 1937 pb_system("sudo tar cz -C $tpdir -f $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz .","Creating a snapshot of $tpdir"); 1941 1938 } 1942 1939 } … … 2012 2009 $v =~ s/,.*//; 2013 2010 2011 my $pbos = pb_distro_get_context($v); 2014 2012 my $arch = pb_get_arch(); 2015 2013 … … 2075 2073 $ENV{'PBVMTMOUT'} = $vmtmout->{$ENV{'PBPROJ'}}; 2076 2074 } 2077 my $nport = pb_get_port($vmport ->{$ENV{'PBPROJ'}});2075 my $nport = pb_get_port($vmport,$pbos,$vtype); 2078 2076 2079 2077 my $cmd; … … 2347 2345 $date[1]++; 2348 2346 my $upddate = strftime("%m%d%H%M%Y", @date); 2349 my $dateline = "sudo date $upddate";2347 my $dateline = "sudo /bin/date $upddate"; 2350 2348 return($ntpline,$dateline); 2351 2349 } … … 2409 2407 # VE needs a good /proc 2410 2408 if ($vtype eq "ve") { 2411 print SCRIPT "sudo mount -t proc /proc /proc\n";2409 print SCRIPT "sudo /bin/mount -t proc /proc /proc\n"; 2412 2410 } 2413 2411 … … 2459 2457 2460 2458 if ($vtype eq "ve") { 2461 print SCRIPT "sudo umount /proc\n";2459 print SCRIPT "sudo /bin/umount /proc\n"; 2462 2460 } 2463 2461 … … 2711 2709 my ($vmport,$vmntp); 2712 2710 ($vmhost,$vmport,$vmntp) = pb_conf_get($vtype."host",$vtype."port",$vtype."ntp"); 2713 $nport = pb_get_port($vmport ->{$ENV{'PBPROJ'}});2711 $nport = pb_get_port($vmport,$pbos,$vtype); 2714 2712 2715 2713 # Skip that VM/RM if something went wrong … … 2795 2793 } 2796 2794 EOF 2797 # TODO: Level of portability of these cmds ? 2795 # TODO: Level of portability of these cmds ? Critical now for RM 2798 2796 print SCRIPT << "EOF"; 2799 2797 pb_system("/usr/sbin/groupadd $pbac->{$ENV{'PBPROJ'}}","Adding group $pbac->{$ENV{'PBPROJ'}}"); … … 2895 2893 close(PBFILE); 2896 2894 EOF 2897 # TODO: To be refined for RM2898 2895 print SCRIPT << "EOF"; 2899 2896 # Some distro force requiretty at compile time, so disable here 2900 2897 print PBOUT "Defaults:$pbac->{$ENV{'PBPROJ'}} !requiretty\n"; 2901 2898 print PBOUT "Defaults:root !requiretty\n"; 2902 # This is needed in order to be able to halt the machine from the $pbac->{$ENV{'PBPROJ'}} account at least2899 # Keep proxy configuration while using sudo 2903 2900 print PBOUT "Defaults:$pbac->{$ENV{'PBPROJ'}} env_keep += \\\"http_proxy ftp_proxy\\\"\n"; 2901 EOF 2902 # Try to restrict security to what is really needed 2903 if ($vtype =~ /^vm/) { 2904 my $sudocmds = pb_get_sudocmds($pbos); 2905 my $hpath = "/sbin"; 2906 # Solaris has halt elsewhere 2907 if ($pbos->{'type'} eq "pkg") { 2908 $hpath = "/usr/sbin"; 2909 } 2910 print SCRIPT << "EOF"; 2911 # This is needed in order to be able on VM to halt the machine from the $pbac->{$ENV{'PBPROJ'}} account at least 2912 # Build account $pbac->{$ENV{'PBPROJ'}} in VM also needs to setup date and install deps. 2913 # Nothing else should be needed 2914 print PBOUT "$pbac->{$ENV{'PBPROJ'}} localhost=NOPASSWD:$hpath/halt\n"; 2915 EOF 2916 foreach my $c ($sudocmds) { 2917 print SCRIPT "print PBOUT \"$pbac->{$ENV{'PBPROJ'}} localhost=NOPASSWD:$c\n\""; 2918 } 2919 } elsif ($vtype =~ /^rm/) { 2920 my $sudocmds = pb_get_sudocmds($pbos); 2921 print SCRIPT << "EOF"; 2922 # Build account $pbac->{$ENV{'PBPROJ'}} in RM only needs to setup date and install deps if needed each time 2923 EOF 2924 foreach my $c ($sudocmds) { 2925 print SCRIPT "print PBOUT \"$pbac->{$ENV{'PBPROJ'}} localhost=NOPASSWD:$c\n\""; 2926 } 2927 } else { 2928 print SCRIPT << "EOF"; 2929 # Build account $pbac->{$ENV{'PBPROJ'}} for VE needs to do a lot in the host (and chroot), so allow without restriction for now 2904 2930 print PBOUT "$pbac->{$ENV{'PBPROJ'}} ALL=(ALL) NOPASSWD:ALL\n"; 2905 2931 EOF 2932 } 2906 2933 print SCRIPT << 'EOF'; 2907 2934 close(PBOUT); … … 3126 3153 # VE needs a good /proc 3127 3154 if ($vtype eq "ve") { 3128 print SCRIPT "sudo mount -t proc /proc /proc\n";3155 print SCRIPT "sudo /bin/mount -t proc /proc /proc\n"; 3129 3156 } 3130 3157 print SCRIPT "$pbos->{'update'}\n"; 3131 3158 if ($vtype eq "ve") { 3132 print SCRIPT "sudo umount /proc\n";3159 print SCRIPT "sudo /bin/umount /proc\n"; 3133 3160 } 3134 3161 close(SCRIPT); … … 3596 3623 3597 3624 my $port = shift; 3625 my $pbos = shift; 3598 3626 my $cmt = shift; 3627 my $nport; 3599 3628 3600 3629 die "No port passed in parameter. Report to dev team\n" if (not defined $port); 3601 pb_log(2,"pb_get_port with $port\n"); 3602 my $nport = $port; 3630 # key is project on VM, but machine tuple for RM 3631 if ($cmt =~ /^RM/i) { 3632 $nport = $port->{"$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"}; 3633 } else { 3634 $nport = $port->{$ENV{'PBPROJ'}}; 3635 } 3636 pb_log(2,"pb_get_port with $nport\n"); 3603 3637 # Maybe a port was given as parameter so overwrite 3604 3638 $nport = "$pbport" if (defined $pbport); 3605 3639 # Maybe in // mode so use the env var set up as an offset to the base port, except when called from send2target for Packages 3606 if ( (not defined $cmt) || ($cmt ne "Packages")) {3640 if ($cmt ne "Packages") { 3607 3641 $nport += $ENV{'PBVMPORT'} if ((defined $pbparallel) && (defined $ENV{'PBVMPORT'})); 3608 3642 } … … 3661 3695 } 3662 3696 3697 sub pb_get_sudocmds { 3698 3699 my $pbos = shift; 3700 my @sudocmds; 3701 3702 foreach my $c (split(/;/,$pbos->{'update'}),split(/;/,$pbos->{'install'})) { 3703 next if ($c !~ /^sudo/); 3704 $c =~ s/^sudo[ \t]+//; 3705 push @sudocmds,$c; 3706 } 3707 pb_log(2,"pb_get_sudcomds returns ".Dumper(@sudocmds)."\n"); 3708 return(@sudocmds); 3709 } 3710 3663 3711 3664 3712 1;
Note:
See TracChangeset
for help on using the changeset viewer.