X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=source%2Fsteps%2FInstallBootstrapRPM.py;h=5937f4ddcf4d4abf5e6533122a40b1a2ec473b0a;hb=ae73c450bffe036dccf37e8d96a4b655c3cd900e;hp=86d935d8b61937c7818b114650f7e719243bf9a9;hpb=2151b25b18627ee01c6290d8440f8bcf662c286b;p=bootmanager.git diff --git a/source/steps/InstallBootstrapRPM.py b/source/steps/InstallBootstrapRPM.py index 86d935d..5937f4d 100644 --- a/source/steps/InstallBootstrapRPM.py +++ b/source/steps/InstallBootstrapRPM.py @@ -1,48 +1,15 @@ +#!/usr/bin/python2 + # Copyright (c) 2003 Intel Corporation # All rights reserved. - -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: - -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. - -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. - -# * Neither the name of the Intel Corporation nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. - -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF -# YOUR JURISDICTION. It is licensee's responsibility to comply with any -# export regulations applicable in licensee's jurisdiction. Under -# CURRENT (May 2000) U.S. export regulations this software is eligible -# for export from the U.S. and can be downloaded by or otherwise -# exported or reexported worldwide EXCEPT to U.S. embargoed destinations -# which include Cuba, Iraq, Libya, North Korea, Iran, Syria, Sudan, -# Afghanistan and any other country to which the U.S. has embargoed -# goods and services. - - +# +# Copyright (c) 2004-2006 The Trustees of Princeton University +# All rights reserved. +# expected /proc/partitions format import os, sys, string import popen2 +import shutil from Exceptions import * import utils @@ -126,16 +93,23 @@ def Run( vars, log ): # 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 @@ -144,68 +118,37 @@ def Run( vars, log ): result= utils.sysexec( "tar -C %s -xpjf %s" % (SYSIMG_PATH,dest_file), log ) utils.removefile( dest_file ) - # get the yum configuration file for this node (yum.conf). - # this needs to come from the configuration file service, - # so, if its a beta node, it'll install the beta rpms from - # the beginning. The configuration file service will return - # the url for the file we need to request to get the actual - # conf file, so two requests need to be made. - - # the only changes we will need to make to it are to change - # the cache and log directories, so when we run yum from - # the chrooted tempfs mount, it'll cache the rpms on the - # sysimg partition - - log.write( "Fetching URL for yum.conf from configuration file service\n" ) - - postVars= {"node_id" : NODE_ID, - "file" : "/etc/yum.conf"} - - yum_conf_url_file= "/tmp/yumconf.url" - - result= bs_request.DownloadFile( - "/db/plnodeconf/getsinglefile.php", - None, postVars, 1, 1, yum_conf_url_file) - - if result == 0: - log.write( "Unable to make request to get url for yum.conf\n" ) - return 0 - - try: - yum_conf_url= file(yum_conf_url_file,"r").read() - yum_conf_url= string.strip(yum_conf_url) - if yum_conf_url == "": - raise BootManagerException, \ - "Downloaded yum configuration file URL is empty." - except IOError: - raise BootManagerException, \ - "Unable to open downloaded yum configuration file URL." - - # now, get the actual contents of yum.conf for this node - log.write( "Fetching yum.conf contents from configuration file service\n" ) - - postVars= {} - download_file_loc= "%s/etc/yum.conf" % SYSIMG_PATH - - result= bs_request.DownloadFile( yum_conf_url, - None, postVars, 1, 1, - download_file_loc) - - if result == 0: - log.write( "Unable to make request to get yum.conf\n" ) - return 0 - # copy resolv.conf from the base system into our temp dir # so DNS lookups work correctly while we are chrooted 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") + + # For backward compatibility + if os.path.exists("/usr/bootme"): + utils.makedirs(SYSIMG_PATH + "/mnt/cdrom") + shutil.copytree("/usr/bootme", SYSIMG_PATH + "/mnt/cdrom/bootme") + + # 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