[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [Fedora-livecd-list] [PATCH] livecd-creator : implement kickstart "network" command
- From: Mark McLoughlin <markmc redhat com>
- To: fedora-livecd-list redhat com
- Subject: Re: [Fedora-livecd-list] [PATCH] livecd-creator : implement kickstart "network" command
- Date: Fri, 13 Apr 2007 10:52:09 +0100
On Wed, 2007-04-11 at 18:29 +0100, Mark McLoughlin wrote:
> On Wed, 2007-04-11 at 13:15 -0400, Jeremy Katz wrote:
> > On Wed, 2007-04-11 at 14:41 +0100, Mark McLoughlin wrote:
> > > Here's a patch which takes a stab at implementing kickstart's network
> > > command in livecd-creator.
> >
> > This ends up changing the behavior, though, in the case that you don't
> > have a network line at all (which is pretty reasonable to do, especially
> > if you're setting up for NetworkManager). Also, if you have multiple
> > network lines and the first specifies the hostname, then it gets
> > overriden by later ones.
>
> So, what you're basically saying is that writeNetworkConfig(),
> writeNetworkHosts() and writeNetworkResolv() should not be called per
> network line, but rather at the end either with values collected from
> the network lines in aggregate, or default values where there are no
> network lines?
This should do it, I think ...
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,156 @@ 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, useipv6, hostname, gateway):
+ path = instroot + "/etc/sysconfig/network"
+ f = file(path, "w+")
+ os.chmod(path, 0644)
+
+ f.write("NETWORKING=yes\n")
+
+ if useipv6:
+ f.write("NETWORKING_IPV6=yes\n")
+ else:
+ f.write("NETWORKING_IPV6=no\n")
+
+ if hostname:
+ f.write("HOSTNAME=%s\n" % hostname)
+ else:
+ f.write("HOSTNAME=localhost.localdomain\n")
+
+ if gateway:
+ f.write("GATEWAY=%s\n" % gateway)
+
+ f.close()
+
+ def writeNetworkHosts(self, instroot, hostname):
+ localline = ""
+ if hostname and hostname != "localhost.localdomain":
+ localline += hostname + " "
+ l = string.split(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, nodns, primaryns, secondaryns):
+ if nodns or not primaryns:
+ return
+
+ path = instroot + "/etc/resolv.conf"
+ f = file(path, "w+")
+ os.chmod(path, 0644)
+
+ for ns in (primaryns, secondaryns):
+ if ns:
+ 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
+
+ useipv6 = False
+ nodns = False
+ hostname = None
+ gateway = None
+ primaryns = None
+ secondaryns = None
+
+ 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)
+
+ if network.ipv6:
+ useipv6 = True
+ if network.nodns:
+ nodns = True
+
+ if network.hostname:
+ hostname = network.hostname
+ if network.gateway:
+ gateway = network.gateway
+
+ if network.nameserver:
+ nameservers = string.split(network.nameserver, ",")
+ if len(nameservers) >= 1:
+ primaryns = nameservers[0]
+ if len(nameservers) >= 2:
+ secondayns = nameservers[0]
+
+ self.writeNetworkConfig(instroot, useipv6, hostname, gateway)
+ self.writeNetworkHosts(instroot, hostname)
+ self.writeNetworkResolv(instroot, nodns, primaryns, secondaryns)
+
def configureSystem(self):
instroot = "%s/install_root" %(self.build_dir,)
@@ -490,16 +641,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 +835,7 @@ label runfromram
self.installPackages(self.packages, self.epackages, self.groups)
self.configureSystem()
+ self.configureNetwork()
self.relabelSystem()
if not self.skip_prelink:
self.prelinkSystem()
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]