3 # Copyright (c) 2003 Intel Corporation
6 # Copyright (c) 2004-2006 The Trustees of Princeton University
11 from Exceptions import *
20 See if a node installation is valid. More checks should certainly be
21 done in the future, but for now, make sure that the sym links kernel-boot
22 and initrd-boot exist in /boot
24 Expect the following variables to be set:
25 SYSIMG_PATH the path where the system image will be mounted
26 (always starts with TEMP_PATH)
27 BOOT_CD_VERSION A tuple of the current bootcd version
28 ROOT_MOUNTED the node root file system is mounted
29 NODE_ID The db node_id for this machine
30 PLCONF_DIR The directory to store the configuration file in
32 Set the following variables upon successfully running:
33 ROOT_MOUNTED the node root file system is mounted
36 log.write( "\n\nStep: Validating node installation.\n" )
38 # make sure we have the variables we need
40 BOOT_CD_VERSION= vars["BOOT_CD_VERSION"]
41 if BOOT_CD_VERSION == "":
42 raise ValueError, "BOOT_CD_VERSION"
44 SYSIMG_PATH= vars["SYSIMG_PATH"]
46 raise ValueError, "SYSIMG_PATH"
48 NODE_ID= vars["NODE_ID"]
50 raise ValueError, "NODE_ID"
52 PLCONF_DIR= vars["PLCONF_DIR"]
54 raise ValueError, "PLCONF_DIR"
56 NODE_MODEL_OPTIONS= vars["NODE_MODEL_OPTIONS"]
58 PARTITIONS= vars["PARTITIONS"]
59 if PARTITIONS == None:
60 raise ValueError, "PARTITIONS"
63 raise BootManagerException, "Missing variable in vars: %s\n" % var
64 except ValueError, var:
65 raise BootManagerException, "Variable in vars, shouldn't be: %s\n" % var
69 if 'ROOT_MOUNTED' in vars.keys():
70 ROOT_MOUNTED= vars['ROOT_MOUNTED']
72 # mount the root system image if we haven't already.
73 # capture BootManagerExceptions during the vgscan/change and mount
74 # calls, so we can return 0 instead
76 # old cds need extra utilities to run lvm
77 if BOOT_CD_VERSION[0] == 2:
78 compatibility.setup_lvm_2x_cd( vars, log )
80 # simply creating an instance of this class and listing the system
81 # block devices will make them show up so vgscan can find the planetlab
83 systeminfo.get_block_device_list(vars, log)
86 utils.sysexec( "vgscan", log )
87 utils.sysexec( "vgchange -ay planetlab", log )
88 except BootManagerException, e:
89 log.write( "BootManagerException during vgscan/vgchange: %s\n" %
93 utils.makedirs( SYSIMG_PATH )
96 log.write( "mounting root file system\n" )
97 utils.sysexec("mount -t ext3 %s %s" % (PARTITIONS["root"],SYSIMG_PATH),log)
99 log.write( "mounting vserver partition in root file system\n" )
100 utils.sysexec("mount -t ext3 %s %s/vservers" % \
101 (PARTITIONS["vservers"], SYSIMG_PATH), log)
103 log.write( "mounting /proc\n" )
104 utils.sysexec( "mount -t proc none %s/proc" % SYSIMG_PATH, log )
105 except BootManagerException, e:
106 log.write( "BootManagerException during mount of /root, /vservers and /proc: %s\n" %
111 vars['ROOT_MOUNTED']= 1
114 # check if the base kernel is installed
116 os.stat("%s/boot/kernel-boot" % SYSIMG_PATH)
117 os.stat("%s/boot/initrd-boot" % SYSIMG_PATH)
119 log.write( "FATAL: Couldn't locate base kernel.\n")
122 # check if the model specified kernel is installed
124 if NODE_MODEL_OPTIONS & ModelOptions.SMP:
127 os.stat("%s/boot/kernel-boot%s" % (SYSIMG_PATH,option))
128 os.stat("%s/boot/initrd-boot%s" % (SYSIMG_PATH,option))
130 # smp kernel is not there; remove option from modeloptions
131 # such that the rest of the code base thinks we are just
132 # using the base kernel.
133 NODE_MODEL_OPTIONS = NODE_MODEL_OPTIONS & ~ModelOptions.SMP
134 vars["NODE_MODEL_OPTIONS"] = NODE_MODEL_OPTIONS
135 log.write( "WARNING: Couldn't locate smp kernel.\n")
137 # write out the node id to /etc/planetlab/node_id. if this fails, return
138 # 0, indicating the node isn't a valid install.
140 node_id_file_path= "%s/%s/node_id" % (SYSIMG_PATH,PLCONF_DIR)
141 node_id_file= file( node_id_file_path, "w" )
142 node_id_file.write( str(NODE_ID) )
145 log.write( "Updated /etc/planetlab/node_id\n" )
147 log.write( "Unable to write out /etc/planetlab/node_id\n" )
150 log.write( "Everything appears to be ok\n" )