File: parse-root.sh

package info (click to toggle)
dracut 109-9
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 4,872 kB
  • sloc: sh: 24,527; ansic: 5,234; makefile: 346; perl: 186; python: 48; javascript: 19
file content (38 lines) | stat: -rwxr-xr-x 1,254 bytes parent folder | download | duplicates (3)
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