import os, sys, string
import popen2
+import shutil
from Exceptions import *
import utils
Sets the following variables:
TEMP_BOOTCD_PATH where the boot cd is remounted in the temp
path
+ ROOT_MOUNTED set to 1 when the the base logical volumes
+ are mounted.
"""
log.write( "\n\nStep: Install: Bootstrapping RPM.\n" )
utils.sysexec( "mount -t ext3 %s %s/vservers" % (PARTITIONS["vservers"],
SYSIMG_PATH), log )
+ vars['ROOT_MOUNTED']= 1
+
+
# download and extract support tarball for
# this step, which has everything
# we need to successfully run
- step_support_file= "alpina-BootstrapRPM.tar.bz2"
- source_file= "%s/%s" % (SUPPORT_FILE_DIR,step_support_file)
- dest_file= "%s/%s" % (SYSIMG_PATH, step_support_file)
-
- # 30 is the connect timeout, 7200 is the max transfer time
- # in seconds (2 hours)
- log.write( "downloading %s\n" % step_support_file )
- result= bs_request.DownloadFile( source_file, None, None,
- 1, 1, dest_file,
- 30, 7200)
+ for step_support_file in [ "PlanetLab-Bootstrap.tar.bz2",
+ "alpina-BootstrapRPM.tar.bz2" ]:
+ source_file= "%s/%s" % (SUPPORT_FILE_DIR,step_support_file)
+ dest_file= "%s/%s" % (SYSIMG_PATH, step_support_file)
+
+ # 30 is the connect timeout, 7200 is the max transfer time
+ # in seconds (2 hours)
+ log.write( "downloading %s\n" % step_support_file )
+ result= bs_request.DownloadFile( source_file, None, None,
+ 1, 1, dest_file,
+ 30, 7200)
+ if result:
+ # New bootstrap tarball contains everything necessary to
+ # boot, no need to bootstrap further.
+ vars['SKIP_INSTALL_BASE']= (step_support_file == "PlanetLab-Bootstrap.tar.bz2")
+ break
+
if not result:
raise BootManagerException, "Unable to download %s from server." % \
source_file
log.write( "Copying resolv.conf to temp dir\n" )
utils.sysexec( "cp /etc/resolv.conf %s/etc/" % SYSIMG_PATH, log )
- # mount the boot cd in the temp path, under /mnt/cdrom. this way,
- # we can use the certs when programs are running
- # chrooted in the temp path
- cdrom_mount_point= "%s/mnt/cdrom" % SYSIMG_PATH
- utils.makedirs( cdrom_mount_point )
- log.write( "Copying contents of /usr/bootme to /mnt/cdrom\n" )
- utils.sysexec( "cp -r /usr/bootme %s/mnt/cdrom/" % SYSIMG_PATH, log )
+ # Copy the boot server certificate(s) and GPG public key to
+ # /usr/boot in the temp dir.
+ log.write( "Copying boot server certificates and public key\n" )
+
+ if os.path.exists("/usr/boot"):
+ utils.makedirs(SYSIMG_PATH + "/usr")
+ shutil.copytree("/usr/boot", SYSIMG_PATH + "/usr/boot")
+ elif os.path.exists("/usr/bootme"):
+ utils.makedirs(SYSIMG_PATH + "/usr/boot")
+ boot_server = file("/usr/bootme/BOOTSERVER").readline().strip()
+ shutil.copy("/usr/bootme/cacert/" + boot_server + "/cacert.pem",
+ SYSIMG_PATH + "/usr/boot/cacert.pem")
+ file(SYSIMG_PATH + "/usr/boot/boot_server", "w").write(boot_server)
+ shutil.copy("/usr/bootme/pubring.gpg", SYSIMG_PATH + "/usr/boot/pubring.gpg")
+
+ # Import the GPG key into the RPM database so that RPMS can be verified
+ utils.makedirs(SYSIMG_PATH + "/etc/pki/rpm-gpg")
+ utils.sysexec("gpg --homedir=/root --export --armor" \
+ " --no-default-keyring --keyring %s/usr/boot/pubring.gpg" \
+ " >%s/etc/pki/rpm-gpg/RPM-GPG-KEY-planetlab" % (SYSIMG_PATH, SYSIMG_PATH))
+ utils.sysexec("chroot %s rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-planetlab" % \
+ SYSIMG_PATH)
return 1