Skip to content

Commit

Permalink
luksroot: Wait for the header (device) to appear
Browse files Browse the repository at this point in the history
The LUKS header can be on another device (e.g. a USB stick). In my case
it can take up to two seconds until the partition on my USB stick is
available (i.e. the decryption fails without this patch). This will also
remove some redundancy by providing the shell function `wait_target` and
slightly improve the output (one "." per second and a success/failure
indication after 10 seconds instead of always printing "ok").
  • Loading branch information
primeos committed Apr 5, 2017
1 parent 2ba604f commit a6420e1
Showing 1 changed file with 30 additions and 21 deletions.
51 changes: 30 additions & 21 deletions nixos/modules/system/boot/luksroot.nix
Expand Up @@ -6,29 +6,38 @@ let
luks = config.boot.initrd.luks;

openCommand = name': { name, device, header, keyFile, keyFileSize, allowDiscards, yubikey, ... }: assert name' == name; ''
# Wait for luksRoot to appear, e.g. if on a usb drive.
# XXX: copied and adapted from stage-1-init.sh - should be
# available as a function.
if ! test -e ${device}; then
echo -n "waiting 10 seconds for device ${device} to appear..."
for try in $(seq 10); do
sleep 1
if test -e ${device}; then break; fi
echo -n .
done
echo "ok"
fi
# Wait for a target (e.g. device, keyFile, header, ...) to appear.
wait_target() {
local name="$1"
local target="$2"
if [ ! -e $target ]; then
echo -n "Waiting 10 seconds for $name $target to appear"
local success=false;
for try in $(seq 10); do
echo -n "."
sleep 1
if [ -e $target ]; then success=true break; fi
done
if [ $success = true ]; then
echo " - success";
else
echo " - failure";
fi
fi
}
# Wait for luksRoot (and optionally keyFile and/or header) to appear, e.g.
# if on a USB drive.
wait_target "device" ${device}
${optionalString (keyFile != null) ''
if ! test -e ${keyFile}; then
echo -n "waiting 10 seconds for key file ${keyFile} to appear..."
for try in $(seq 10); do
sleep 1
if test -e ${keyFile}; then break; fi
echo -n .
done
echo "ok"
fi
wait_target "key file" ${keyFile}
''}
${optionalString (header != null) ''
wait_target "header" ${header}
''}
open_normally() {
Expand Down

0 comments on commit a6420e1

Please sign in to comment.