-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
shellcheck cleanup for initrd scripts
Signed-off-by: Kash Pande <kash@tripleback.net> Signed-off-by: Matthew Thode <mthode@mthode.org>
- Loading branch information
1 parent
94d6e92
commit 4583aff
Showing
6 changed files
with
98 additions
and
103 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,48 +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 | ||
|