blob: da358421ba0d5d8f3e1d85fa18681ac2ae045ff5 [file] [log] [blame]
#!/bin/sh
#
# The initial system boot script. This only does one thing: try to find
# the root filesystem and mount it if possible.
#
exec 9>&1 >/dev/kmsg 2>&1
echo "---- initramfs ('$0')"
echo "To bypass this script, use rdinit=/bin/sh"
# Mount /dev, /proc, /sys, etc
/mounts-sys
. /helpers.sh
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
trap 'log FATAL - INIT EXITED - Rebooting.; reboot >&9 2>&1 9>&-' EXIT
# Initialize any loadable driver modules
for d in /lib/modules/*.ko /lib/modules/*/*.ko; do
[ -e "$d" ] && insmod $d
done
# Mount /rootfs and possibly set INIT
. /mounts-root || die "couldn't mount root filesystems"
# Run anything that needs to finish before init
# Pass in paths for $PLATFORM and $DEBUG
/preinit "/rootfs/etc/platform" "/rootfs/tmp/DEBUG"
log 'Looking for init in rootfs. To bypass this, use init=/bin/sh'
for init in "$INIT" /sbin/init /linuxrc /bin/sh; do
[ -n "$init" ] || continue
log "Trying '/rootfs$init'"
[ -x "/rootfs$init" ] || continue
case "$init" in
/sbin/init) args=1 ;;
*) args= ;;
esac
cd /rootfs
[ "$init" = "$INIT" ] && exec >&9 2>&1 # probably a shell; bring back tty
exec 9>&- # close fd to console
exec switch_root /rootfs "$init" $args
done
die "couldn't switch to root filesystem"