diff options
-rw-r--r-- | dracut/Makefile.am | 3 | ||||
-rwxr-xr-x | dracut/module-setup.sh | 5 | ||||
-rwxr-xr-x | dracut/save-initramfs.sh | 27 |
3 files changed, 32 insertions, 3 deletions
diff --git a/dracut/Makefile.am b/dracut/Makefile.am index cb38e759c..7646e2377 100644 --- a/dracut/Makefile.am +++ b/dracut/Makefile.am @@ -38,7 +38,8 @@ dist_dracut_SCRIPTS = module-setup.sh \ fetch-kickstart-disk \ fetch-updates-disk \ parse-kickstart \ - anaconda-modprobe.sh + anaconda-modprobe.sh \ + save-initramfs.sh MAINTAINERCLEANFILES = Makefile.in diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh index be2bd7103..cdf3e4f03 100755 --- a/dracut/module-setup.sh +++ b/dracut/module-setup.sh @@ -29,8 +29,9 @@ install() { inst_hook initqueue/settled 00 "$moddir/anaconda-ks-sendheaders.sh" inst_hook initqueue/online 80 "$moddir/anaconda-netroot.sh" inst "$moddir/anaconda-diskroot" "/sbin/anaconda-diskroot" - inst_hook pre-pivot 99 "$moddir/anaconda-copy-ks.sh" - inst_hook pre-pivot 99 "$moddir/anaconda-copy-cmdline.sh" + inst_hook pre-pivot 50 "$moddir/anaconda-copy-ks.sh" + inst_hook pre-pivot 50 "$moddir/anaconda-copy-cmdline.sh" + inst_hook pre-pivot 99 "$moddir/save-initramfs.sh" # kickstart parsing, WOOOO inst_hook initqueue/online 10 "$moddir/fetch-kickstart-net.sh" inst "$moddir/fetch-kickstart-disk" "/sbin/fetch-kickstart-disk" diff --git a/dracut/save-initramfs.sh b/dracut/save-initramfs.sh new file mode 100755 index 000000000..4ebbdfe70 --- /dev/null +++ b/dracut/save-initramfs.sh @@ -0,0 +1,27 @@ +#!/bin/sh +# save-initramfs - save a copy of initramfs for shutdown/eject, if needed + +command -v config_get >/dev/null || . /lib/anaconda-lib.sh +initramfs="" + +# First, check to see if we can find a copy of initramfs laying around +for i in images/pxeboot/initrd.img ppc/ppc64/initrd.img images/initrd.img; do + [ -f $repodir/$i ] && initramfs=$repodir/$i && break +done + + +# If we didn't find an initramfs image, save a copy of it +if [ -z "$initramfs" ]; then + initramfs=/run/initramfs/initramfs-saved.cpio.gz + gzip=$(type -P pigz || type -P gzip) + # Prune out things we don't need - modules & firmware, python, overlay file + find / -xdev | \ + grep -Ev 'lib/modules|lib/firmware|python|overlay|etc/ssl|fsck' | \ + cpio -co 2>/dev/null | $gzip -c1 > $initramfs +fi + + +# Make sure dracut-shutdown.service can find the initramfs later. +mkdir -p $NEWROOT/boot +ln -s $initramfs $NEWROOT/boot/initramfs-$(uname -r).img +# NOTE: $repodir must also be somewhere under /run for this to work correctly |