]>
git.ipfire.org Git - thirdparty/dracut.git/blob - dracut-initramfs-restore.sh
5 # do some sanity checks first
6 [ -e /run
/initramfs
/bin
/sh
] && exit 0
7 [ -e /run
/initramfs
/.need_shutdown
] ||
exit 0
9 # SIGTERM signal is received upon forced shutdown: ignore the signal
10 # We want to remain alive to be able to trap unpacking errors to avoid
11 # switching root to an incompletely unpacked initramfs
12 trap 'echo "Received SIGTERM signal, ignoring!" >&2' TERM
14 KERNEL_VERSION
="$(uname -r)"
16 [[ $dracutbasedir ]] || dracutbasedir
=/usr
/lib
/dracut
17 SKIP
="$dracutbasedir/skipcpio"
18 [[ -x $SKIP ]] || SKIP
="cat"
20 if [[ -d /efi
/Default
]] ||
[[ -d /boot
/Default
]] ||
[[ -d /boot
/efi
/Default
]]; then
22 elif [[ -f /etc
/machine-id
]]; then
23 read -r MACHINE_ID
< /etc
/machine-id
28 mount
-o ro
/boot
&> /dev
/null || true
30 if [[ -d /efi
/loader
/entries
]] ||
[[ -L /efi
/loader
/entries
]] \
31 ||
[[ -d /efi
/$MACHINE_ID ]] ||
[[ -L /efi
/$MACHINE_ID ]]; then
32 IMG
="/efi/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
33 elif [[ -d /boot
/loader
/entries
]] ||
[[ -L /boot
/loader
/entries
]] \
34 ||
[[ -d /boot
/$MACHINE_ID ]] ||
[[ -L /boot
/$MACHINE_ID ]]; then
35 IMG
="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
36 elif [[ -d /boot
/efi
/loader
/entries
]] ||
[[ -L /boot
/efi
/loader
/entries
]] \
37 ||
[[ -d /boot
/efi
/$MACHINE_ID ]] ||
[[ -L /boot
/efi
/$MACHINE_ID ]]; then
38 IMG
="/boot/efi/$MACHINE_ID/$KERNEL_VERSION/initrd"
39 elif [[ -f /lib
/modules
/${KERNEL_VERSION}/initrd
]]; then
40 IMG
="/lib/modules/${KERNEL_VERSION}/initrd"
41 elif [[ -f /boot
/initramfs-
${KERNEL_VERSION}.img
]]; then
42 IMG
="/boot/initramfs-${KERNEL_VERSION}.img"
43 elif mountpoint
-q /efi
; then
44 IMG
="/efi/$MACHINE_ID/$KERNEL_VERSION/initrd"
45 elif mountpoint
-q /boot
/efi
; then
46 IMG
="/boot/efi/$MACHINE_ID/$KERNEL_VERSION/initrd"
48 echo "No initramfs image found to restore!"
54 if (command -v zcat
> /dev
/null
&& $SKIP "$IMG" 2> /dev
/null | zcat
2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1) \
55 ||
(command -v bzcat
> /dev
/null
&& $SKIP "$IMG" 2> /dev
/null | bzcat
2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1) \
56 ||
(command -v xzcat
> /dev
/null
&& $SKIP "$IMG" 2> /dev
/null | xzcat
2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1) \
57 ||
(command -v lz4
> /dev
/null
&& $SKIP "$IMG" 2> /dev
/null | lz4
-d -c 2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1) \
58 ||
(command -v lzop
> /dev
/null
&& $SKIP "$IMG" 2> /dev
/null | lzop
-d -c 2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1) \
59 ||
(command -v zstd
> /dev
/null
&& $SKIP "$IMG" 2> /dev
/null | zstd
-d -c 2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1) \
60 ||
($SKIP "$IMG" 2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1); then
61 rm -f -- .need_shutdown
63 # something failed, so we clean up
64 echo "Unpacking of $IMG to /run/initramfs failed" >&2
65 rm -f -- /run
/initramfs
/shutdown
69 if [[ -d squash
]]; then
70 if ! unsquashfs
-no-xattrs -f -d . squash-root.img
> /dev
/null
; then
71 echo "Squash module is enabled for this initramfs but failed to unpack squash-root.img" >&2
72 rm -f -- /run
/initramfs
/shutdown
77 if [ -e /etc
/selinux
/config
-a -x /usr
/sbin
/setfiles
]; then
79 [ -n "${SELINUXTYPE}" ] && /usr
/sbin
/setfiles
-v -r /run
/initramfs
/etc
/selinux
/"${SELINUXTYPE}"/contexts
/files
/file_contexts
/run
/initramfs
> /dev
/null