Hey,
        Here's a patch which takes a stab at implementing kickstart's network
command in livecd-creator.

Cheers,
Mark.


Index: livecd/creator/livecd-creator
===================================================================
--- livecd.orig/creator/livecd-creator
+++ livecd/creator/livecd-creator
@@ -20,6 +20,7 @@ import os
 import os.path
 import sys
 import errno
+import string
 import tempfile
 import time
 import traceback
@@ -460,6 +461,130 @@ class InstallationTarget:
         finally:
             self.ayum.closeRpmDB()
 
+    def writeNetworkIfCfg(self, instroot, network):
+        path = instroot + "/etc/sysconfig/network-scripts/ifcfg-" + network.device
+
+        f = file(path, "w+")
+        os.chmod(path, 0644)
+
+        f.write("DEVICE=%s\n" % network.device)
+        f.write("BOOTPROTO=%s\n" % network.bootProto)
+
+        if network.bootProto.lower() == "static":
+            if network.ip:
+                f.write("IPADDR=%s\n" % network.ip)
+            if network.netmask:
+                f.write("NETMASK=%s\n" % network.netmask)
+
+        if network.onboot:
+            f.write("ONBOOT=on\n")
+        else:
+            f.write("ONBOOT=off\n")
+
+        if network.essid:
+            f.write("ESSID=%s\n" % network.essid)
+
+        if network.ethtool:
+            if network.ethtool.find("autoneg") == -1:
+                network.ethtool = "autoneg off " + network.ethtool
+            f.write("ETHTOOL_OPTS=%s\n" % network.ethtool)
+
+        if network.bootProto.lower() == "dhcp":
+            if network.hostname:
+                f.write("DHCP_HOSTNAME=%s\n" % network.hostname)
+            if network.dhcpclass:
+                f.write("DHCP_CLASSID=%s\n" % network.dhcpclass)
+
+        if network.mtu:
+            f.write("MTU=%s\n" % network.mtu)
+
+        f.close()
+
+    def writeNetworkKey(self, instroot, network):
+        if not network.wepkey:
+            return
+
+        path = instroot + "/etc/sysconfig/network-scripts/keys-" + network.device
+        f = file(path, "w+")
+        os.chmod(path, 0600)
+        f.write("KEY=%s\n" % network.wepkey)
+        f.close()
+
+    def writeNetworkConfig(self, instroot, netwrok):
+        path = instroot + "/etc/sysconfig/network"
+        f = file(path, "w+")
+        os.chmod(path, 0644)
+
+        f.write("NETWORKING=yes\n")
+
+        if network.ipv6:
+            f.write("NETWORKING_IPV6=yes\n")
+        else:
+            f.write("NETWORKING_IPV6=no\n")
+
+        if network.hostname:
+            f.write("HOSTNAME=%s\n" % network.hostname)
+        else:
+            f.write("HOSTNAME=localhost.localdomain\n")
+
+        if network.gateway:
+            f.write("GATEWAY=%s\n" % network.gateway)
+
+        f.close()
+
+    def writeNetworkHosts(self, instroot, network):
+        localline = ""
+        if network.hostname and network.hostname != "localhost.localdomain":
+            localline += network.hostname + " "
+            l = string.split(network.hostname, ".")
+            if len(l) > 1:
+                localline += l[0] + " "
+        localline += "localhost.localdomain localhost"
+
+        path = instroot + "/etc/sysconfig/hosts"
+        f = file(path, "w+")
+        os.chmod(path, 0644)
+        f.write("127.0.0.1\t\t%s\n" % localline)
+        f.write("::1\t\tlocalhost6.localdomain6 localhost6\n")
+        f.close()
+
+    def writeNetworkResolv(self, instroot, network):
+        if network.nodns or not network.nameserver:
+            return
+
+        path = instroot + "/etc/resolv.conf"
+        f = file(path, "w+")
+        os.chmod(path, 0644)
+
+        for ns in string.split(network.nameserver, ",")[0:2]:
+            f.write("nameserver %s\n" % ns)
+
+        f.close()
+
+    def configureNetwork(self):
+        instroot = self.build_dir + "/install_root"
+
+        try:
+            os.makedirs(instroot + "/etc/sysconfig/network-scripts")
+        except OSError, (err, msg):
+            if err != errno.EEXIST:
+                raise
+
+        for network in self.ksparser.handler.network.network:
+            if not network.device:
+                raise InstallationError("No --device specified with network kickstart command")
+
+            if network.onboot and network.bootProto.lower() != "dhcp" and \
+               not (network.ip and network.netmask):
+                raise InstallationError("No IP address and/or netmask specified with static " +
+                                        "configuration for '%s'" % network.device)
+
+            self.writeNetworkIfCfg(instroot, network)
+            self.writeNetworkKey(instroot, network)
+            self.writeNetworkConfig(instroot, network)
+            self.writeNetworkHosts(instroot, network)
+            self.writeNetworkResolv(instroot, network)
+
     def configureSystem(self):
         instroot = "%s/install_root" %(self.build_dir,)
         
@@ -490,16 +615,6 @@ class InstallationTarget:
         f.write("UTC=%s\n" %(utc,))
         f.close()
 
-        # FIXME: we should handle network bits better
-        f = open("%s/etc/sysconfig/network" %(instroot,), "w+")
-        f.write("NETWORKING=yes\n")
-        f.write("HOSTNAME=localhost.localdomain\n")
-        f.close()
-        f = open("/%s/etc/hosts" %(instroot,), "w+")
-        f.write("127.0.0.1\t\tlocalhost.localdomain  localhost\n")
-        f.write("::1\t\tlocalhost6.localdomain6 localhost6\n")        
-        f.close()
-
         # do any authconfig bits
         auth = self.ksparser.handler.authconfig.authconfig or "--useshadow --enablemd5"
         if os.path.exists("%s/usr/sbin/authconfig" %(instroot,)):
@@ -694,6 +809,7 @@ label runfromram
 
         self.installPackages(self.packages, self.epackages, self.groups)
         self.configureSystem()
+        self.configureNetwork()
         self.relabelSystem()
         if not self.skip_prelink:
             self.prelinkSystem()
--
Fedora-livecd-list mailing list
Fedora-livecd-list@redhat.com
https://www.redhat.com/mailman/listinfo/fedora-livecd-list

Reply via email to