rather than code in the name of the boot server into the boot manager
[bootmanager.git] / source / steps / InitializeBootManager.py
1 import os
2 import xmlrpclib
3 import socket
4 import string
5
6 from Exceptions import *
7 import utils
8
9
10 # locations of boot os version files
11 BOOT_VERSION_2X_FILE='/usr/bootme/ID'
12 BOOT_VERSION_3X_FILE='/pl_version'
13
14 # locations of boot server name/certificate files
15 V2X_BOOTCD_SERVER_FILE = "/usr/bootme/BOOTSERVER"
16 V2X_BOOTCD_SERVER_CACERT_DIR = "/usr/bootme/cacert"
17 V2X_CACERT_NAME = "cacert.pem"
18     
19 V3X_BOOTCD_SERVER_FILE = "/usr/boot/boot_server"
20 V3X_BOOTCD_SERVER_CACERT = "/usr/boot/cacert.pem"
21
22 # minimium version of the boot os we need to run, as a (major,minor) tuple
23 MINIMUM_BOOT_VERSION= (2,0)
24
25 # minimum version of python required to run the boot manager
26 MINIMUM_PYTHON_VERSION= (2,2,0)
27
28
29 def Run( vars, log ):
30     """
31     Setup the boot manager so it can run, do any extra necessary
32     hardware setup (to fix old cd problems)
33
34     Sets the following variables:
35     BOOT_CD_VERSION           A two number tuple of the boot cd version
36     MA_BOOT_SERVER            The boot server we contacted, identified from
37                               files on the boot cd.
38     MA_BOOT_SERVER_CACERT     The SSL certificate for the above server
39
40     """
41
42     log.write( "\n\nStep: Initializing the BootManager.\n" )
43
44
45     if not __check_boot_version( vars, log ):
46         raise BootManagerException, \
47               "Boot CD version insufficient to run the Boot Manager"
48     else:
49         log.write( "Running on boot cd version: %s\n" %
50                    str(vars['BOOT_CD_VERSION']) )
51
52     BOOT_CD_VERSION= vars['BOOT_CD_VERSION']
53
54
55     log.write( "Identifying boot server and setting up /etc/planetlab entries" )
56
57     # need to pull the server name we contacted. 2.x cds will have the
58     # info in /usr/bootme; 3.x cds in /usr/boot
59     if BOOT_CD_VERSION[0] == 2:
60         try:
61             boot_server= file(V2X_BOOTCD_SERVER_FILE).read().strip()                
62         except IOError:
63             raise BootManagerException, \
64                   "It appears we are running on a v2.x boot cd, but could " \
65                   "not load contacted boot server from %s" % V2X_BOOTCD_SERVER_FILE
66         
67         if boot_server == "":
68             raise BootManagerException, \
69                   "It appears we are running on a v2.x boot cd, but %s " \
70                   "appears to be blank." % V2X_BOOTCD_SERVER_FILE
71
72         cacert_file= "%s/%s/%s" % (V2X_BOOTCD_SERVER_CACERT_DIR,
73                                    boot_server, V2X_CACERT_NAME)
74
75     elif BOOT_CD_VERSION[0] == 3:
76         try:
77             boot_server= file(V3X_BOOTCD_SERVER_FILE).read().strip()                
78         except IOError:
79             raise BootManagerException, \
80                   "It appears we are running on a v3.x boot cd, but could " \
81                   "not load contacted boot server from %s" % V3X_BOOTCD_SERVER_FILE
82         
83         if boot_server == "":
84             raise BootManagerException, \
85                   "It appears we are running on a v3.x boot cd, but %s " \
86                   "appears to be blank." % V3X_BOOTCD_SERVER_FILE
87
88         cacert_file= V3X_BOOTCD_SERVER_CACERT
89
90     else:
91         raise BootManagerException, "Unknown boot cd version."
92
93     if not os.access(cacert_file, os.R_OK):
94         raise BootManagerException, \
95               "Could not find the certificate for the " \
96               "specified boot server (at %s)" % cacert_file
97
98     # tell the log instance about the boot server so it knows
99     # where to upload the logs
100     try:
101         log.SetUploadServer( self.VARS['MA_BOOT_SERVER'] )
102     except KeyError, e:
103         log.LogEntry( "configuration does not contain boot server name." )
104         return
105
106
107     # now that we have the boot server name and the location of its certificate,
108     # write out /etc/planetlab/primary_ma with this info.
109     try:
110         primary_ma_file= file("/etc/planetlab/primary_ma","w")
111         primary_ma_file.write( "MA_NAME=\"Unknown\"\n" )
112         primary_ma_file.write( "MA_BOOT_SERVER=\"%s\"\n" % boot_server )
113         primary_ma_file.write( "MA_BOOT_SERVER_CACERT=\"%s\"\n" % cacert_file )
114         primary_ma_file.close()
115         primary_ma_file= None
116     except IOError:
117         raise BootManagerException, "Unable to write out /etc/planetlab/primary_ma"
118     
119     vars['MA_BOOT_SERVER']= boot_server
120     vars['MA_BOOT_SERVER_CACRET']= cacert_file
121
122     self.Message( "Using boot server %s with certificate" %
123                   (boot_server,cacert_file) )
124
125     
126     log.write( "Opening connection to API server\n" )
127     api_server_url= "https://%s/PLCAPI/" % vars['MA_BOOT_SERVER']
128     api_inst= xmlrpclib.Server( api_server_url, verbose=0 )
129     vars['API_SERVER_INST']= api_inst
130
131     
132     # old cds need extra modules loaded for compaq smart array
133     if BOOT_CD_VERSION[0] == 2:
134
135         has_smartarray= utils.sysexec_noerr(
136             'lspci | egrep "0e11:b178|0e11:4070|0e11:4080|0e11:4082|0e11:4083"')
137         
138         if has_smartarray:
139             log.write( "Loading support for Compaq smart array\n" )
140             utils.sysexec_noerr( "modprobe cciss", log )
141             _create_cciss_dev_entries()
142             
143
144         has_fusion= utils.sysexec_noerr('lspci | egrep "1000:0030"')
145         
146         if has_fusion:
147             log.write( "Loading support for Fusion MPT SCSI controllers\n" )
148             utils.sysexec_noerr( "modprobe mptscsih", log )
149
150     # for anything that needs to know we are running under the boot cd and
151     # not the runtime os
152     os.environ['PL_BOOTCD']= "1"
153         
154     return 1
155
156
157
158 def __check_boot_version( vars, log ):
159     """
160     identify which version of the boot os we are running on, and whether
161     or not we can run at all on the given version. later, this will be
162     used to identify extra packages to download to enable the boot manager
163     to run on any supported version.
164
165     2.x cds have the version file in /usr/bootme/ID, which looked like:
166     'PlanetLab BootCD v2.0.3'
167
168     3.x cds have the version file in /pl_version, which lookes like:
169     'PlanetLab BootCD 3.0-beta0.3'
170
171     All current known version strings that we support:
172     PlanetLab BootCD 3.0
173     PlanetLab BootCD 3.0-beta0.1
174     PlanetLab BootCD 3.0-beta0.3
175     PlanetLab BootCD v2.0
176     PlanetLab BootCD v2.0.1
177     PlanetLab BootCD v2.0.2
178     PlanetLab BootCD v2.0.3
179
180     Returns 1 if the boot os version is identified and will work
181     to run the boot manager. Two class variables are set:
182     BOOT_OS_MAJOR_VERSION
183     BOOT_OS_MINOR_VERSION
184     version strings with three parts parts to the version ignore the
185     middle number (so 2.0.3 is major 2, minor 3)
186
187     Returns 0 if the boot os is insufficient to run the boot manager
188     """
189
190     try:
191         # check for a 3.x version first
192         version_file= file(BOOT_VERSION_3X_FILE,'r')
193         full_version= string.strip(version_file.read())
194         version_file.close()
195
196         version_parts= string.split(full_version)
197         version= version_parts[-1]
198
199         version_numbers= string.split(version,".")
200         if len(version_numbers) == 2:
201             BOOT_OS_MAJOR_VERSION= int(version_numbers[0])
202             BOOT_OS_MINOR_VERSION= int(version_numbers[1])
203         else:
204             # for 3.x cds, if there are more than two parts
205             # separated by a ., its one of the beta cds.
206             # hardcode as a 3.0 cd
207             BOOT_OS_MAJOR_VERSION= 3
208             BOOT_OS_MINOR_VERSION= 0
209
210         vars['BOOT_CD_VERSION']= (BOOT_OS_MAJOR_VERSION,BOOT_OS_MINOR_VERSION)
211         
212         if (BOOT_OS_MAJOR_VERSION,BOOT_OS_MINOR_VERSION) >= \
213                MINIMUM_BOOT_VERSION:
214             return 1
215
216     except IOError, e:
217         pass
218     except IndexError, e:
219         pass
220     except TypeError, e:
221         pass
222
223
224     try:
225         # check for a 2.x version first
226         version_file= file(BOOT_VERSION_2X_FILE,'r')
227         full_version= string.strip(version_file.read())
228         version_file.close()
229
230         version_parts= string.split(full_version)
231         version= version_parts[-1]
232         if version[0] == 'v':
233             version= version[1:]
234
235         version_numbers= string.split(version,".")
236         if len(version_numbers) == 2:
237             BOOT_OS_MAJOR_VERSION= int(version_numbers[0])
238             BOOT_OS_MINOR_VERSION= int(version_numbers[1])
239         else:
240             BOOT_OS_MAJOR_VERSION= int(version_numbers[0])
241             BOOT_OS_MINOR_VERSION= int(version_numbers[2])
242
243         vars['BOOT_CD_VERSION']= (BOOT_OS_MAJOR_VERSION,BOOT_OS_MINOR_VERSION)
244
245         if (BOOT_OS_MAJOR_VERSION,BOOT_OS_MINOR_VERSION) >= \
246            MINIMUM_BOOT_VERSION:
247             return 1
248
249     except IOError, e:
250         pass
251     except IndexError, e:
252         pass
253     except TypeError, e:
254         pass
255
256
257     return 0
258
259
260
261 def _create_cciss_dev_entries():
262     utils.sysexec_noerr( "mknod /dev/cciss/c0d0 b 104 0" )
263     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p1 b 104 1" )
264     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p2 b 104 2" )
265     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p3 b 104 3" )
266     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p4 b 104 4" )
267     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p5 b 104 5" )
268     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p6 b 104 6" )
269     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p7 b 104 7" )
270     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p8 b 104 8" )
271     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p9 b 104 9" )
272     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p10 b 104 10" )
273     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p11 b 104 11" )
274     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p12 b 104 12" )
275     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p13 b 104 13" )
276     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p14 b 104 14" )
277     utils.sysexec_noerr( "mknod /dev/cciss/c0d0p15 b 104 15" )
278     utils.sysexec_noerr( "mknod /dev/cciss/c0d1 b 104 16" )
279     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p1 b 104 17" )
280     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p2 b 104 18" )
281     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p3 b 104 19" )
282     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p4 b 104 20" )
283     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p5 b 104 21" )
284     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p6 b 104 22" )
285     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p7 b 104 23" )
286     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p8 b 104 24" )
287     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p9 b 104 25" )
288     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p10 b 104 26" )
289     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p11 b 104 27" )
290     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p12 b 104 28" )
291     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p13 b 104 29" )
292     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p14 b 104 30" )
293     utils.sysexec_noerr( "mknod /dev/cciss/c0d1p15 b 104 31" )
294     utils.sysexec_noerr( "mknod /dev/cciss/c0d2 b 104 32" )
295     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p1 b 104 33" )
296     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p2 b 104 34" )
297     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p3 b 104 35" )
298     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p4 b 104 36" )
299     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p5 b 104 37" )
300     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p6 b 104 38" )
301     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p7 b 104 39" )
302     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p8 b 104 40" )
303     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p9 b 104 41" )
304     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p10 b 104 42" )
305     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p11 b 104 43" )
306     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p12 b 104 44" )
307     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p13 b 104 45" )
308     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p14 b 104 46" )
309     utils.sysexec_noerr( "mknod /dev/cciss/c0d2p15 b 104 47" )
310     utils.sysexec_noerr( "mknod /dev/cciss/c0d3 b 104 48" )
311     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p1 b 104 49" )
312     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p2 b 104 50" )
313     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p3 b 104 51" )
314     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p4 b 104 52" )
315     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p5 b 104 53" )
316     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p6 b 104 54" )
317     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p7 b 104 55" )
318     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p8 b 104 56" )
319     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p9 b 104 57" )
320     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p10 b 104 58" )
321     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p11 b 104 59" )
322     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p12 b 104 60" )
323     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p13 b 104 61" )
324     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p14 b 104 62" )
325     utils.sysexec_noerr( "mknod /dev/cciss/c0d3p15 b 104 63" )
326     utils.sysexec_noerr( "mknod /dev/cciss/c0d4 b 104 64" )
327     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p1 b 104 65" )
328     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p2 b 104 66" )
329     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p3 b 104 67" )
330     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p4 b 104 68" )
331     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p5 b 104 69" )
332     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p6 b 104 70" )
333     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p7 b 104 71" )
334     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p8 b 104 72" )
335     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p9 b 104 73" )
336     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p10 b 104 74" )
337     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p11 b 104 75" )
338     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p12 b 104 76" )
339     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p13 b 104 77" )
340     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p14 b 104 78" )
341     utils.sysexec_noerr( "mknod /dev/cciss/c0d4p15 b 104 79" )
342     utils.sysexec_noerr( "mknod /dev/cciss/c0d5 b 104 80" )
343     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p1 b 104 81" )
344     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p2 b 104 82" )
345     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p3 b 104 83" )
346     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p4 b 104 84" )
347     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p5 b 104 85" )
348     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p6 b 104 86" )
349     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p7 b 104 87" )
350     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p8 b 104 88" )
351     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p9 b 104 89" )
352     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p10 b 104 90" )
353     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p11 b 104 91" )
354     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p12 b 104 92" )
355     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p13 b 104 93" )
356     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p14 b 104 94" )
357     utils.sysexec_noerr( "mknod /dev/cciss/c0d5p15 b 104 95" )
358     utils.sysexec_noerr( "mknod /dev/cciss/c0d6 b 104 96" )
359     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p1 b 104 97" )
360     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p2 b 104 98" )
361     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p3 b 104 99" )
362     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p4 b 104 100" )
363     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p5 b 104 101" )
364     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p6 b 104 102" )
365     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p7 b 104 103" )
366     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p8 b 104 104" )
367     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p9 b 104 105" )
368     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p10 b 104 106" )
369     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p11 b 104 107" )
370     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p12 b 104 108" )
371     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p13 b 104 109" )
372     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p14 b 104 110" )
373     utils.sysexec_noerr( "mknod /dev/cciss/c0d6p15 b 104 111" )
374     utils.sysexec_noerr( "mknod /dev/cciss/c0d7 b 104 112" )
375     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p1 b 104 113" )
376     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p2 b 104 114" )
377     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p3 b 104 115" )
378     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p4 b 104 116" )
379     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p5 b 104 117" )
380     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p6 b 104 118" )
381     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p7 b 104 119" )
382     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p8 b 104 120" )
383     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p9 b 104 121" )
384     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p10 b 104 122" )
385     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p11 b 104 123" )
386     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p12 b 104 124" )
387     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p13 b 104 125" )
388     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p14 b 104 126" )
389     utils.sysexec_noerr( "mknod /dev/cciss/c0d7p15 b 104 127" )
390     utils.sysexec_noerr( "mknod /dev/cciss/c0d8 b 104 128" )
391     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p1 b 104 129" )
392     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p2 b 104 130" )
393     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p3 b 104 131" )
394     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p4 b 104 132" )
395     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p5 b 104 133" )
396     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p6 b 104 134" )
397     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p7 b 104 135" )
398     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p8 b 104 136" )
399     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p9 b 104 137" )
400     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p10 b 104 138" )
401     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p11 b 104 139" )
402     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p12 b 104 140" )
403     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p13 b 104 141" )
404     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p14 b 104 142" )
405     utils.sysexec_noerr( "mknod /dev/cciss/c0d8p15 b 104 143" )
406     utils.sysexec_noerr( "mknod /dev/cciss/c0d9 b 104 144" )
407     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p1 b 104 145" )
408     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p2 b 104 146" )
409     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p3 b 104 147" )
410     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p4 b 104 148" )
411     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p5 b 104 149" )
412     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p6 b 104 150" )
413     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p7 b 104 151" )
414     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p8 b 104 152" )
415     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p9 b 104 153" )
416     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p10 b 104 154" )
417     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p11 b 104 155" )
418     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p12 b 104 156" )
419     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p13 b 104 157" )
420     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p14 b 104 158" )
421     utils.sysexec_noerr( "mknod /dev/cciss/c0d9p15 b 104 159" )
422     utils.sysexec_noerr( "mknod /dev/cciss/c0d10 b 104 160" )
423     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p1 b 104 161" )
424     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p2 b 104 162" )
425     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p3 b 104 163" )
426     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p4 b 104 164" )
427     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p5 b 104 165" )
428     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p6 b 104 166" )
429     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p7 b 104 167" )
430     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p8 b 104 168" )
431     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p9 b 104 169" )
432     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p10 b 104 170" )
433     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p11 b 104 171" )
434     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p12 b 104 172" )
435     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p13 b 104 173" )
436     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p14 b 104 174" )
437     utils.sysexec_noerr( "mknod /dev/cciss/c0d10p15 b 104 175" )
438     utils.sysexec_noerr( "mknod /dev/cciss/c0d11 b 104 176" )
439     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p1 b 104 177" )
440     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p2 b 104 178" )
441     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p3 b 104 179" )
442     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p4 b 104 180" )
443     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p5 b 104 181" )
444     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p6 b 104 182" )
445     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p7 b 104 183" )
446     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p8 b 104 184" )
447     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p9 b 104 185" )
448     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p10 b 104 186" )
449     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p11 b 104 187" )
450     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p12 b 104 188" )
451     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p13 b 104 189" )
452     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p14 b 104 190" )
453     utils.sysexec_noerr( "mknod /dev/cciss/c0d11p15 b 104 191" )
454     utils.sysexec_noerr( "mknod /dev/cciss/c0d12 b 104 192" )
455     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p1 b 104 193" )
456     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p2 b 104 194" )
457     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p3 b 104 195" )
458     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p4 b 104 196" )
459     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p5 b 104 197" )
460     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p6 b 104 198" )
461     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p7 b 104 199" )
462     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p8 b 104 200" )
463     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p9 b 104 201" )
464     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p10 b 104 202" )
465     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p11 b 104 203" )
466     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p12 b 104 204" )
467     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p13 b 104 205" )
468     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p14 b 104 206" )
469     utils.sysexec_noerr( "mknod /dev/cciss/c0d12p15 b 104 207" )
470     utils.sysexec_noerr( "mknod /dev/cciss/c0d13 b 104 208" )
471     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p1 b 104 209" )
472     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p2 b 104 210" )
473     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p3 b 104 211" )
474     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p4 b 104 212" )
475     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p5 b 104 213" )
476     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p6 b 104 214" )
477     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p7 b 104 215" )
478     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p8 b 104 216" )
479     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p9 b 104 217" )
480     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p10 b 104 218" )
481     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p11 b 104 219" )
482     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p12 b 104 220" )
483     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p13 b 104 221" )
484     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p14 b 104 222" )
485     utils.sysexec_noerr( "mknod /dev/cciss/c0d13p15 b 104 223" )
486     utils.sysexec_noerr( "mknod /dev/cciss/c0d14 b 104 224" )
487     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p1 b 104 225" )
488     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p2 b 104 226" )
489     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p3 b 104 227" )
490     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p4 b 104 228" )
491     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p5 b 104 229" )
492     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p6 b 104 230" )
493     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p7 b 104 231" )
494     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p8 b 104 232" )
495     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p9 b 104 233" )
496     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p10 b 104 234" )
497     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p11 b 104 235" )
498     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p12 b 104 236" )
499     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p13 b 104 237" )
500     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p14 b 104 238" )
501     utils.sysexec_noerr( "mknod /dev/cciss/c0d14p15 b 104 239" )
502     utils.sysexec_noerr( "mknod /dev/cciss/c0d15 b 104 240" )
503     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p1 b 104 241" )
504     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p2 b 104 242" )
505     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p3 b 104 243" )
506     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p4 b 104 244" )
507     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p5 b 104 245" )
508     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p6 b 104 246" )
509     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p7 b 104 247" )
510     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p8 b 104 248" )
511     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p9 b 104 249" )
512     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p10 b 104 250" )
513     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p11 b 104 251" )
514     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p12 b 104 252" )
515     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p13 b 104 253" )
516     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p14 b 104 254" )
517     utils.sysexec_noerr( "mknod /dev/cciss/c0d15p15 b 104 255" )
518
519
520