Make exec failure not kill init or switch_root.

If exec fails, then the shell will die unless the next command
is part of a command list. So, exec $whatever || onoes is the way to go

There are also some minor cleanups that were leftovers from splitting
out switch_root in its current form.
This commit is contained in:
Victor Lowther 2009-02-20 09:24:26 -08:00 committed by Dave Jones
parent 3f9c86ab86
commit 9cead591ad
2 changed files with 10 additions and 11 deletions

16
init
View File

@ -57,7 +57,7 @@ udevd --daemon
udevadm trigger >/dev/null 2>&1
# mount the rootfs
export NEWROOT="/sysroot"
NEWROOT="/sysroot"
# FIXME: there's got to be a better way ...
# it'd be nice if we had a udev rule that just did all of the bits for
@ -96,10 +96,10 @@ INIT=$(getarg init)
}
source_all pre-pivot
exec switch_root "$NEWROOT" "$INIT" $CMDLINE
# davej doesn't like initrd bugs
echo "Something went very badly wrong in the initrd. Please "
echo "file a bug against mkinitrd."
sleep 100d
exit 1
echo "Switching to real root filesystem $root"
exec switch_root "$NEWROOT" "$INIT" $CMDLINE || {
# davej doesn't like initrd bugs
echo "Something went very badly wrong in the initrd. Please "
echo "file a bug against mkinitrd."
emergency_shell
}

View File

@ -72,7 +72,6 @@ update_newroot_libpath
# start looking for required binaries and bits of infrastructure
BINDIRS="/bin /sbin /usr/bin /usr/sbin"
INITDIRS="/sbin /etc /"
RM=$(simple_find rm $BINDIRS) || die "Cannnot find rm on $NEWROOT"
CHROOT=$(simple_find chroot $BINDIRS) || die "Cannot find chroot on $NEWROOT"
LDD=$(simple_find ldd $BINDIRS) || die "Cannot find ldd on $NEWROOT"
@ -108,5 +107,5 @@ run_from_newroot "$MOUNT_LDSO" "$MOUNT" -n --move . /
# exec init.
NEWROOT="."
update_newroot_libpath
run_from_newroot "$CHROOT_LDSO" exec "$CHROOT" "$NEWROOT" "$INIT" "$@"
die "The chroot did not take for some reason"
run_from_newroot "$CHROOT_LDSO" exec "$CHROOT" "$NEWROOT" "$INIT" "$@" || \
die "The chroot did not take for some reason"