diff --git a/init b/init index b12743c8..0b158dc2 100755 --- a/init +++ b/init @@ -14,9 +14,17 @@ emergency_shell() } getarg() { + local o; for o in $(< /proc/cmdline); do [[ $o == $1 ]] && { echo $o; break; } done + return 1 +} + +source_all() { + local f + [[ -d $1 ]] || return + for f in "$d"/*; do; . "$f"; done } echo "Starting initrd..." @@ -67,12 +75,8 @@ esac tries=0 echo "Waiting up to 30 seconds for $root to become available" udevadm settle --timeout=30 -[[ -f /cryptroot ]] && { - echo "Encrypted root detected." - cryptopts=$(< /cryptroot) - /sbin/cryptsetup luksOpen $cryptopts || emergency_shell - udevadm settle --timeout=30 -} +source_all /pre-mount + echo "Trying to mount rootfs $root" [[ -e $root ]] || emergency_shell ln -s "$root" /dev/root diff --git a/pre-mount/50cryptroot b/pre-mount/50cryptroot new file mode 100644 index 00000000..39e6e6ec --- /dev/null +++ b/pre-mount/50cryptroot @@ -0,0 +1,6 @@ +#!/bin/bash +[[ -f /cryptroot ]] || return +echo "Encrypted root detected." +cryptopts=$(< /cryptroot) +/sbin/cryptsetup luksOpen $cryptopts || emergency_shell +udevadm settle --timeout=30 diff --git a/pre-mount/99resume b/pre-mount/99resume new file mode 100644 index 00000000..7eacd387 --- /dev/null +++ b/pre-mount/99resume @@ -0,0 +1,7 @@ +#!/bin/bash +resume=$(getarg 'resume=*') || return +resume=${resume#resume=} +[[ -b $resume ]] || return +# parsing the output of ls is Bad, but until there is a better way... +read x x x x maj min x < <(ls -lH "$resume") +echo "${maj/,/}:$min"> /sys/power/resume