This commit was manufactured by cvs2svn to create branch
authorPlanet-Lab Support <support@planet-lab.org>
Thu, 10 Aug 2006 19:05:21 +0000 (19:05 +0000)
committerPlanet-Lab Support <support@planet-lab.org>
Thu, 10 Aug 2006 19:05:21 +0000 (19:05 +0000)
'myplc-0_4-branch'.

source/COPYRIGHT [new file with mode: 0644]
source/steps/WriteModprobeConfig.py [new file with mode: 0644]
source/steps/WriteNetworkConfig.py [new file with mode: 0644]

diff --git a/source/COPYRIGHT b/source/COPYRIGHT
new file mode 100644 (file)
index 0000000..6bf1167
--- /dev/null
@@ -0,0 +1,55 @@
+The BootManager source code was initially developed by Intel
+Corporation and subsequently rewritten by Princeton University.  The
+copyright for the BootManager source code is as follows:
+
+Copyright (c) 2003 Intel Corporation
+All rights reserved.
+
+Copyright (c) 2004-2006 The Trustees of Princeton University
+All rights reserved.
+
+The License from both Intel and Princeton for this software is
+follows:
+
+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 copyright holder 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 PRINCETON
+UNIVERSITY 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. 
+
+Intel Corporation places the following export restrictions on the
+software:
+
+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.
+
diff --git a/source/steps/WriteModprobeConfig.py b/source/steps/WriteModprobeConfig.py
new file mode 100644 (file)
index 0000000..a50fcc4
--- /dev/null
@@ -0,0 +1,100 @@
+#!/usr/bin/python2 -u
+
+# Copyright (c) 2003 Intel Corporation
+# All rights reserved.
+#
+# Copyright (c) 2004-2006 The Trustees of Princeton University
+# All rights reserved.
+
+import os, string
+
+from Exceptions import *
+import utils
+import systeminfo
+import BootAPI
+import ModelOptions
+
+def Run( vars, log, filename = "/etc/modprobe.conf"):
+    """
+    write out the system file /etc/modprobe.conf with the current
+    set of modules.
+
+    returns a tuple of the number of network driver lines and storage
+    driver lines written as (networkcount,storagecount)
+    """
+
+    # write out the modprobe.conf file for the system. make sure
+    # the order of the ethernet devices are listed in the same order
+    # as the boot cd loaded the modules. this is found in /tmp/loadedmodules
+    # ultimately, the order will only match the boot cd order if
+    # the kernel modules have the same name - which should be true for the later
+    # version boot cds because they use the same kernel version.
+    # older boot cds use a 2.4.19 kernel, and its possible some of the network
+    # module names have changed, in which case the system might not boot
+    # if the network modules are activated in a different order that the
+    # boot cd.
+
+    # make sure we have this class loaded
+    
+    try:
+        SYSIMG_PATH= vars["SYSIMG_PATH"]
+        if SYSIMG_PATH == "":
+            raise ValueError, "SYSIMG_PATH"
+
+    except KeyError, var:
+        raise BootManagerException, "Missing variable in vars: %s\n" % var
+    except ValueError, var:
+        raise BootManagerException, "Variable in vars, shouldn't be: %s\n" % var
+
+    sysmods= systeminfo.get_system_modules(vars, log)
+    if sysmods is None:
+        raise BootManagerException, "Unable to get list of system modules."
+        
+    eth_count= 0
+    scsi_count= 0
+
+    modulesconf_file= file("%s/%s" % (SYSIMG_PATH,filename), "w" )
+
+    for type in sysmods:
+        if type == systeminfo.MODULE_CLASS_SCSI:
+            for a_mod in sysmods[type]:
+                if scsi_count == 0:
+                    modulesconf_file.write( "alias scsi_hostadapter %s\n" %
+                                            a_mod )
+                else:
+                    modulesconf_file.write( "alias scsi_hostadapter%d %s\n" %
+                                            (scsi_count,a_mod) )
+                scsi_count= scsi_count + 1
+
+        elif type == systeminfo.MODULE_CLASS_NETWORK:
+            for a_mod in sysmods[type]:
+                modulesconf_file.write( "alias eth%d %s\n" %
+                                        (eth_count,a_mod) )
+                eth_count= eth_count + 1
+
+    modulesconf_file.close()
+    modulesconf_file= None
+
+    # dump the modprobe.conf file to the log (not to screen)
+    log.write( "Contents of new modprobe.conf file:\n" )
+    modulesconf_file= file("%s/%s" % (SYSIMG_PATH,filename), "r" )
+    contents= modulesconf_file.read()
+    log.write( contents + "\n" )
+    modulesconf_file.close()
+    modulesconf_file= None
+    log.write( "End contents of new modprobe.conf file.\n" )
+
+    # before we do the real kexec, check to see if we had any
+    # network drivers written to modprobe.conf. if not, return -1,
+    # which will cause this node to be switched to a debug state.
+    if eth_count == 0:
+        log.write( "\nIt appears we don't have any network drivers. Aborting.\n" )
+        
+        vars['BOOT_STATE']= 'dbg'
+        vars['STATE_CHANGE_NOTIFY']= 1
+        vars['STATE_CHANGE_NOTIFY_MESSAGE']= \
+             notify_messages.MSG_NO_DETECTED_NETWORK
+        raise BootManagerException, \
+              notify_messages.MSG_NO_DETECTED_NETWORK
+
+
diff --git a/source/steps/WriteNetworkConfig.py b/source/steps/WriteNetworkConfig.py
new file mode 100644 (file)
index 0000000..2e6867d
--- /dev/null
@@ -0,0 +1,141 @@
+#!/usr/bin/python2
+
+# Copyright (c) 2003 Intel Corporation
+# All rights reserved.
+#
+# Copyright (c) 2004-2006 The Trustees of Princeton University
+# All rights reserved.
+# expected /proc/partitions format
+
+import os, string
+
+from Exceptions import *
+import utils
+import BootAPI
+import ModelOptions
+
+def Run( vars, log ):
+    """
+    Write out the network configuration for this machine:
+    /etc/hosts
+    /etc/sysconfig/network-scripts/ifcfg-eth0
+    /etc/resolv.conf (if applicable)
+    /etc/sysconfig/network
+
+    It is assumed the caller mounted the root partition and the vserver partition
+    starting on SYSIMG_PATH - it is not checked here.
+
+    The values to be used for the network settings are to be set in vars
+    in the variable 'NETWORK_SETTINGS', which is a dictionary
+    with keys:
+
+     Key               Used by this function
+     -----------------------------------------------
+     node_id
+     node_key
+     method            x
+     ip                x
+     mac               x (optional)
+     gateway           x
+     network           x
+     broadcast         x
+     netmask           x
+     dns1              x
+     dns2              x (optional)
+     hostname          x
+     domainname        x
+
+    Expect the following variables from the store:
+    SYSIMG_PATH             the path where the system image will be mounted
+                            (always starts with TEMP_PATH)
+    NETWORK_SETTINGS  A dictionary of the values from the network
+                                configuration file
+    Sets the following variables:
+    None
+    """
+
+    log.write( "\n\nStep: Install: Writing Network Configuration files.\n" )
+
+    try:
+        SYSIMG_PATH= vars["SYSIMG_PATH"]
+        if SYSIMG_PATH == "":
+            raise ValueError, "SYSIMG_PATH"
+
+    except KeyError, var:
+        raise BootManagerException, "Missing variable in vars: %s\n" % var
+    except ValueError, var:
+        raise BootManagerException, "Variable in vars, shouldn't be: %s\n" % var
+
+
+    try:
+        network_settings= vars['NETWORK_SETTINGS']
+    except KeyError, e:
+        raise BootManagerException, "No network settings found in vars."
+
+    try:
+        hostname= network_settings['hostname']
+        domainname= network_settings['domainname']
+        method= network_settings['method']
+        ip= network_settings['ip']
+        gateway= network_settings['gateway']
+        network= network_settings['network']
+        netmask= network_settings['netmask']
+        dns1= network_settings['dns1']
+        mac= network_settings['mac']
+    except KeyError, e:
+        raise BootManagerException, "Missing value %s in network settings." % str(e)
+
+    try:
+        dns2= ''
+        dns2= network_settings['dns2']
+    except KeyError, e:
+        pass
+
+        
+    log.write( "Writing /etc/hosts\n" )
+    hosts_file= file("%s/etc/hosts" % SYSIMG_PATH, "w" )    
+    hosts_file.write( "127.0.0.1       localhost\n" )
+    if method == "static":
+        hosts_file.write( "%s %s.%s\n" % (ip, hostname, domainname) )
+    hosts_file.close()
+    hosts_file= None
+    
+
+    log.write( "Writing /etc/sysconfig/network-scripts/ifcfg-eth0\n" )
+    eth0_file= file("%s/etc/sysconfig/network-scripts/ifcfg-eth0" %
+                    SYSIMG_PATH, "w" )
+    eth0_file.write( "DEVICE=eth0\n" )
+    if method == "static":
+        eth0_file.write( "BOOTPROTO=static\n" )
+        eth0_file.write( "IPADDR=%s\n" % ip )
+        eth0_file.write( "NETMASK=%s\n" % netmask )
+        eth0_file.write( "GATEWAY=%s\n" % gateway )
+    else:
+        eth0_file.write( "BOOTPROTO=dhcp\n" )
+        eth0_file.write( "DHCP_HOSTNAME=%s\n" % hostname )
+    if mac != "":
+        eth0_file.write( "HWADDR=%s\n" % mac )
+    eth0_file.write( "ONBOOT=yes\n" )
+    eth0_file.write( "USERCTL=no\n" )
+    eth0_file.close()
+    eth0_file= None
+
+    if method == "static":
+        log.write( "Writing /etc/resolv.conf\n" )
+        resolv_file= file("%s/etc/resolv.conf" % SYSIMG_PATH, "w" )
+        if dns1 != "":
+            resolv_file.write( "nameserver %s\n" % dns1 )
+        if dns2 != "":
+            resolv_file.write( "nameserver %s\n" % dns2 )
+        resolv_file.write( "search %s\n" % domainname )
+        resolv_file.close()
+        resolv_file= None
+
+    log.write( "Writing /etc/sysconfig/network\n" )
+    network_file= file("%s/etc/sysconfig/network" % SYSIMG_PATH, "w" )
+    network_file.write( "NETWORKING=yes\n" )
+    network_file.write( "HOSTNAME=%s.%s\n" % (hostname, domainname) )
+    if method == "static":
+        network_file.write( "GATEWAY=%s\n" % gateway )
+    network_file.close()
+    network_file= None