[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Ignore swap devices on install
- From: Joel Andres Granados <jgranado redhat com>
- To: Discussion list about Kickstart <kickstart-list redhat com>
- Subject: Ignore swap devices on install
- Date: Tue, 12 Feb 2008 10:51:59 +0100
Hi list:
It has been a problem to tell anaconda to not use some swap devices at install time. I have created a solution (if you can call it that) that adds a argument for kickstart in RHEL5. It basically tells anaconda : "Do not touch this list of swap devices". And anaconda does not use them at install time and does not add them to /etc/fstab at the end of installation.
The solution involves code for anaconda and for pykickstart.
Patch is attached. comments greatly appreciated.
--
Joel Andres Granados
Red Hat / Brno, Czech Republic
diff --git a/fsset.py b/fsset.py
index 903811e..c63ffdf 100644
--- a/fsset.py
+++ b/fsset.py
@@ -1286,7 +1286,7 @@ class FileSystemSet:
format = "%-23s %-23s %-7s %-15s %d %d\n"
fstab = ""
for entry in self.entries:
- if entry.mountpoint:
+ if entry.mountpoint and entry.device.getDevice() not in partedUtils.DiskSet.skippedSwapDevs:
# use LABEL if the device has a label except for multipath
# devices. always use devname on mpath devices
if entry.getLabel() and \
@@ -1305,7 +1305,7 @@ class FileSystemSet:
format = "%s %s %s %s 0 0\n"
mtab = ""
for entry in self.entries:
- if not entry.isMounted():
+ if not entry.isMounted() and entry.device.getDevice() not in partedUtils.DiskSet.skippedSwapDevs:
continue
if entry.mountpoint:
# swap doesn't end up in the mtab
@@ -1617,7 +1617,7 @@ MAILADDR root
for entry in self.entries:
if (entry.fsystem and entry.fsystem.getName() == "swap"
- and not entry.isMounted()):
+ and not entry.isMounted() and entry.device.getDevice() not in partedUtils.DiskSet.skippedSwapDevs):
try:
entry.mount(chroot)
self.mountcount = self.mountcount + 1
diff --git a/installclass.py b/installclass.py
index 1c132c5..0636656 100644
--- a/installclass.py
+++ b/installclass.py
@@ -456,6 +456,12 @@ class BaseInstallClass:
#id.setPackageSelection()
#id.setGroupSelection()
+ def setIgnoreSwapDevs(self, id, devs):
+ diskset = id.diskset
+ for dev in devs:
+ if not dev in diskset.skippedSwapDevs:
+ diskset.skippedSwapDevs.append(dev)
+
def __init__(self, expert):
pass
diff --git a/kickstart.py b/kickstart.py
index 3c18853..2bc7a40 100644
--- a/kickstart.py
+++ b/kickstart.py
@@ -630,6 +630,11 @@ class AnacondaKSHandlers(KickstartHandlers):
isys.flushDriveDict()
+ def doIgnoreSwapDevs(self, args):
+ KickstartHandlers.doIgnoreSwapDevs(self, args)
+ self.id.instClass.setIgnoreSwapDevs(self.id, self.ksdata.ignoreswapdevs["devs"])
+
+
class VNCHandlers(KickstartHandlers):
# We're only interested in the handler for the VNC command.
def __init__ (self, ksdata):
diff --git a/partedUtils.py b/partedUtils.py
index 51fc9bd..197448f 100644
--- a/partedUtils.py
+++ b/partedUtils.py
@@ -583,6 +583,7 @@ class DiskSet:
"""The disks in the system."""
skippedDisks = []
+ skippedSwapDevs = []
mdList = []
dmList = None
mpList = None
diff -ur pykickstart-0.43/pykickstart/data.py pykickstart-0.43-new/pykickstart/data.py
--- pykickstart-0.43/pykickstart/data.py 2006-10-16 22:25:00.000000000 +0200
+++ pykickstart-0.43-new/pykickstart/data.py 2008-02-11 21:31:35.000000000 +0100
@@ -54,6 +54,7 @@
self.timezone = {"isUtc": False, "timezone": ""}
self.upgrade = False
self.vnc = {"enabled": False, "password": "", "host": "", "port": ""}
+ self.ignoreswapdevs = {}
self.xconfig = {"driver": "", "defaultdesktop": "", "depth": 0,
"resolution": "", "startX": False, "videoRam": ""}
self.zerombr = False
diff -ur pykickstart-0.43/pykickstart/parser.py pykickstart-0.43-new/pykickstart/parser.py
--- pykickstart-0.43/pykickstart/parser.py 2006-12-01 16:52:18.000000000 +0100
+++ pykickstart-0.43-new/pykickstart/parser.py 2008-02-11 21:45:39.000000000 +0100
@@ -275,6 +275,7 @@
"user" : self.doUser,
"upgrade" : self.doUpgrade,
"vnc" : self.doVnc,
+ "ignoreswapdevs": self.doIgnoreSwapDevs,
"volgroup" : self.doVolumeGroup,
"xconfig" : self.doXConfig,
"zerombr" : self.doZeroMbr,
@@ -893,6 +894,17 @@
(opts, extra) = op.parse_args(args=args)
self._setToDict(op, opts, self.ksdata.vnc)
+ def doIgnoreSwapDevs(self, args):
+ def dev_cb(option, opt_str, value, parser):
+ for d in value.split(','):
+ parser.values.ensure_value(option.dest, []).append(d)
+ op = KSOptionParser(lineno=self.lineno)
+ op.add_option("--devs", dest="devs", action="callback", callback=dev_cb, nargs=1, type="string")
+
+ (opts, extra) = op.parse_args(args=args)
+ self._setToDict(op, opts, self.ksdata.ignoreswapdevs)
+
+
def doVolumeGroup(self, args):
# Have to be a little more complicated to set two values.
def vg_cb (option, opt_str, value, parser):
diff -ur pykickstart-0.43/pykickstart/writer.py pykickstart-0.43-new/pykickstart/writer.py
--- pykickstart-0.43/pykickstart/writer.py 2006-12-04 17:05:11.000000000 +0100
+++ pykickstart-0.43-new/pykickstart/writer.py 2008-02-11 19:41:43.000000000 +0100
@@ -559,6 +559,13 @@
return retval.rstrip()
+ def doIgnoreSwapDevs(self):
+ import pdb
+ pdb.set_trace()
+ if self.ksdata.ignoreswapdevs:
+ return
+ return " ignoreswapspace --devs=%s\n" % string.join(self.ksdata.ignoreswapdevs, ",")
+
def doVnc(self):
if self.ksdata.vnc["enabled"]:
if self.ksdata.vnc["password"] != "":
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]