]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
Make exec failure not kill init or switch_root.
authorVictor Lowther <victor.lowther@gmail.com>
Fri, 20 Feb 2009 17:24:26 +0000 (09:24 -0800)
committerDave Jones <davej@redhat.com>
Mon, 23 Feb 2009 18:22:01 +0000 (13:22 -0500)
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.

init
switch_root

diff --git a/init b/init
index 06689a69de9b4faa0c2ca2a3520493a22a186135..358ef0262bd90d36546066a33baceb0451ed5315 100755 (executable)
--- a/init
+++ b/init
@@ -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
+}
index 1cc80e9ace6cf095a0194b17142e881f09d46e8f..d142e97d443c8296f1092b3a0a9ebee27255e5c3 100755 (executable)
@@ -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"