summaryrefslogtreecommitdiffstats
path: root/nixos
diff options
context:
space:
mode:
authorLinus Heckemann <git@sphalerite.org>2021-03-02 13:32:26 +0100
committerGitHub <noreply@github.com>2021-03-02 13:32:26 +0100
commit08fc5e317c10f7eb5255fd4394e09a4e18879efe (patch)
tree7a01d805888fd7b177070364f30c8830b3287d05 /nixos
parenta676907ae34dde607f3b9e5e76d6223d8c7dcc53 (diff)
parentaed7c9a22a8e9c28735a903359a948e50b0b7eb5 (diff)
Merge pull request #111802 from twhitehead/init-symlinks
nixos/stage1: chroot stage 2 init exists check so symlink resolve
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/system/boot/stage-1-init.sh15
1 files changed, 10 insertions, 5 deletions
diff --git a/nixos/modules/system/boot/stage-1-init.sh b/nixos/modules/system/boot/stage-1-init.sh
index 5b39f34200cd..ddaf985878e0 100644
--- a/nixos/modules/system/boot/stage-1-init.sh
+++ b/nixos/modules/system/boot/stage-1-init.sh
@@ -614,11 +614,16 @@ echo /sbin/modprobe > /proc/sys/kernel/modprobe
# Start stage 2. `switch_root' deletes all files in the ramfs on the
-# current root. Note that $stage2Init might be an absolute symlink,
-# in which case "-e" won't work because we're not in the chroot yet.
-if [ ! -e "$targetRoot/$stage2Init" ] && [ ! -L "$targetRoot/$stage2Init" ] ; then
- echo "stage 2 init script ($targetRoot/$stage2Init) not found"
- fail
+# current root. The path has to be valid in the chroot not outside.
+if [ ! -e "$targetRoot/$stage2Init" ]; then
+ stage2Check=${stage2Init}
+ while [ "$stage2Check" != "${stage2Check%/*}" ] && [ ! -L "$targetRoot/$stage2Check" ]; do
+ stage2Check=${stage2Check%/*}
+ done
+ if [ ! -L "$targetRoot/$stage2Check" ]; then
+ echo "stage 2 init script ($targetRoot/$stage2Init) not found"
+ fail
+ fi
fi
mkdir -m 0755 -p $targetRoot/proc $targetRoot/sys $targetRoot/dev $targetRoot/run