Changeset 1348 in ProjectBuilder
- Timestamp:
- Oct 26, 2011, 11:28:44 AM (13 years ago)
- Location:
- devel
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
devel/pb-modules/etc/pb.conf
r1318 r1348 358 358 #rbsmirrorsrv debian = http://ftp.us.debian.org/debian/ 359 359 #rbsmirrorsrv ubuntu = http://us.releases.ubuntu.com/releases/ 360 # 361 362 # 363 # pbmkbm configuration parameters 364 # 365 mkbmpath default = /var/cache/pbmkbm 360 366 361 367 # pb install dependencies per distro -
devel/pb-modules/etc/pb.conf.pod
r1287 r1348 54 54 Conffile: project 55 55 Example: filteredfiles mindi = rootfs/sbin/init,mindi,install.sh,doc/mindi.8 56 57 =item B<mkbmpath> 58 59 Nature: Mandatory 60 Key: OS (could be from the most generic up to the most specific from ostype, osfamily, os, os-ver, os-ver-arch). The family name is generaly used here. 61 Value: path of the temporary directory into which the boot media is created. 62 Conffile: pb 63 Example: mkbmpath default = /var/cache/pbmkbm 56 64 57 65 =item B<namingtype> -
devel/pb-modules/lib/ProjectBuilder/Env.pm
r1312 r1348 59 59 sub pb_env_init_pbrc { 60 60 61 # if sudo, then get the real id of the user lau cnhing the context61 # if sudo, then get the real id of the user launching the context 62 62 # to point to the right conf file 63 63 # Mandatory for rpmbootstrap calls -
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 { -
devel/pbmkbm/bin/pbmkbm
r1341 r1348 21 21 use ProjectBuilder::Conf; 22 22 use ProjectBuilder::Distribution; 23 use ProjectBuilder::VE; 23 24 24 25 # Global variables … … 50 51 Kernel, modules could come either from the local installed system 51 52 (typically for disaster recovery context) or from a kernel package of a 52 given configuration .53 given configuration or a referenced content. 53 54 Utilities could come from busybox, local utilities or set of packages. 54 55 The root filesystem is made with them. 55 56 The initrd/initramfs could be made internaly or by calling dracut. 56 T He boot config file is generated from analysis content or provided externally.57 The boot config file is generated from analysis content or provided externally. 57 58 58 59 =head1 SYNOPSIS 59 60 60 pbmkbm [-vhq][-t boot- media-type [-d device]][-m os-ver-arch]61 pbmkbm [-vhq][-t boot-type [-d device]][-b boot-method][-m os-ver-arch] 61 62 [-s script][-a pkg1[,pkg2,...]] [target-dir] 62 63 63 pbmkbm [--verbose][--help][--man][--quiet][--type boot-media-type [-device device]] 64 [--script script][--iso iso][--add pkg1,[pkg2,...]][target-dir] 64 pbmkbm [--verbose][--help][--man][--quiet][--type boot-type [--device device]] 65 [--machine os-ver-arch][--boot boot-method] 66 [--script script][--add pkg1,[pkg2,...]] [target-dir] 65 67 66 68 =head1 OPTIONS … … 84 86 Do not print any output. 85 87 88 =item B<-t|--type boot-type> 89 90 Type of the boot device to generate. A boot-type can be: 91 92 =over 4 93 94 =item B<iso> 95 96 Generate an ISO9660 image format (suitable to be burned later on or loopback mounted. Uses isolinux. 97 98 =item B<usb> 99 100 Generate a USB image format (typically a key of external hard drive). Uses syslinux. 101 102 =item B<pxe> 103 104 Generate a PXE environement (suitable to be integrated in a PXElinux configuration). Uses pxelinux. 105 106 =back 107 108 =item B<-d|--device device-file> 109 110 Name of the device or file on which you want to create the boot media. 111 112 =item B<-b|--boot boot-method> 113 114 This is the boot method to use to create the boot media. A boot-method can be: 115 116 =over 4 117 118 =item B<native> 119 120 Use the tools of the native distribution to create the boot media. No other dependency. 121 122 =item B<ve> 123 124 Use the project-builder.org virtual environment notion to create the boot media. No other dependency outside of the project. 125 126 =item B<busybox> 127 128 Use the busybox tool to create the boot media. Cf: L<http://www.busybox.net> 129 130 =item B<dracut> 131 132 Use the dracut tool to create the boot media. Cf: L<http://www.dracut.net> 133 134 =back 135 86 136 =item B<-s|--script script> 87 137 88 Name of the script you want to execute on the related VEs after the installation. 89 It is executed in host environment. 90 You can use the chroot command to execute actions in the VE. 138 Name of the script you want to execute on the related boot media at the end o the build. 91 139 92 140 =item B<-a|--add pkg1[,pkg2,...]> 93 141 94 Additional packages to add from the distribution you want to install on the related VE 95 at the end of the chroot build. 142 Additional packages to add from the distribution you want to install on the related boot media 143 at the end of the build. 144 145 =item B<-m|--machine os-ver-arch> 146 147 This is the target tuple operating system-version-architecture for which you want to create the boot media. 96 148 97 149 =back … … 99 151 =head1 ARGUMENTS 100 152 153 target-dir is the directory under which the boot media will be build. 154 101 155 =over 4 102 156 103 =item B<target-dir>104 105 This is the target directory under which the VE will be created.106 Created on the fly if needed.107 If none is given use the default directory hosting VE for project-builder.org108 (Cf: vepath parameter in $HOME/.pbrc)109 110 157 =back 111 158 112 159 =head1 EXAMPLE 113 160 114 To setup a USB boot media on the /dev/sdb device for a Fedora 12 distribution with an i386 architecture issue: 115 116 pbmkbm -t usb -d /dev/sdb -m fedora-12-i386 161 To setup a USB busybox based boot media on the /dev/sdb device for a Fedora 12 distribution with an i386 architecture issue: 162 163 pbmkbm -t usb -d /dev/sdb -m fedora-12-i386 -b busybox 164 165 To setup an ISO image under /tmp for a RHEL 6 x86_64 distribution issue using the native environment: 166 167 pbmkbm -t iso -d /tmp -m rhel-6-x86_64 -b ve 117 168 118 169 =head1 WEB SITES … … 153 204 154 205 GetOptions("help|?|h" => \$opts{'h'}, 155 "man |m" => \$opts{'man'},206 "man" => \$opts{'man'}, 156 207 "verbose|v+" => \$opts{'v'}, 157 208 "quiet|q" => \$opts{'q'}, … … 160 211 "machine|m=s" => \$opts{'m'}, 161 212 "add|a=s" => \$opts{'a'}, 213 "device|d=s" => \$opts{'d'}, 214 "type|t=s" => \$opts{'t'}, 215 "boot|b=s" => \$opts{'b'}, 162 216 "version|V=s" => \$opts{'V'}, 163 217 ) || pb_syntax(-1,0); … … 184 238 # Get VE name 185 239 $ENV{'PBV'} = $opts{'m'}; 186 die pb_syntax(-1,1) if (not defined $ENV{'PBV'});187 188 die "Needs to be run as root" if ($EFFECTIVE_USER_ID != 0);189 240 190 241 # 191 242 # Initialize distribution info from pb conf file 192 243 # 193 pb_log(0,"Starting VE build for $ENV{'PBV'}\n");194 244 my $pbos = pb_distro_get_context($ENV{'PBV'}); 245 pb_log(0,"Starting boot media build for $pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}\n"); 246 247 pb_env_init_pbrc(); # to get content of HOME/.pbrc 195 248 196 249 # … … 198 251 # Create if not existent and use default if none given 199 252 # 200 pb_env_init_pbrc(); # to get content of HOME/.pbrc 201 my $vepath = shift @ARGV; 253 my $targetdir = shift @ARGV; 202 254 203 255 # … … 207 259 pb_check_requirements($req,$opt,$appname); 208 260 209 if (not defined $vepath) { 210 my ($vestdpath) = pb_conf_get("vepath"); 211 $vepath = "$vestdpath->{'default'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}" if (defined $vestdpath->{'default'}); 212 } 213 214 die pb_log(0,"No target-dir specified and no default vepath found in $ENV{'PBETC'}\n") if (not defined $vepath); 215 216 pb_mkdir_p($vepath) if (! -d $vepath); 217 218 # 261 # After that we will need root access 262 die "$appname needs to be run as root" if ($EFFECTIVE_USER_ID != 0); 263 264 # 265 # Where is our build target directory 266 # 267 268 if (not defined $targetdir) { 269 $targetdir = "/var/cache/pbmkbm"; 270 my ($vestdpath) = pb_conf_get("mkbmpath"); 271 $targetdir = "$vestdpath->{'default'}/$pbos->{'name'}/$pbos->{'version'}/$pbos->{'arch'}" if (defined $vestdpath->{'default'}); 272 } 273 274 die pb_log(0,"No target-dir specified and no default mkbmpath found in $ENV{'PBETC'}\n") if (not defined $targetdir); 275 276 # Point to the right subdir and create it if needed 277 pb_mkdir_p($targetdir) if (! -d $targetdir); 278 279 280 # Now the preparation is over, we need to do something useful :-) 281 # But it all depends on how we're asked to do it. 282 # 283 # First we need to copy into the target dir all the relevant content 284 pb_mkbm_create_content(); 285 286 # Then we need to package this content in the destination format 287 pb_mkbm_create_media(); 288 289 sub pb_mkbm_create_content { 290 291 pb_log(1,"Creating boot media content\n"); 292 if ($opts{'b'} eq "ve") { 293 # Use existing tools to create a good VE ! 294 pb_ve_launch($ENV{'PBV'}); 295 } elsif ($opts{'b'} eq "native") { 296 # Use native tools to create a good VE ! 297 } else { 298 die "Unknown method $opts{'b'} used to create the media content"; 299 } 300 } 301 302 sub pb_mkbm_create_media { 303 304 } 305 219 306 # Get the package list to download, store them in a cache directory 220 307 # 221 308 my ($mkbmcachedir) = pb_conf_get_if("mkbmcachedir"); 222 my ($pkgs,$mirror) = pb_distro_get_param($pbos,pb_conf_get("mkbmmindep","mkbmmirrorsrv")); 223 224 my $cachedir = "/var/cache/pbmkbm"; 225 $cachedir = $mkbmcachedir->{'default'} if (defined $mkbmcachedir->{'default'}); 226 227 # Point to the right subdir and create it if needed 228 $cachedir .= "/$pbos->{'name'}-$pbos->{'version'}-$pbos->{'arch'}"; 229 pb_mkdir_p($cachedir) if (! -d $cachedir); 309 my ($pkgs) = pb_distro_get_param($pbos,pb_conf_get("mkbmmindep")); 230 310 231 311 # 232 312 # /proc needed 233 313 # 234 pb_system("mount -o bind /proc $ vepath/proc","Mounting /proc");314 pb_system("mount -o bind /proc $targetdir/proc","Mounting /proc"); 235 315 236 316 # Installed additional packages we were asked to 237 317 if (defined $opts{'a'}) { 238 318 $opts{'a'} =~ s/,/ /g; 239 pb_system("chroot $ vepath/bin/bash -c \"$pbos->{'install'} $opts{'a'} \"","Adding packages to OS by running $pbos->{'install'} $opts{'a'}");319 pb_system("chroot $targetdir /bin/bash -c \"$pbos->{'install'} $opts{'a'} \"","Adding packages to OS by running $pbos->{'install'} $opts{'a'}"); 240 320 } 241 321 … … 244 324 # 245 325 pb_log(1,"Cleaning up\n"); 246 pb_system("umount $ vepath/proc","Unmounting /proc");326 pb_system("umount $targetdir/proc","Unmounting /proc"); 247 327 248 328 # Executes post-install step if asked for 249 329 if ($opts{'s'}) { 250 pb_system("$opts{'s'} $ vepath","Executing the post-install script: $opts{'s'} $vepath");251 } 330 pb_system("$opts{'s'} $targetdir","Executing the post-install script: $opts{'s'} $targetdir"); 331 }
Note:
See TracChangeset
for help on using the changeset viewer.