blob: d1d1042ba83fe98de11e7adf048e271159e2ad9b [file] [log] [blame]
#!/bin/sh
trap 'exec /bin/sh' INT EXIT
# We need proc for reading the kernel command line
mount -n -t proc none /proc
set -- $(cat /proc/cmdline)
# We don't want to leave mount points around
umount /proc
rootwait=true # defaults to off in the kernel, I think it's more useful on
for arg; do
case "$arg" in
root=LABEL=*)
if [ x"$root_type" != x ]; then
echo "Warning, multiple root= specified, using latest."
fi
root_type=label
root="${arg#root=LABEL=}"
;;
root=UUID=*)
if [ x"$root_type" != x ]; then
echo "Warning, multiple root= specified, using latest."
fi
root_type=uuid
root="${arg#root=UUID=}"
;;
root=*)
if [ x"$root_type" != x ]; then
echo "Warning, multiple root= specified, using latest."
fi
root_type=disk
root="${arg#root=}"
;;
rootflags=*)
if [ x"$rootflags" != x ]; then
echo "Warning, multiple rootflags= specified, using latest."
fi
rootflags=",${arg#rootflags=}"
;;
rootfstype=*)
if [ x"$rootfstype" != x ]; then
echo "Warning, multiple rootfstype= specified, using latest."
fi
rootfstype="${arg#rootfstype=}"
;;
rootdelay=*)
if [ x"$rootdelay" != x ]; then
echo "Warning, multiple rootdelay= specified, using latest."
fi
rootdelay="${arg#rootdelay=}"
;;
rootwait)
rootwait=true
;;
norootwait)
rootwait=false
;;
ro)
ro=ro
;;
rw)
ro=rw
;;
init=*)
init="${arg#init=}"
;;
esac
done
if [ x"$rootdelay" != x ]; then
sleep "$rootdelay"
fi
if [ x"$rootfstype" = x ]; then
# Warn that busybox may not be able to auto-detect rootfs type
cat <<\EOF
Warning, rootfs type not specified, auto-detection of type is slow and
may fail. Please add rootfstype=$type to kernel command line.
EOF
fi
mount -n -t devtmpfs devtmpfs /dev
while true; do
case "$root_type" in
disk)
if mount -n -t "${rootfstype}" -o "${ro-rw}""$rootflags" "$root" /mnt; then
break
else
echo disk $root not found
blkid
fi
;;
label)
disk="$(findfs LABEL="$root")"
if [ x"$disk" = x ]; then
echo disk with label $root not found
blkid
else
mount -n -t "${rootfstype}" -o "${ro-rw}""$rootflags" "$disk" /mnt && break
fi
;;
uuid)
disk="$(findfs UUID="$root")"
if [ x"$disk" = x ]; then
echo disk with UUID $root not found
blkid
else
mount -n -t "${rootfstype}" -o "${ro-rw}""$rootflags" "$disk" /mnt && break
fi
;;
'')
echo "Error, no root specified"
exit 1
;;
esac
if "$rootwait"; then
echo Trying again in 0.5 seconds
sleep 0.5
fi
done
umount -n /dev
# We dont create any static device nodes while building,
# device nodes will be created by systemd but before that
# we at least need the console
mknod -m 0600 /mnt/dev/console c 5 1
exec switch_root -c /dev/console /mnt "${init-/sbin/init}"