Make dracut fail if essential files cannot be installed

Dracut will now fail in initramfs generation if essential files cannot
be installed.

Reviewed-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Reviewed-by: Andrew J. Hesford <ajh@sideband.org>
Signed-off-by: Savyasachee Jha <hi@savyasacheejha.com>
Closes #13010
This commit is contained in:
Savyasachee Jha 2022-02-06 09:41:23 +05:30 committed by Brian Behlendorf
parent 0671f72706
commit ebbfc6cb85
1 changed files with 30 additions and 10 deletions

View File

@ -19,16 +19,18 @@ depends() {
} }
installkernel() { installkernel() {
instmods zfs instmods -c zfs
} }
install() { install() {
inst_rules \ for i in "90-zfs.rules" "69-vdev.rules" "60-zvol.rules"; do
@udevruledir@/90-zfs.rules \ if ! dracut_install "@udevdir@/$i"; then
@udevruledir@/69-vdev.rules \ dfatal "Failed to install udev rule: $i"
@udevruledir@/60-zvol.rules exit 1
fi
done
dracut_install \ inst_multiple \
@sbindir@/zgenhostid \ @sbindir@/zgenhostid \
@sbindir@/zfs \ @sbindir@/zfs \
@sbindir@/zpool \ @sbindir@/zpool \
@ -40,10 +42,25 @@ install() {
awk \ awk \
tr \ tr \
cut \ cut \
head head ||
{ dfatal "Failed to install essential binaries"; exit 1; }
inst_libdir_file "libgcc_s.so*"
# Lines 71-90 adapted from
# https://github.com/zbm-dev/zfsbootmenu/blob/9a03eab2b75647170bdc383903735a694ecd0ed6/dracut/module-setup.sh#L71
if ! ldd "$( command -v zpool )" | grep -qF 'libgcc_s.so'; then
# On systems with gcc-config (Gentoo, Funtoo, etc.), use it to find libgcc_s
if command -v gcc-config >/dev/null 2>&1; then
dracut_install "/usr/lib/gcc/$(s=$(gcc-config -c); echo "${s%-*}/${s##*-}")/libgcc_s.so.1" ||
{ dfatal "Unable to install libgcc_s.so"; exit 1; }
# Otherwise, use dracut's library installation function to find the right one
elif ! inst_libdir_file "libgcc_s.so*"; then
# If all else fails, just try looking for some gcc arch directory
dracut_install /usr/lib/gcc/*/*/libgcc_s.so* ||
{ dfatal "Unable to install libgcc_s.so"; exit 1; }
fi
fi
inst_hook cmdline 95 "${moddir}/parse-zfs.sh" inst_hook cmdline 95 "${moddir}/parse-zfs.sh"
if [ -n "$systemdutildir" ] ; then if [ -n "$systemdutildir" ] ; then
inst_script "${moddir}/zfs-generator.sh" "$systemdutildir"/system-generators/dracut-zfs-generator inst_script "${moddir}/zfs-generator.sh" "$systemdutildir"/system-generators/dracut-zfs-generator
@ -75,7 +92,10 @@ install() {
if dracut_module_included "systemd"; then if dracut_module_included "systemd"; then
dracut_install systemd-ask-password systemd-tty-ask-password-agent dracut_install \
systemd-ask-password \
systemd-tty-ask-password-agent ||
{ dfatal "Failed to install essential systemd binaries"; exit 1; }
mkdir -p "${initdir}/$systemdsystemunitdir/zfs-import.target.wants" mkdir -p "${initdir}/$systemdsystemunitdir/zfs-import.target.wants"
for _service in "zfs-import-scan.service" "zfs-import-cache.service" ; do for _service in "zfs-import-scan.service" "zfs-import-cache.service" ; do