Changeset 681 in ProjectBuilder for devel/pb/bin
- Timestamp:
- Feb 15, 2009, 10:05:00 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
devel/pb/bin/pb
r677 r681 1003 1003 my $tmout = "vmtmout"; 1004 1004 my $path = "vmpath"; 1005 if (($cmt eq "vm") || ($cmt eq " Script")) {1005 if (($cmt eq "vm") || ($cmt eq "VMScript")) { 1006 1006 $login = "vmlogin"; 1007 1007 $dir = "pbdefdir"; … … 1011 1011 $host = "vmhost"; 1012 1012 $port = "vmport"; 1013 } elsif ( $cmt eq "ve") {1013 } elsif (($cmt eq "ve")|| ($cmt eq "VEScript")) { 1014 1014 $login = "velogin"; 1015 1015 $dir = "pbdefdir"; 1016 $tmout = "vetmout";1017 1016 # Specific VE 1018 1017 $path = "vepath"; … … 1069 1068 if (($cmt eq "vm") || ($cmt eq "ve")) { 1070 1069 $src="$src $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb $ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb $ENV{'PBETC'} $ENV{'PBDESTDIR'}/pbrc $ENV{'PBDESTDIR'}/pbscript"; 1071 } elsif (($cmt eq "Script") || ($cmt eq "Web")) {1070 } elsif (($cmt =~ /V[EM]Script/) || ($cmt eq "Web")) { 1072 1071 $src="$src $ENV{'PBDESTDIR'}/pbscript"; 1073 1072 } elsif ($cmt eq "Announce") { … … 1079 1078 chomp($src); 1080 1079 close(KEEP); 1081 $src="$src $ENV{'PBBUILDDIR'}/pbscript" if ($cmt ne "Sources");1080 $src="$src $ENV{'PBBUILDDIR'}/pbscript"; 1082 1081 } 1083 1082 # Remove potential leading spaces (cause problem with basename) … … 1091 1090 pb_log(2,"values: ".Dumper(($host,$login,$dir,$port,$tmout,$rebuild,$path,$conf))."\n"); 1092 1091 my ($sshhost,$sshlogin,$sshdir,$sshport,$vtmout,$vepath) = pb_conf_get($host,$login,$dir,$port,$tmout,$path); 1093 my ($vrebuild,$veconf) = pb_conf_get_if($rebuild,$conf); 1092 # Not mandatory 1093 my ($vrebuild,$veconf,$testver) = pb_conf_get_if($rebuild,$conf,"testver"); 1094 1094 pb_log(2,"ssh: ".Dumper(($sshhost,$sshlogin,$sshdir,$sshport,$vtmout,$vrebuild,$vepath,$veconf))."\n"); 1095 # Not mandatory1096 my ($testver) = pb_conf_get_if("testver");1097 1095 1098 1096 my $mac; 1099 # Useless for VE 1100 if ($cmt ne "ve") { 1097 if (($cmt ne "ve") && ($cmt ne "VEScript")) { 1101 1098 $mac = "$sshlogin->{$ENV{'PBPROJ'}}\@$sshhost->{$ENV{'PBPROJ'}}"; 1102 1099 # Overwrite account value if passed as parameter 1103 1100 $mac = "$pbaccount\@$sshhost->{$ENV{'PBPROJ'}}" if (defined $pbaccount); 1104 1101 pb_log(2, "DEBUG: pbaccount: $pbaccount => mac: $mac\n") if (defined $pbaccount); 1102 } else { 1103 # VE 1104 # Overwrite account value if passed as parameter (typically for setup_ve) 1105 $mac = $sshlogin->{$ENV{'PBPROJ'}}; 1106 $mac = $pbaccount if (defined $pbaccount); 1105 1107 } 1106 1108 1107 1109 my $tdir; 1108 1110 my $bdir; 1109 if (($cmt eq "Sources") || ($cmt eq "Script")) {1111 if (($cmt eq "Sources") || ($cmt =~ /V[EM]Script/)) { 1110 1112 $tdir = $sshdir->{$ENV{'PBPROJ'}}."/src"; 1111 1113 if ((defined $testver) && (defined $testver->{$ENV{'PBPROJ'}}) && ($testver->{$ENV{'PBPROJ'}} =~ /true/i)) { … … 1232 1234 # Useless for VE 1233 1235 my $nport; 1234 if ( $cmt ne "ve") {1236 if (($cmt ne "ve") && ($cmt ne "VEScript")) { 1235 1237 $nport = $sshport->{$ENV{'PBPROJ'}}; 1236 1238 $nport = "$pbport" if (defined $pbport); … … 1245 1247 # should use a hash instead... 1246 1248 my ($shcmd,$cpcmd,$cptarget,$cp2target); 1247 if ( $cmt ne "ve") {1249 if (($cmt ne "ve") && ($cmt ne "VEScript")) { 1248 1250 my $keyfile = pb_ssh_get(0); 1249 1251 $shcmd = "ssh -i $keyfile -q -o UserKnownHostsFile=/dev/null -p $nport $mac"; … … 1255 1257 } else { 1256 1258 my $tp = $vepath->{$ENV{'PBPROJ'}}; 1257 $shcmd = "sudo chroot $tp/$v /bin/su - $sshlogin->{$ENV{'PBPROJ'}} -c "; 1258 $cpcmd = "cp -a "; 1259 $cptarget = "$tp/$tdir"; 1260 $cp2target = "$tp/$bdir"; 1259 ($odir,$over,$oarch) = split(/-/,$v); 1260 my $tpdir = "$tp/$odir/$over/$oarch"; 1261 my ($ptr) = pb_conf_get("vetype"); 1262 my $vetype = $ptr->{$ENV{'PBPROJ'}}; 1263 if ($vetype eq "chroot") { 1264 $shcmd = "sudo chroot $tpdir /bin/su - $mac -c "; 1265 $cpcmd = "sudo cp -r "; 1266 } elsif ($vetype eq "schroot") { 1267 $shcmd = "schroot $tp -u $mac -- "; 1268 $cpcmd = "sudo cp -r "; 1269 } 1270 # We need to get the home dir of the target account to deliver in the right place 1271 open(PASS,"$tpdir/etc/passwd") || die "Unable to open $tpdir/etc/passwd"; 1272 my $homedir = ""; 1273 while (<PASS>) { 1274 my ($c1,$c2,$c3,$c4,$c5,$c6,$c7) = split(/:/); 1275 $homedir = $c6 if ($c1 =~ /^$mac$/); 1276 pb_log(3,"Homedir: $homedir - account: $c6\n"); 1277 } 1278 close(PASS); 1279 $cptarget = "$tpdir/$homedir/$tdir"; 1280 if ($cmt eq "ve") { 1281 $cp2target = "$tpdir/$homedir/$bdir"; 1282 } 1283 pb_log(2,"On VE using $cptarget as target dir to copy to\n"); 1261 1284 } 1262 1285 … … 1270 1293 pb_system("cd $ENV{'PBBUILDDIR'} ; $cpcmd $src $cptarget 2> /dev/null","$cmt delivery in $cptarget"); 1271 1294 1272 # For VE we need to change the owner manually - To be tested if needed 1273 #if ($cmt eq "ve") { 1274 #pb_system("cd $cptarget ; sudo chown -R $sshlogin->{$ENV{'PBPROJ'}} .","$cmt chown in $cptarget to $sshlogin->{$ENV{'PBPROJ'}}"); 1275 #} 1295 # For VE we need to change the owner manually 1296 if ($cmt eq "ve") { 1297 pb_system("$shcmd \"sudo chown -R $mac $tdir\"","Adapt owner in $tdir to $mac"); 1298 } 1299 1276 1300 pb_system("$shcmd \"echo \'cd $tdir ; if [ -f pbscript ]; then ./pbscript; fi ; rm -f ./pbscript\' | bash\"","Executing pbscript on $cptarget if needed","verbose"); 1277 1301 if (($cmt eq "vm") || ($cmt eq "ve")) { 1278 1302 # Get back info on pkg produced, compute their name and get them from the VM 1279 1303 pb_system("$cpcmd $cp2target/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'} $ENV{'PBBUILDDIR'} 2> /dev/null","Get package names in $cp2target"); 1304 # For VE we need to change the owner manually 1305 if ($cmt eq "ve") { 1306 pb_system("sudo chown $UID $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}","Adapt owner in $tdir to $UID"); 1307 } 1280 1308 open(KEEP,"$ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}") || die "Unable to read $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}"; 1281 1309 my $src = <KEEP>; … … 1312 1340 } 1313 1341 pb_log(2,"Before halt, vmexist: $vmexist, vmpid: $vmpid\n"); 1314 if ((! $vmexist) && (($cmt eq "vm") || ($cmt eq " Script"))) {1342 if ((! $vmexist) && (($cmt eq "vm") || ($cmt eq "VMScript"))) { 1315 1343 pb_system("$shcmd \"sudo /sbin/halt -p \"; sleep $tm ; echo \'if [ -d /proc/$vmpid ]; then kill -9 $vmpid; fi \' | bash ; sleep 10","VM $v halt (pid $vmpid)"); 1316 1344 } … … 1363 1391 # and launch the build through pbscript 1364 1392 pb_log(2,"DEBUG: Before send2target, vmexist: $vmexist, vmpid: $vmpid\n"); 1365 pb_send2target( "Script","$v",$vmexist,$vmpid);1393 pb_send2target(uc($vtype)."Script","$v",$vmexist,$vmpid); 1366 1394 1367 1395 } … … 1480 1508 my ($ddir, $dver, $dfam, $dtype, $pbsuf) = pb_distro_init($name,$ver); 1481 1509 1482 if ( $vetype eq "chroot") {1510 if (($vetype eq "chroot") || ($vetype eq "schroot")) { 1483 1511 # Architecture consistency 1484 1512 if ($arch ne $darch) { … … 1516 1544 $addpkgs = "--add-pkg-list $pkgfile"; 1517 1545 } 1518 my $rinseverb = "--verbose" if ($pbdebug gt 0); 1546 my $rinseverb = ""; 1547 $rinseverb = "--verbose" if ($pbdebug gt 0); 1519 1548 1520 1549 pb_system("sudo /usr/sbin/rinse --directory \"$vepath->{$ENV{'PBPROJ'}}/$ddir/$dver/$darch\" --arch \"$darch\" --distribution \"$ddir-$dver\" --config \"$veconf->{$ENV{'PBPROJ'}}\" $post $addpkgs $rinseverb","Creating the rinse VE for $ddir-$dver ($darch)", "verbose"); … … 1525 1554 } 1526 1555 } elsif ($dtype eq "deb") { 1527 pb_system("","Creating the pbuilder VE ");1556 pb_system("","Creating the pbuilder VE TBD"); 1528 1557 } elsif ($dtype eq "ebuild") { 1529 1558 die "Please teach the dev team how to build gentoo chroot"; … … 1792 1821 my ($vmexist,$vmpid); 1793 1822 1823 # Prepare the script to be executed on the VM/VE 1824 # in $ENV{'PBDESTDIR'}/setupv 1825 open(SCRIPT,"> $pbscript") || die "Unable to create $pbscript"; 1826 1827 print SCRIPT << 'EOF'; 1828 #!/usr/bin/perl -w 1829 1830 use strict; 1831 use File::Copy; 1832 1833 # We should not need in this script more functions than what is provided 1834 # by Base and Distribution to avoid problems at exec time. 1835 # They are appended at the end. 1836 1837 our $pbdebug; 1838 our $pbLOG; 1839 our $pbsynmsg = "pbscript"; 1840 our $pbdisplaytype = "text"; 1841 our $pblocale = ""; 1842 pb_log_init($pbdebug, $pbLOG); 1843 pb_temp_init(); 1844 1845 EOF 1846 1794 1847 if ($vtype eq "vm") { 1795 1848 # Prepare the key to be used and transfered remotely … … 1815 1868 pb_system("cat $keyfile.pub | ssh -q -o UserKnownHostsFile=/dev/null -p $nport -i $keyfile root\@$vmhost->{$ENV{'PBPROJ'}} \"mkdir -p .ssh ; chmod 700 .ssh ; cat >> .ssh/authorized_keys ; chmod 600 .ssh/authorized_keys\"","Copying local keys to $vtype. This may require the root password"); 1816 1869 # once this is done, we can do what we want on the VM remotely 1817 } 1870 } elsif ($vtype eq "ve") { 1871 # We need to finish the setup of packages needed in the VE if needed 1872 # rinse at least needs it 1873 my ($vepkglist) = pb_conf_get_if("vepkglist"); 1874 1875 if (defined $vepkglist) { 1876 # Get distro context 1877 my ($name,$ver,$darch) = split(/-/,$v); 1878 chomp($darch); 1879 my ($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd) = pb_distro_init($name,$ver); 1818 1880 1819 # Prepare the script to be executed on the VM/VE 1820 # in $ENV{'PBDESTDIR'}/setupv 1821 1822 open(SCRIPT,"> $pbscript") || die "Unable to create $pbscript"; 1823 print SCRIPT << 'EOF'; 1824 #!/usr/bin/perl -w 1825 1826 use strict; 1827 use File::Copy; 1828 1829 # We should not need in this script more functions than what is provided 1830 # by Base and Distribution to avoid problems at exec time. 1831 # They are appended at the end. 1832 1833 our $pbdebug; 1834 our $pbLOG; 1835 our $pbsynmsg = "pbscript"; 1836 our $pbdisplaytype = "text"; 1837 our $pblocale = ""; 1838 pb_log_init($pbdebug, $pbLOG); 1839 pb_temp_init(); 1840 1841 EOF 1881 my $postparam = pb_get_dist_param($ddir,$dver,$darch,$vepkglist); 1882 # Change the list of pkg in to a space separated list 1883 $postparam =~ s/,/ /g; 1884 # remove potential sudo from the update command for this time, 1885 # as this will be run as root anyway, and if not we will have 1886 # a problem with tty 1887 $pbupd =~ s/sudo //g; 1888 1889 print SCRIPT << "EOF"; 1890 # For VE we first need to mount some FS 1891 pb_system("mount -t proc /proc /proc"); 1892 1893 # For VE we need a good null dev 1894 pb_system("rm -f /dev/null; mknod /dev/null c 1 3; chmod 777 /dev/null"); 1895 1896 1897 # For VE we need some additional packages that are not there yet 1898 pb_system("$pbupd $postparam"); 1899 1900 EOF 1901 } 1902 } 1842 1903 if ($vtype eq "vm") { 1843 1904 print SCRIPT << 'EOF'; … … 1984 2045 system "pb 2>&1 | head -5"; 1985 2046 EOF 2047 if ($vtype eq "ve") { 2048 print SCRIPT << 'EOF'; 2049 # For VE we need to umount some FS at the end 2050 2051 pb_system("umount /proc"); 2052 EOF 2053 } 2054 1986 2055 # Adds pb_distro_init from ProjectBuilder::Distribution and Base 1987 2056 foreach my $d (@INC) { … … 2034 2103 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*"; 2035 2104 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*"; 2036 my $inslg = "rm -rf gettext* ; wget http://search.cpan.org/CPAN/authors/id/P/PV/PVANDRY/gettext-1.05.tar.gz ; tar xvfz gettext-1.05.tar.gz ; cd gettext* ; perl Makefile.PL ; make ; make install ; cd .. ; rm -rf gettext*";2037 2105 my $cmtdm = "Installing Date-Manip perl module"; 2038 2106 my $cmtmb = "Installing Module-Build perl module"; … … 2040 2108 my $cmtfb = "Installing File-Basedir perl module"; 2041 2109 my $cmtms = "Installing Perl-Sendmail perl module"; 2042 my $cmtlg = "Installing Perl-gettext perl module";2043 2110 my $cmtall = "Installing required modules"; 2044 2111 … … 2051 2118 pb_system("$insfb","$cmtfb"); 2052 2119 pb_system("$insms","$cmtms"); 2053 pb_system("$inslg","$cmtlg");2054 2120 } else { 2055 my $addp = ""; 2056 if ($dver > 9) { 2057 $addp = "perl-gettext"; 2058 } else { 2059 pb_system("$inslg","$cmtlg"); 2060 } 2061 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 $addp")); 2121 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")); 2062 2122 } 2063 2123 } elsif (( $dfam eq "rh" ) || ($ddir eq "sles") || (($ddir eq "suse") && (($dver eq "10.1") || ($dver eq "10.0"))) || ($ddir eq "slackware")) { … … 2069 2129 pb_system("$insfb","$cmtfb"); 2070 2130 pb_system("$insms","$cmtms"); 2071 pb_system("$inslg","$cmtlg");2072 2131 } elsif ($ddir eq "suse") { 2073 2132 # New OpenSuSE … … 2086 2145 if (($ddir eq "mandrake") && ($dver eq "10.1")) { 2087 2146 pb_system("$insdm","$cmtdm"); 2088 pb_system("$inslg","$cmtlg");2089 2147 } else { 2090 $addp ="perl-DateManip perl-Locale-gettext";2091 } 2092 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 perl-Locale-gettext$addp"));2148 $addp ="perl-DateManip"; 2149 } 2150 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")); 2093 2151 } elsif ( $dfam eq "du" ) { 2094 2152 if (( $dver eq "3.1" ) && ($ddir eq "debian")) { 2095 2153 pb_system("$insfb","$cmtfb"); 2096 2154 pb_system("$insfm","$cmtfm"); 2097 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 liblocale-gettext-perl"));2155 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")); 2098 2156 } else { 2099 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 liblocale-gettext-perl"));2157 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")); 2100 2158 } 2101 2159 } elsif ( $dfam eq "gen" ) { 2102 2160 #system "emerge -u system"; 2103 pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"wget sudo ntp DateManip File-MimeInfo Mail-Sendmail Locale-gettext"));2161 pb_distro_installdeps(undef,$dtype,$pbupd,pb_distro_only_deps_needed($dtype,"wget sudo ntp DateManip File-MimeInfo Mail-Sendmail")); 2104 2162 } else { 2105 2163 pb_log(0,"No pkg to install\n");
Note:
See TracChangeset
for help on using the changeset viewer.