mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-17 07:13:23 +01:00
luksroot: Wait for the header (device) to appear
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").
This commit is contained in:
parent
2ba604f292
commit
a6420e13a2
1 changed files with 30 additions and 21 deletions
|
@ -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() {
|
||||
|
|
Loading…
Reference in a new issue