summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dracut/Makefile.am3
-rwxr-xr-xdracut/module-setup.sh5
-rwxr-xr-xdracut/save-initramfs.sh27
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