Changeset 1348 in ProjectBuilder for devel/pb/bin/pb
- Timestamp:
- Oct 26, 2011, 11:28:44 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
devel/pb/bin/pb
r1340 r1348 36 36 use ProjectBuilder::Filter; 37 37 use ProjectBuilder::Changelog; 38 use ProjectBuilder::VE; 38 39 39 40 # Global variables … … 2069 2070 my $create = shift || 0; # By default do not create a VM/VE/RM 2070 2071 my $snapme = shift || 0; # By default do not snap a VM/VE/RM 2072 my $usesnap = shift || 1; # By default study the usage of the snapshot feature of VM/VE/RM my $create = shift || 0; # By default do not create a VM/VE/RM 2073 my $snapme = shift || 0; # By default do not snap a VM/VE/RM 2071 2074 my $usesnap = shift || 1; # By default study the usage of the snapshot feature of VM/VE/RM 2075 2072 2076 2073 2077 # If creation or snapshot creation mode, no snapshot usable … … 2082 2086 2083 2087 my $pbos = pb_distro_get_context($v); 2084 my $arch = pb_get_arch(); 2085 2088 2086 2089 # Launch the VMs/VEs 2087 2090 if ($vtype eq "vm") { … … 2209 2212 return($vmexist,$vmpid); 2210 2213 } elsif ($vtype eq "ve") { 2211 # VE here 2212 # Get distro context 2213 my $pbos = pb_distro_get_context($v); 2214 2215 # Get VE context 2216 my ($ptr,$vepath) = pb_conf_get("vetype","vepath"); 2217 my $vetype = $ptr->{$ENV{'PBPROJ'}}; 2218 2219 # We can probably only get those params now we have the distro context 2220 my ($rbsb4pi,$rbspi,$vesnap,$oscodename,$osmindep,$verebuild,$rbsmirrorsrv) = pb_conf_get_if("rbsb4pi","rbspi","vesnap","oscodename","osmindep","verebuild","rbsmirrorsrv"); 2221 2222 # We need to avoid umask propagation to the VE 2223 umask 0022; 2224 2225 if (($vetype eq "chroot") || ($vetype eq "schroot")) { 2226 # Architecture consistency 2227 if ($arch ne $pbos->{'arch'}) { 2228 die "Unable to launch a VE of architecture $pbos->{'arch'} on a $arch platform" if (($pbos->{'arch'} eq "x86_64") && ($arch =~ /i?86/)); 2229 } 2230 2231 my ($verpmtype,$vedebtype) = pb_conf_get("verpmtype","vedebtype"); 2232 if (($create != 0) || ((defined $verebuild) && ($verebuild->{$ENV{'PBPROJ'}} =~ /true/i)) || ($pbforce == 1)) { 2233 my ($rbsopt1) = pb_conf_get_if("rbsopt"); 2234 2235 # We have to rebuild the chroot 2236 if ($pbos->{'type'} eq "rpm") { 2237 2238 # Which tool is used 2239 my $verpmstyle = $verpmtype->{$ENV{'PBPROJ'}}; 2240 2241 # Get potential rbs option 2242 my $rbsopt = ""; 2243 if (defined $rbsopt1) { 2244 if (defined $rbsopt1->{$verpmstyle}) { 2245 $rbsopt = $rbsopt1->{$verpmstyle}; 2246 } elsif (defined $rbsopt1->{$ENV{'PBPROJ'}}) { 2247 $rbsopt = $rbsopt1->{$ENV{'PBPROJ'}}; 2248 } else { 2249 $rbsopt = ""; 2250 } 2251 } 2252 2253 my $postinstall = pb_get_postinstall($pbos,$rbspi,$verpmstyle); 2254 if ($verpmstyle eq "rinse") { 2255 # Need to reshape the mirrors generated with local before-post-install script 2256 my $b4post = "--before-post-install "; 2257 my $postparam = pb_distro_get_param($pbos,$rbsb4pi); 2258 if ($postparam eq "") { 2259 $b4post = ""; 2260 } else { 2261 $b4post .= $postparam; 2262 } 2263 2264 # Need to reshape the package list for pb 2265 my $addpkgs; 2266 $postparam = ""; 2267 $postparam .= pb_distro_get_param($pbos,$osmindep); 2268 if ($postparam eq "") { 2269 $addpkgs = ""; 2270 } else { 2271 my $pkgfile = "$ENV{'PBTMP'}/addpkgs.lis"; 2272 open(PKG,"> $pkgfile") || die "Unable to create $pkgfile"; 2273 foreach my $p (split(/,/,$postparam)) { 2274 print PKG "$p\n"; 2275 } 2276 close(PKG); 2277 $addpkgs = "--add-pkg-list $pkgfile"; 2278 } 2279 2280 my $rinseverb = ""; 2281 $rinseverb = "--verbose" if ($pbdebug gt 0); 2282 my ($rbsconf) = pb_conf_get("rbsconf"); 2283 2284 my $command = pb_check_req("rinse",0); 2285 pb_system("sudo $command --directory \"$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}\" --arch \"$pbos->{'arch'}\" --distribution \"$pbos->{'name'}-$pbos->{'version'}\" --config \"$rbsconf->{$ENV{'PBPROJ'}}\" $b4post $postinstall $rbsopt $addpkgs $rinseverb","Creating the rinse VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})", "verbose"); 2286 } elsif ($verpmstyle eq "rpmbootstrap") { 2287 my $rbsverb = ""; 2288 foreach my $i (1..$pbdebug) { 2289 $rbsverb .= " -v"; 2290 } 2291 my $addpkgs = ""; 2292 my $postparam = ""; 2293 $postparam .= pb_distro_get_param($pbos,$osmindep); 2294 if ($postparam eq "") { 2295 $addpkgs = ""; 2296 } else { 2297 $addpkgs = "-a $postparam"; 2298 } 2299 my $command = pb_check_req("rpmbootstrap",0); 2300 pb_system("sudo $command $rbsopt $postinstall $addpkgs $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'} $rbsverb","Creating the rpmbootstrap VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})", "verbose"); 2301 } elsif ($verpmstyle eq "mock") { 2302 my ($rbsconf) = pb_conf_get("rbsconf"); 2303 my $command = pb_check_req("mock",0); 2304 pb_system("sudo $command --init --resultdir=\"/tmp\" --configdir=\"$rbsconf->{$ENV{'PBPROJ'}}\" -r $v $rbsopt","Creating the mock VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})"); 2305 # Once setup we need to install some packages, the pb account, ... 2306 pb_system("sudo $command --install --configdir=\"$rbsconf->{$ENV{'PBPROJ'}}\" -r $v su","Configuring the mock VE"); 2307 } else { 2308 die "Unknown verpmtype type $verpmstyle. Report to dev team"; 2309 } 2310 } elsif ($pbos->{'type'} eq "deb") { 2311 my $vedebstyle = $vedebtype->{$ENV{'PBPROJ'}}; 2312 2313 my $codename = pb_distro_get_param($pbos,$oscodename); 2314 my $postparam = ""; 2315 my $addpkgs; 2316 $postparam .= pb_distro_get_param($pbos,$osmindep); 2317 if ($postparam eq "") { 2318 $addpkgs = ""; 2319 } else { 2320 $addpkgs = "--include $postparam"; 2321 } 2322 my $debmir = ""; 2323 $debmir .= pb_distro_get_param($pbos,$rbsmirrorsrv); 2324 2325 # Get potential rbs option 2326 my $rbsopt = ""; 2327 if (defined $rbsopt1) { 2328 if (defined $rbsopt1->{$vedebstyle}) { 2329 $rbsopt = $rbsopt1->{$vedebstyle}; 2330 } elsif (defined $rbsopt1->{$ENV{'PBPROJ'}}) { 2331 $rbsopt = $rbsopt1->{$ENV{'PBPROJ'}}; 2332 } else { 2333 $rbsopt = ""; 2334 } 2335 } 2336 2337 # debootstrap works with amd64 not x86_64 2338 my $debarch = $pbos->{'arch'}; 2339 $debarch = "amd64" if ($pbos->{'arch'} eq "x86_64"); 2340 if ($vedebstyle eq "debootstrap") { 2341 my $dbsverb = ""; 2342 $dbsverb = "--verbose" if ($pbdebug gt 0); 2343 2344 # Some perl modules are in Universe on Ubuntu 2345 $rbsopt .= " --components=main,universe" if ($pbos->{'name'} eq "ubuntu"); 2346 2347 pb_system("sudo /usr/sbin/debootstrap $dbsverb $rbsopt --arch=$debarch $addpkgs $codename \"$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}\" $debmir","Creating the debootstrap VE for $pbos->{'name'}-$pbos->{'version'} ($pbos->{'arch'})", "verbose"); 2348 # debootstrap doesn't create an /etc/hosts file 2349 if (! -f "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/etc/hosts" ) { 2350 pb_system("sudo cp /etc/hosts $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}/etc/hosts"); 2351 } 2352 } else { 2353 die "Unknown vedebtype type $vedebstyle. Report to dev team"; 2354 } 2355 } elsif ($pbos->{'type'} eq "ebuild") { 2356 die "Please teach the dev team how to build gentoo chroot"; 2357 } else { 2358 die "Unknown distribution type $pbos->{'type'}. Report to dev team"; 2359 } 2360 } 2361 # Fix modes to allow access to the VE for pb user 2362 pb_system("sudo chmod 755 $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'} $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'} $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}","Fixing permissions"); 2363 2364 # Test if an existing snapshot exists and use it if appropriate 2365 # And also use it of no local extracted VE is present 2366 if ((-f "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz") && 2367 (((defined $vesnap->{$v}) && ($vesnap->{$v} =~ /true/i)) || 2368 ((defined $vesnap->{$ENV{'PBPROJ'}}) && ($vesnap->{$ENV{'PBPROJ'}} =~ /true/i)) || 2369 ($pbsnap eq 1) || 2370 (! -d "$vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"))) { 2371 pb_system("sudo rm -rf $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} ; sudo mkdir -p $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} ; sudo tar xz -C $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'} -f $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz","Extracting snapshot of $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}.tar.gz under $vepath->{$ENV{'PBPROJ'}}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}"); 2372 } 2373 # Nothing more to do for VE. No real launch 2374 } else { 2375 die "VE of type $vetype not supported. Report to the dev team"; 2376 } 2214 pb_ve_launch($v,$create,$pbforce,$pbsnap); 2377 2215 } else { 2378 2216 # RM here … … 3678 3516 } 3679 3517 3680 #3681 # Return the postinstall line if needed3682 #3683 3684 sub pb_get_postinstall {3685 3686 my $pbos = shift;3687 my $rbspi = shift;3688 my $vestyle = shift;3689 my $post = "";3690 3691 # Do we have a local post-install script3692 if ($vestyle eq "rinse") {3693 $post = "--post-install ";3694 } elsif ($vestyle eq "rpmbootstrap") {3695 $post = "-s ";3696 }3697 3698 my $postparam = pb_distro_get_param($pbos,$rbspi);3699 if ($postparam eq "") {3700 $post = "";3701 } else {3702 $post .= $postparam;3703 }3704 return($post);3705 }3706 3707 3518 # Manages VM/RM SSH port communication 3708 3519 sub pb_get_port {
Note:
See TracChangeset
for help on using the changeset viewer.