diff options
author | Tim Schlueter <schlueter.tim@linux.com> | 2018-02-25 16:56:04 -0800 |
---|---|---|
committer | Tim Schlueter <schlueter.tim@linux.com> | 2018-02-25 17:22:39 -0800 |
commit | c3b8d74200c0060678aa05bafe8ef2dadb25bdba (patch) | |
tree | 0a9c59146033c3181b08766663048da72860bea5 /initramfs/script | |
parent | cdf17bffadb3346ea4424357b5bb85de852231e9 (diff) |
Initramfs script improvements
- Resolve the root device, so it can be specified by UUID, etc.
- Exit immediately if the ROOTFSTYPE is set and not bcachefs
- Only try to unlock the device 3 times before opening a shell or
rebooting (depending on kernel cmdline)
Diffstat (limited to 'initramfs/script')
-rwxr-xr-x | initramfs/script | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/initramfs/script b/initramfs/script index bd64b41f..e22ace9c 100755 --- a/initramfs/script +++ b/initramfs/script @@ -15,11 +15,40 @@ prereqs) ;; esac -# Check if it needs unlocking: -if bcachefs unlock -c $ROOT >/dev/null 2>&1; then - echo "Unlocking $ROOT:" +# Nothing to do if ROOTFSTYPE is set to something other than bcachefs +if [ -n "$ROOTFSTYPE" -a "$ROOTFSTYPE" != bcachefs ]; then + exit 0 +fi + +# source for resolve_device() and panic() functions +. /scripts/functions + +# Resolve the root device (e.g. if root is specified by UUID) +DEV=$(resolve_device "$ROOT") - while true; do - bcachefs unlock $ROOT && break +# Check if the root device needs unlocking: +if bcachefs unlock -c $DEV >/dev/null 2>&1; then + if [ "$DEV" == "$ROOT" ]; then + echo "Please unlock $DEV:" + else + echo "Please unlock $DEV ($ROOT):" + fi + + count=0 + tries=3 + while [ $tries -le 0 -o $count -lt $tries ]; do + if bcachefs unlock "$DEV"; then + echo "Bcachefs: $DEV successfully unlocked" + break + fi + + let count++ done + + if [ $tries -gt 0 -a $count -ge $tries ]; then + panic "Bcachefs: maximum number of tries exceeded for $DEV" + exit 1 + fi fi + +exit 0 |