1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
#!/bin/sh
command -v getarg > /dev/null || . /lib/dracut-lib.sh
root=$(getarg root=)
case "${root#block:}" in
LABEL=* | UUID=* | PARTUUID=* | PARTLABEL=*)
root="block:$(label_uuid_to_dev "$root")"
rootok=1
;;
/dev/nfs | /dev/root) # ignore legacy
;;
/dev/*)
root="block:${root}"
rootok=1
;;
esac
if [ "$rootok" = "1" ]; then
root_dev="${root#block:}"
root_name="$(str_replace "$root_dev" '/' '\x2f')"
if ! [ -e "$hookdir/initqueue/finished/devexists-${root_name}.sh" ]; then
# If a LUKS device needs unlocking via systemd in the initrd, assume
# it's for the root device. In that case, don't block on it if it's
# after remote-fs-pre.target since the initqueue is ordered before it so
# it will never actually show up (think Tang-pinned rootfs).
cat > "$hookdir/initqueue/finished/devexists-${root_name}.sh" << EOF
if ! grep -qs After=remote-fs-pre.target /run/systemd/generator/systemd-cryptsetup@*.service; then
[ -e "$root_dev" ]
fi
EOF
{
printf '[ -e "%s" ] || ' "$root_dev"
printf 'warn "\"%s\" does not exist"\n' "$root_dev"
} >> "$hookdir/emergency/80-${root_name}.sh"
fi
fi
|