From c3b8d74200c0060678aa05bafe8ef2dadb25bdba Mon Sep 17 00:00:00 2001 From: Tim Schlueter Date: Sun, 25 Feb 2018 16:56:04 -0800 Subject: [PATCH] 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) --- initramfs/script | 39 ++++++++++++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/initramfs/script b/initramfs/script index bd64b41..e22ace9 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 -- 2.39.2