From: "Brian C. Lane" bcl@redhat.com
This adds to my previous patchset. We decided that raid on top of lvm was something that we won't support so we can setup a static list of commands to execute. This also fixes a couple small bugs in the 20120718 cf33b37 image.
I have tested with the following kickstarts: * just partitions * LVM * RAID1 on partitions * LVM on RAID1 * BTRFS * autopart
As well as making sure a non-kickstart install still works.
Brian C. Lane (4): setup bootloader and partitioning for kickstart fix grub2 install on RAID reraise error if there is no ui rename Group and Script in kickstart.py
pyanaconda/bootloader.py | 6 +++--- pyanaconda/errors.py | 2 +- pyanaconda/kickstart.py | 19 ++++++++++++------- pyanaconda/storage/__init__.py | 4 ++++ pyanaconda/ui/gui/spokes/storage.py | 7 +++++++ 5 files changed, 27 insertions(+), 11 deletions(-)
From: "Brian C. Lane" bcl@redhat.com
after executing the kickstart commands setup the bootloader and partitions before continuing. Also add logging of any errors found by storage.sanityCheck --- pyanaconda/kickstart.py | 7 +++++-- pyanaconda/storage/__init__.py | 4 ++++ pyanaconda/ui/gui/spokes/storage.py | 7 +++++++ 3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py index 91785d7..fddb6a8 100644 --- a/pyanaconda/kickstart.py +++ b/pyanaconda/kickstart.py @@ -24,6 +24,7 @@ from storage.devices import LUKSDevice from storage.devicelibs.lvm import getPossiblePhysicalExtents from storage.devicelibs.mpath import MultipathConfigWriter, MultipathTopology from storage.formats import getFormat +from storage.partitioning import doPartitioning import storage.iscsi import storage.fcoe import storage.zfcp @@ -1543,9 +1544,11 @@ def doKickstartStorage(storage, ksdata, instClass): ksdata.clearpart.execute(storage, ksdata, instClass) ksdata.bootloader.execute(storage, ksdata, instClass) ksdata.autopart.execute(storage, ksdata, instClass) - ksdata.btrfs.execute(storage, ksdata, instClass) + ksdata.partition.execute(storage, ksdata, instClass) ksdata.raid.execute(storage, ksdata, instClass) ksdata.volgroup.execute(storage, ksdata, instClass) ksdata.logvol.execute(storage, ksdata, instClass) - ksdata.partition.execute(storage, ksdata, instClass) + ksdata.btrfs.execute(storage, ksdata, instClass) + storage.setUpBootLoader() + doPartitioning(storage)
diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py index 758a765..65a691d 100644 --- a/pyanaconda/storage/__init__.py +++ b/pyanaconda/storage/__init__.py @@ -97,6 +97,10 @@ def storageInitialize(storage, ksdata, protected): if not storage.disks: raise NoDisksError
+ # kickstart uses all the disks + if flags.automatedInstall: + ksdata.ignoredisk.onlyuse = [d.name for d in storage.disks] + # dispatch.py helper function def storageComplete(anaconda): devs = anaconda.storage.devicetree.getDevicesByType("luks/dm-crypt") diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py index 924bce2..888de2c 100644 --- a/pyanaconda/ui/gui/spokes/storage.py +++ b/pyanaconda/ui/gui/spokes/storage.py @@ -60,6 +60,9 @@ _ = lambda x: gettext.ldgettext("anaconda", x) N_ = lambda x: x P_ = lambda x, y, z: gettext.ldngettext("anaconda", x, y, z)
+import logging +log = logging.getLogger("anaconda") + __all__ = ["StorageSpoke"]
class FakeDiskLabel(object): @@ -246,6 +249,10 @@ class StorageChecker(object): (StorageChecker.errors, StorageChecker.warnings) = self.storage.sanityCheck() communication.send_ready(self._mainSpokeClass, justUpdate=True) + for e in self.errors: + log.error(e) + for w in self.warnings: + log.warn(w)
class StorageSpoke(NormalSpoke, StorageChecker): builderObjects = ["storageWindow"]
On Thu, 2012-07-19 at 18:33 -0700, Brian C. Lane wrote:
From: "Brian C. Lane" bcl@redhat.com
after executing the kickstart commands setup the bootloader and partitions before continuing. Also add logging of any errors found by storage.sanityCheck
pyanaconda/kickstart.py | 7 +++++-- pyanaconda/storage/__init__.py | 4 ++++ pyanaconda/ui/gui/spokes/storage.py | 7 +++++++ 3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py index 91785d7..fddb6a8 100644 --- a/pyanaconda/kickstart.py +++ b/pyanaconda/kickstart.py @@ -24,6 +24,7 @@ from storage.devices import LUKSDevice from storage.devicelibs.lvm import getPossiblePhysicalExtents from storage.devicelibs.mpath import MultipathConfigWriter, MultipathTopology from storage.formats import getFormat +from storage.partitioning import doPartitioning import storage.iscsi import storage.fcoe import storage.zfcp @@ -1543,9 +1544,11 @@ def doKickstartStorage(storage, ksdata, instClass): ksdata.clearpart.execute(storage, ksdata, instClass) ksdata.bootloader.execute(storage, ksdata, instClass) ksdata.autopart.execute(storage, ksdata, instClass)
- ksdata.btrfs.execute(storage, ksdata, instClass)
- ksdata.partition.execute(storage, ksdata, instClass) ksdata.raid.execute(storage, ksdata, instClass) ksdata.volgroup.execute(storage, ksdata, instClass) ksdata.logvol.execute(storage, ksdata, instClass)
- ksdata.partition.execute(storage, ksdata, instClass)
- ksdata.btrfs.execute(storage, ksdata, instClass)
- storage.setUpBootLoader()
- doPartitioning(storage)
diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py index 758a765..65a691d 100644 --- a/pyanaconda/storage/__init__.py +++ b/pyanaconda/storage/__init__.py @@ -97,6 +97,10 @@ def storageInitialize(storage, ksdata, protected): if not storage.disks: raise NoDisksError
- # kickstart uses all the disks
- if flags.automatedInstall:
ksdata.ignoredisk.onlyuse = [d.name for d in storage.disks]# dispatch.py helper function def storageComplete(anaconda): devs = anaconda.storage.devicetree.getDevicesByType("luks/dm-crypt") diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py index 924bce2..888de2c 100644 --- a/pyanaconda/ui/gui/spokes/storage.py +++ b/pyanaconda/ui/gui/spokes/storage.py @@ -60,6 +60,9 @@ _ = lambda x: gettext.ldgettext("anaconda", x) N_ = lambda x: x P_ = lambda x, y, z: gettext.ldngettext("anaconda", x, y, z)
+import logging +log = logging.getLogger("anaconda")
__all__ = ["StorageSpoke"]
class FakeDiskLabel(object): @@ -246,6 +249,10 @@ class StorageChecker(object): (StorageChecker.errors, StorageChecker.warnings) = self.storage.sanityCheck() communication.send_ready(self._mainSpokeClass, justUpdate=True)
for e in self.errors:log.error(e)for w in self.warnings:log.warn(w)
Shouldn't these iterations be over StorageChecker.errors and StorageChecker.warnings?
From: "Brian C. Lane" bcl@redhat.com
When using a kickstart only set ignoredisk.onlyuse if it was not set in the kickstart. If setting it, filter out disks from the ignoredisk list. --- pyanaconda/storage/__init__.py | 5 ++++- pyanaconda/ui/gui/spokes/storage.py | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/pyanaconda/storage/__init__.py b/pyanaconda/storage/__init__.py index 65a691d..4efd4a9 100644 --- a/pyanaconda/storage/__init__.py +++ b/pyanaconda/storage/__init__.py @@ -99,7 +99,10 @@ def storageInitialize(storage, ksdata, protected):
# kickstart uses all the disks if flags.automatedInstall: - ksdata.ignoredisk.onlyuse = [d.name for d in storage.disks] + if not ksdata.ignoredisk.onlyuse: + ksdata.ignoredisk.onlyuse = [d.name for d in storage.disks \ + if d.name not in ksdata.ignoredisk.ignoredisk] + log.debug("onlyuse is now: %s" % (",".join(ksdata.ignoredisk.onlyuse)))
# dispatch.py helper function def storageComplete(anaconda): diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py index 888de2c..964622a 100644 --- a/pyanaconda/ui/gui/spokes/storage.py +++ b/pyanaconda/ui/gui/spokes/storage.py @@ -249,9 +249,9 @@ class StorageChecker(object): (StorageChecker.errors, StorageChecker.warnings) = self.storage.sanityCheck() communication.send_ready(self._mainSpokeClass, justUpdate=True) - for e in self.errors: + for e in StorageChecker.errors: log.error(e) - for w in self.warnings: + for w in StorageChecker.warnings: log.warn(w)
class StorageSpoke(NormalSpoke, StorageChecker):
From: "Brian C. Lane" bcl@redhat.com
grub2 install was appending to the argument list while looping on the component devices this would result in a bogus commandline for the second device. --- pyanaconda/bootloader.py | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py index 991c8de..3ef03b8 100644 --- a/pyanaconda/bootloader.py +++ b/pyanaconda/bootloader.py @@ -1522,13 +1522,13 @@ class GRUB2(GRUB):
# XXX will installing to multiple drives work as expected with GRUBv2? for (stage1dev, stage2dev) in self.install_targets: - args += ["--no-floppy", stage1dev.path] + grub_args = args + ["--no-floppy", stage1dev.path] if stage1dev == stage2dev: # This is hopefully a temporary hack. GRUB2 currently refuses # to install to a partition's boot block without --force. - args.insert(0, '--force') + grub_args.insert(0, '--force')
- rc = iutil.execWithRedirect("grub2-install", args, + rc = iutil.execWithRedirect("grub2-install", grub_args, stdout="/dev/tty5", stderr="/dev/tty5", root=ROOT_PATH, env_prune=['MALLOC_PERTURB_'])
From: "Brian C. Lane" bcl@redhat.com
--- pyanaconda/errors.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/pyanaconda/errors.py b/pyanaconda/errors.py index 5d823de..37ee4d0 100644 --- a/pyanaconda/errors.py +++ b/pyanaconda/errors.py @@ -241,7 +241,7 @@ class ErrorHandler(object): rc = ERROR_RAISE
if not self.ui: - raise exn + raise
_map = {KickstartError: self._kickstartErrorHandler, StorageError.PartitioningError: self._partitionErrorHandler,
From: "Brian C. Lane" bcl@redhat.com
The import of Group from parser conflicted with the system Group class, so rename it to KSGroup. Also renamed Script to KSScript. --- pyanaconda/kickstart.py | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py index fddb6a8..88d3c80 100644 --- a/pyanaconda/kickstart.py +++ b/pyanaconda/kickstart.py @@ -50,7 +50,9 @@ from pyanaconda import ntp from pykickstart.base import KickstartCommand from pykickstart.constants import * from pykickstart.errors import formatErrorMsg, KickstartError, KickstartValueError -from pykickstart.parser import Group, KickstartParser, Script +from pykickstart.parser import KickstartParser +from pykickstart.parser import Group as KSGroup +from pykickstart.parser import Script as KSScript from pykickstart.sections import * from pykickstart.version import returnClassForVersion
@@ -71,7 +73,7 @@ packagesSeen = False # so it needs to know about them in some additional way: have the topology ready. topology = None
-class AnacondaKSScript(Script): +class AnacondaKSScript(KSScript): def run(self, chroot, serial): if self.inChroot: scriptRoot = chroot @@ -1500,15 +1502,15 @@ def selectPackages(ksdata, payload): if errorHandler.cb(e) == ERROR_RAISE: sys.exit(1)
- ksdata.packages.groupList.insert(0, Group("Core")) + ksdata.packages.groupList.insert(0, KSGroup("Core"))
if ksdata.packages.addBase: # Only add @base if it's not already in the group list. If the # %packages section contains something like "@base --optional", # addBase will take effect first and yum will think the group is # already selected. - if not Group("Base") in ksdata.packages.groupList: - ksdata.packages.groupList.insert(1, Group("Base")) + if not KSGroup("Base") in ksdata.packages.groupList: + ksdata.packages.groupList.insert(1, KSGroup("Base")) else: log.warning("not adding Base group")
On Thu, 2012-07-19 at 18:33 -0700, Brian C. Lane wrote:
From: "Brian C. Lane" bcl@redhat.com
The set looks good to me with the ignoredisk addition.
Dave
This adds to my previous patchset. We decided that raid on top of lvm was something that we won't support so we can setup a static list of commands to execute. This also fixes a couple small bugs in the 20120718 cf33b37 image.
I have tested with the following kickstarts:
- just partitions
- LVM
- RAID1 on partitions
- LVM on RAID1
- BTRFS
- autopart
As well as making sure a non-kickstart install still works.
Brian C. Lane (4): setup bootloader and partitioning for kickstart fix grub2 install on RAID reraise error if there is no ui rename Group and Script in kickstart.py
pyanaconda/bootloader.py | 6 +++--- pyanaconda/errors.py | 2 +- pyanaconda/kickstart.py | 19 ++++++++++++------- pyanaconda/storage/__init__.py | 4 ++++ pyanaconda/ui/gui/spokes/storage.py | 7 +++++++ 5 files changed, 27 insertions(+), 11 deletions(-)
On Fri, 2012-07-20 at 14:20 -0500, David Lehman wrote:
On Thu, 2012-07-19 at 18:33 -0700, Brian C. Lane wrote:
From: "Brian C. Lane" bcl@redhat.com
The set looks good to me with the ignoredisk addition.
A little late, but I'd also prefer PackageGroup instead of KSGroup in patch 4.
anaconda-patches@lists.fedorahosted.org