[LORAX 2/2] lorax: copy kickstarts into sysroot (#743135)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: "Brian C. Lane" <bcl@xxxxxxxxxx>

The installer no longer has access to the initrd's root. We need to
copy any needed files over to /sysroot before switching root. This
copies *.cfg and *.ks files.

It also adds the ability to add dracut hook scripts to the initramfs
from /usr/share/lorax/dracut_hooks/

This re-adds commit af6d4e2c50072eb3d76242481cb6c1bc016f6f54 which was
lost during the switch to the treebuilder branch.
---
 share/dracut_hooks/99anaconda-copy-ks.sh |    4 +++
 src/pylorax/treebuilder.py               |   41 ++++++++++++++++++++++++++++-
 2 files changed, 43 insertions(+), 2 deletions(-)
 create mode 100644 share/dracut_hooks/99anaconda-copy-ks.sh

diff --git a/share/dracut_hooks/99anaconda-copy-ks.sh b/share/dracut_hooks/99anaconda-copy-ks.sh
new file mode 100644
index 0000000..ed52088
--- /dev/null
+++ b/share/dracut_hooks/99anaconda-copy-ks.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+# Copy over kickstart files from the initrd to the sysroot before pivot
+cp /*cfg /*ks /sysroot/ 2> /dev/null
+
diff --git a/src/pylorax/treebuilder.py b/src/pylorax/treebuilder.py
index 8f4d239..12fdcf9 100644
--- a/src/pylorax/treebuilder.py
+++ b/src/pylorax/treebuilder.py
@@ -25,7 +25,7 @@ from os.path import basename, isdir
 from subprocess import check_call, check_output
 
 from sysutils import joinpaths, remove
-from shutil import copytree
+from shutil import copytree, copy2
 from base import DataHolder
 from ltmpl import LoraxTemplateRunner
 import imgutils
@@ -163,6 +163,7 @@ class TreeBuilder(object):
                                isolabel=isolabel, udev=udev_escape)
         self._runner = LoraxTemplateRunner(inroot, outroot, templatedir=templatedir)
         self._runner.defaults = self.vars
+        self.templatedir = templatedir
 
     @property
     def kernels(self):
@@ -175,6 +176,9 @@ class TreeBuilder(object):
         dracut = ["dracut", "--noprefix", "--nomdadmconf", "--nolvmconf"] + add_args
         if not backup:
             dracut.append("--force")
+        hooks = [("99anaconda-copy-ks.sh", "/lib/dracut/hooks/pre-pivot")]
+        hook_commands = self.copy_dracut_hooks(hooks)
+
         # Hush some dracut warnings. TODO: bind-mount proc in place?
         open(joinpaths(self.vars.inroot,"/proc/modules"),"w")
         for kernel in self.kernels:
@@ -183,7 +187,7 @@ class TreeBuilder(object):
                 initrd = joinpaths(self.vars.inroot, kernel.initrd.path)
                 os.rename(initrd, initrd + backup)
             check_call(["chroot", self.vars.inroot] + \
-                       dracut + [kernel.initrd.path, kernel.version])
+                       dracut + hook_commands + [kernel.initrd.path, kernel.version])
         os.unlink(joinpaths(self.vars.inroot,"/proc/modules"))
 
     def build(self):
@@ -198,6 +202,39 @@ class TreeBuilder(object):
                 iso = joinpaths(self.vars.outroot, data['boot.iso'])
                 check_call(["implantisomd5", iso])
 
+    @property
+    def dracut_hooks_path(self):
+        """ Return the path to the lorax dracut hooks scripts
+
+            Use the configured share dir if it is setup,
+            otherwise default to /usr/share/lorax/dracut_hooks
+        """
+        if self.templatedir:
+            return joinpaths(self.templatedir, "dracut_hooks")
+        else:
+            return "/usr/share/lorax/dracut_hooks"
+
+    def copy_dracut_hooks(self, hooks):
+        """ Copy the hook scripts in hooks into the installroot's /tmp/
+        and return a list of commands to pass to dracut when creating the
+        initramfs
+
+        hooks is a list of tuples with the name of the hook script and the
+        target dracut hook directory
+        (eg. [("99anaconda-copy-ks.sh", "/lib/dracut/hooks/pre-pivot")])
+        """
+        dracut_commands = []
+        for hook_script, dracut_path in hooks:
+            src = joinpaths(self.dracut_hooks_path, hook_script)
+            if not os.path.exists(src):
+                logger.error("Missing lorax dracut hook script %s" % (src))
+                continue
+            dst = joinpaths(self.vars.inroot, "/tmp/", hook_script)
+            copy2(src, dst)
+            dracut_commands += ["--include", joinpaths("/tmp/", hook_script),
+                                dracut_path]
+        return dracut_commands
+
 #### TreeBuilder helper functions
 
 def findkernels(root="/", kdir="boot"):
-- 
1.7.6.5

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux