]> git.proxmox.com Git - mirror_zfs.git/commitdiff
contrib; dracut: flatten zfs-load-key, simplify zfs-env-bootfs
authorнаб <nabijaczleweli@nabijaczleweli.xyz>
Mon, 4 Apr 2022 20:52:43 +0000 (22:52 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 20 Apr 2022 23:44:55 +0000 (16:44 -0700)
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Closes #13291

contrib/dracut/90zfs/module-setup.sh.in
contrib/dracut/90zfs/zfs-env-bootfs.service.in
contrib/dracut/90zfs/zfs-load-key.sh.in

index c79323a3e61331c0dbf828ea2e971f8416740ce4..f2145861d497d099f7f53f48cb753fb1508a7d7e 100755 (executable)
@@ -9,13 +9,10 @@ check() {
        for tool in "zgenhostid" "zpool" "zfs" "mount.zfs"; do
                command -v "${tool}" >/dev/null || return 1
        done
-
-       return 0
 }
 
 depends() {
        echo udev-rules
-       return 0
 }
 
 installkernel() {
@@ -39,7 +36,6 @@ install() {
                { dfatal "Failed to install essential binaries"; exit 1; }
 
        # Adapted from https://github.com/zbm-dev/zfsbootmenu
-
        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; then
@@ -79,7 +75,6 @@ install() {
        fi
 
        if dracut_module_included "systemd"; then
-
                inst_simple "${systemdsystemunitdir}/zfs-import.target"
                systemctl -q --root "${initdir}" add-wants initrd.target zfs-import.target
 
index e143cb5ec1edfb4e2c935d2c3dd94c4c5117efc3..34c88037cac2b10f59658f1a89e3ea9799b5aa0b 100644 (file)
@@ -8,7 +8,7 @@ Before=zfs-import.target
 
 [Service]
 Type=oneshot
-ExecStart=/bin/sh -c "exec systemctl set-environment BOOTFS=$(@sbindir@/zpool list -H -o bootfs | grep -m1 -v '^-$')"
+ExecStart=/bin/sh -c "exec systemctl set-environment BOOTFS=$(@sbindir@/zpool list -H -o bootfs | grep -m1 -vFx -)"
 
 [Install]
 WantedBy=zfs-import.target
index 9fbef8f680b868401d029eafe84745aa48475583..97e9246d4644ad480b629ffca8124ee6cdb5c280 100755 (executable)
@@ -20,42 +20,38 @@ if [ "$BOOTFS" = "zfs:AUTO" ]; then
     BOOTFS="$(zpool get -Ho value bootfs | grep -m1 -vFx -)"
 fi
 
-# if pool encryption is active and the zfs command understands '-o encryption'
-if [ "$(zpool list -H -o feature@encryption "${BOOTFS%%/*}")" = 'active' ]; then
-    # if the root dataset has encryption enabled
-    ENCRYPTIONROOT="$(zfs get -H -o value encryptionroot "${BOOTFS}")"
-    if ! [ "${ENCRYPTIONROOT}" = "-" ]; then
-        KEYSTATUS="$(zfs get -H -o value keystatus "${ENCRYPTIONROOT}")"
-        # continue only if the key needs to be loaded
-        [ "$KEYSTATUS" = "unavailable" ] || exit 0
-
-        KEYLOCATION="$(zfs get -H -o value keylocation "${ENCRYPTIONROOT}")"
-        case "${KEYLOCATION%%://*}" in
-            prompt)
-                for _ in 1 2 3; do
-                    systemd-ask-password --no-tty "Encrypted ZFS password for ${BOOTFS}" | zfs load-key "${ENCRYPTIONROOT}" && break
-                done
-                ;;
-            http*)
-                systemctl start network-online.target
-                zfs load-key "${ENCRYPTIONROOT}"
-                ;;
-            file)
-                KEYFILE="${KEYLOCATION#file://}"
-                [ -r "${KEYFILE}" ] || udevadm settle
-                [ -r "${KEYFILE}" ] || {
-                    info "Waiting for key ${KEYFILE} for ${ENCRYPTIONROOT}..."
-                    for _ in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
-                        sleep 0.5s
-                        [ -r "${KEYFILE}" ] && break
-                    done
-                }
-                [ -r "${KEYFILE}" ] || warn "Key ${KEYFILE} for ${ENCRYPTIONROOT} hasn't appeared. Trying anyway."
-                zfs load-key "${ENCRYPTIONROOT}"
-                ;;
-            *)
-                zfs load-key "${ENCRYPTIONROOT}"
-                ;;
-        esac
-    fi
-fi
+[ "$(zpool get -Ho value feature@encryption "${BOOTFS%%/*}")" = 'active' ] || return 0
+
+ENCRYPTIONROOT="$(zfs get -Ho value encryptionroot "${BOOTFS}")"
+[ "${ENCRYPTIONROOT}" = "-" ] && return 0
+
+[ "$(zfs get -Ho value keystatus "${ENCRYPTIONROOT}")" = "unavailable" ] || return 0
+
+KEYLOCATION="$(zfs get -H -o value keylocation "${ENCRYPTIONROOT}")"
+case "${KEYLOCATION%%://*}" in
+    prompt)
+        for _ in 1 2 3; do
+            systemd-ask-password --no-tty "Encrypted ZFS password for ${BOOTFS}" | zfs load-key "${ENCRYPTIONROOT}" && break
+        done
+        ;;
+    http*)
+        systemctl start network-online.target
+        zfs load-key "${ENCRYPTIONROOT}"
+        ;;
+    file)
+        KEYFILE="${KEYLOCATION#file://}"
+        [ -r "${KEYFILE}" ] || udevadm settle
+        [ -r "${KEYFILE}" ] || {
+            info "ZFS: Waiting for key ${KEYFILE} for ${ENCRYPTIONROOT}..."
+            for _ in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
+                sleep 0.5s
+                [ -r "${KEYFILE}" ] && break
+            done
+        }
+        [ -r "${KEYFILE}" ] || warn "ZFS: Key ${KEYFILE} for ${ENCRYPTIONROOT} hasn't appeared. Trying anyway."
+        zfs load-key "${ENCRYPTIONROOT}"
+        ;;
+    *)
+        zfs load-key "${ENCRYPTIONROOT}"
+        ;;
+esac