contrib: dracut: don't require essentials to be under the same encroot

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Closes #13291
This commit is contained in:
наб 2022-04-04 23:39:18 +02:00 committed by Brian Behlendorf
parent eaf1e06045
commit 30c6dce7f7
2 changed files with 38 additions and 30 deletions

View File

@ -93,6 +93,7 @@ if ! zpool get -Ho name "${ZFS_POOL}" > /dev/null 2>&1; then
fi fi
# Load keys if we can or if we need to # Load keys if we can or if we need to
# TODO: for_relevant_root_children like in zfs-load-key.sh.in
if [ "$(zpool get -Ho value feature@encryption "${ZFS_POOL}")" = 'active' ]; then if [ "$(zpool get -Ho value feature@encryption "${ZFS_POOL}")" = 'active' ]; then
# if the root dataset has encryption enabled # if the root dataset has encryption enabled
ENCRYPTIONROOT="$(zfs get -Ho value encryptionroot "${ZFS_DATASET}")" ENCRYPTIONROOT="$(zfs get -Ho value encryptionroot "${ZFS_DATASET}")"

View File

@ -22,16 +22,19 @@ fi
[ "$(zpool get -Ho value feature@encryption "${BOOTFS%%/*}")" = 'active' ] || return 0 [ "$(zpool get -Ho value feature@encryption "${BOOTFS%%/*}")" = 'active' ] || return 0
ENCRYPTIONROOT="$(zfs get -Ho value encryptionroot "${BOOTFS}")" _load_key_cb() {
[ "${ENCRYPTIONROOT}" = "-" ] && return 0 dataset="$1"
[ "$(zfs get -Ho value keystatus "${ENCRYPTIONROOT}")" = "unavailable" ] || return 0 ENCRYPTIONROOT="$(zfs get -Ho value encryptionroot "${dataset}")"
[ "${ENCRYPTIONROOT}" = "-" ] && return 0
KEYLOCATION="$(zfs get -H -o value keylocation "${ENCRYPTIONROOT}")" [ "$(zfs get -Ho value keystatus "${ENCRYPTIONROOT}")" = "unavailable" ] || return 0
case "${KEYLOCATION%%://*}" in
KEYLOCATION="$(zfs get -Ho value keylocation "${ENCRYPTIONROOT}")"
case "${KEYLOCATION%%://*}" in
prompt) prompt)
for _ in 1 2 3; do for _ in 1 2 3; do
systemd-ask-password --no-tty "Encrypted ZFS password for ${BOOTFS}" | zfs load-key "${ENCRYPTIONROOT}" && break systemd-ask-password --no-tty "Encrypted ZFS password for ${dataset}" | zfs load-key "${ENCRYPTIONROOT}" && break
done done
;; ;;
http*) http*)
@ -54,4 +57,8 @@ case "${KEYLOCATION%%://*}" in
*) *)
zfs load-key "${ENCRYPTIONROOT}" zfs load-key "${ENCRYPTIONROOT}"
;; ;;
esac esac
}
_load_key_cb "$BOOTFS"
for_relevant_root_children "$BOOTFS" _load_key_cb