]>
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 [[ -s /etc
/machine-id
]]; then
23 read -r MACHINE_ID
< /etc
/machine-id
24 [[ $MACHINE_ID == "uninitialized" ]] && MACHINE_ID
="Default"
29 mount
-o ro
/boot
&> /dev
/null || true
31 if [[ -d /efi
/loader
/entries ||
-L /efi
/loader
/entries
]] \
32 && [[ -d /efi
/$MACHINE_ID ||
-L /efi
/$MACHINE_ID ]]; then
33 IMG
="/efi/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
34 elif [[ -d /boot
/loader
/entries ||
-L /boot
/loader
/entries
]] \
35 && [[ -d /boot
/$MACHINE_ID ||
-L /boot
/$MACHINE_ID ]]; then
36 IMG
="/boot/${MACHINE_ID}/${KERNEL_VERSION}/initrd"
37 elif [[ -d /boot
/efi
/loader
/entries ||
-L /boot
/efi
/loader
/entries
]] \
38 && [[ -d /boot
/efi
/$MACHINE_ID ||
-L /boot
/efi
/$MACHINE_ID ]]; then
39 IMG
="/boot/efi/$MACHINE_ID/$KERNEL_VERSION/initrd"
40 elif [[ -f /lib
/modules
/${KERNEL_VERSION}/initrd
]]; then
41 IMG
="/lib/modules/${KERNEL_VERSION}/initrd"
42 elif [[ -f /boot
/initramfs-
${KERNEL_VERSION}.img
]]; then
43 IMG
="/boot/initramfs-${KERNEL_VERSION}.img"
44 elif mountpoint
-q /efi
; then
45 IMG
="/efi/$MACHINE_ID/$KERNEL_VERSION/initrd"
46 elif mountpoint
-q /boot
/efi
; then
47 IMG
="/boot/efi/$MACHINE_ID/$KERNEL_VERSION/initrd"
49 echo "No initramfs image found to restore!"
55 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) \
56 ||
(command -v bzcat
> /dev
/null
&& $SKIP "$IMG" 2> /dev
/null | bzcat
2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1) \
57 ||
(command -v xzcat
> /dev
/null
&& $SKIP "$IMG" 2> /dev
/null | xzcat
2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1) \
58 ||
(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) \
59 ||
(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) \
60 ||
(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) \
61 ||
($SKIP "$IMG" 2> /dev
/null |
cpio -id --no-absolute-filenames --quiet > /dev
/null
2>&1); then
62 rm -f -- .need_shutdown
64 # something failed, so we clean up
65 echo "Unpacking of $IMG to /run/initramfs failed" >&2
66 rm -f -- /run
/initramfs
/shutdown
70 if [[ -d squash
]]; then
71 if ! unsquashfs
-no-xattrs -f -d . squash-root.img
> /dev
/null
; then
72 echo "Squash module is enabled for this initramfs but failed to unpack squash-root.img" >&2
73 rm -f -- /run
/initramfs
/shutdown
78 if grep -q -w selinux
/sys
/kernel
/security
/lsm
2> /dev
/null \
79 && [ -e /etc
/selinux
/config
-a -x /usr
/sbin
/setfiles
]; then
81 if [[ $SELINUX != "disabled" && -n $SELINUXTYPE ]]; then
82 /usr
/sbin
/setfiles
-v -r /run
/initramfs
/etc
/selinux
/"${SELINUXTYPE}"/contexts
/files
/file_contexts
/run
/initramfs
> /dev
/null