summaryrefslogtreecommitdiffstats
path: root/contrib/dracut/90zfs/zfs-load-key.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/dracut/90zfs/zfs-load-key.sh.in')
-rwxr-xr-xcontrib/dracut/90zfs/zfs-load-key.sh.in28
1 files changed, 14 insertions, 14 deletions
diff --git a/contrib/dracut/90zfs/zfs-load-key.sh.in b/contrib/dracut/90zfs/zfs-load-key.sh.in
index 6c1f423ae..9e7adfc79 100755
--- a/contrib/dracut/90zfs/zfs-load-key.sh.in
+++ b/contrib/dracut/90zfs/zfs-load-key.sh.in
@@ -1,47 +1,47 @@
-#!/bin/bash
+#!/bin/sh
# only run this on systemd systems, we handle the decrypt in mount-zfs.sh in the mount hook otherwise
-[[ -e /bin/systemctl ]] || return 0
+[ -e /bin/systemctl ] || return 0
# This script only gets executed on systemd systems, see mount-zfs.sh for non-systemd systems
# import the libs now that we know the pool imported
[ -f /lib/dracut-lib.sh ] && dracutlib=/lib/dracut-lib.sh
[ -f /usr/lib/dracut/modules.d/99base/dracut-lib.sh ] && dracutlib=/usr/lib/dracut/modules.d/99base/dracut-lib.sh
+# shellcheck source=./lib-zfs.sh.in
. "$dracutlib"
# load the kernel command line vars
-[ -z "$root" ] && root=$(getarg root=)
+[ -z "$root" ] && root="$(getarg root=)"
# If root is not ZFS= or zfs: or rootfstype is not zfs then we are not supposed to handle it.
-[ "${root##zfs:}" = "${root}" -a "${root##ZFS=}" = "${root}" -a "$rootfstype" != "zfs" ] && exit 0
+[ "${root##zfs:}" = "${root}" ] && [ "${root##ZFS=}" = "${root}" ] && [ "$rootfstype" != "zfs" ] && exit 0
# There is a race between the zpool import and the pre-mount hooks, so we wait for a pool to be imported
while true; do
zpool list -H | grep -q -v '^$' && break
- [[ $(systemctl is-failed zfs-import-cache.service) == 'failed' ]] && exit 1
- [[ $(systemctl is-failed zfs-import-scan.service) == 'failed' ]] && exit 1
+ [ "$(systemctl is-failed zfs-import-cache.service)" = 'failed' ] && exit 1
+ [ "$(systemctl is-failed zfs-import-scan.service)" = 'failed' ] && exit 1
sleep 0.1s
done
# run this after import as zfs-import-cache/scan service is confirmed good
-if [[ "${root}" = "zfs:AUTO" ]] ; then
- root=$(zpool list -H -o bootfs | awk '$1 != "-" {print; exit}')
+if [ "${root}" = "zfs:AUTO" ] ; then
+ root="$(zpool list -H -o bootfs | awk '$1 != "-" {print; exit}')"
else
root="${root##zfs:}"
root="${root##ZFS=}"
fi
# if pool encryption is active and the zfs command understands '-o encryption'
-if [[ $(zpool list -H -o feature@encryption $(echo "${root}" | awk -F\/ '{print $1}')) == 'active' ]]; then
+if [ "$(zpool list -H -o feature@encryption $(echo "${root}" | awk -F\/ '{print $1}'))" = 'active' ]; then
# if the root dataset has encryption enabled
- ENCRYPTIONROOT=$(zfs get -H -o value encryptionroot ${ZFS_DATASET})
+ ENCRYPTIONROOT=$(zfs get -H -o value encryptionroot "${root}")
if ! [ "${ENCRYPTIONROOT}" = "-" ]; then
# decrypt them
TRY_COUNT=5
- while [ $TRY_COUNT != 0 ]; do
- zfs load-key "${ENCRYPTIONROOT}" <<< $(systemd-ask-password "Encrypted ZFS password for ${root}: ")
- [[ $? == 0 ]] && break
- ((TRY_COUNT-=1))
+ while [ $TRY_COUNT -gt 0 ]; do
+ systemd-ask-password "Encrypted ZFS password for ${root}" --no-tty | zfs load-key "${ENCRYPTIONROOT}" && break
+ TRY_COUNT=$((TRY_COUNT - 1))
done
fi
fi