Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   Ubuntu User (http://www.linux-archive.org/ubuntu-user/)
-   -   lorax: copy kickstarts into sysroot (#743135) (http://www.linux-archive.org/ubuntu-user/625211-lorax-copy-kickstarts-into-sysroot-743135-a.html)

"Brian C. Lane" 01-26-2012 05:03 AM

lorax: copy kickstarts into sysroot (#743135)
 
From: "Brian C. Lane" <bcl@redhat.com>

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@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

Will Woods 01-31-2012 04:03 PM

lorax: copy kickstarts into sysroot (#743135)
 
On Wed, 2012-01-25 at 22:03 -0800, Brian C. Lane wrote:
> From: "Brian C. Lane" <bcl@redhat.com>
>
> 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.

Oh! Sorry about that.

This patch looks fine, so feel free to push. A couple notes below just
for the record..

> 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
> +

99anaconda-copy-ks.sh will be absorbed into the upcoming "anaconda"
dracut module, so this should get dropped when that happens.

> + 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")])

I'd rather see this stuff happen in the templates somewhere, but since
dracut still gets invoked outside the templates there's really no other
way to do it.

-w

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


All times are GMT. The time now is 11:20 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.