# Local loopback filesystem mounting -*- shell-script -*- # Parameter: Where to mount the filesystem mountroot () { for x in $(cat /proc/cmdline); do case $x in rootfstype=*) rootfstype=${x#rootfstype=} ;; loopfile=*) loopfile=${x#loopfile=} ;; loopfstype=*) loopfstype=${x#loopfstype=} ;; esac done [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top" run_scripts /scripts/local-top [ "$quiet" != "y" ] && log_end_msg # If the root device hasn't shown up yet, give it a little while # to deal with removable devices if [ ! -e "${ROOT}" ]; then log_begin_msg "Waiting for root file system..." if [ -x /sbin/usplash_write ]; then /sbin/usplash_write "TIMEOUT 180" || true fi slumber=1800 while [ ${slumber} -gt 0 -a ! -e "${ROOT}" ]; do /bin/sleep 0.1 slumber=$(( ${slumber} - 1 )) done if [ ${slumber} -gt 0 ]; then log_end_msg 0 else log_end_msg 1 || true fi if [ -x /sbin/usplash_write ]; then /sbin/usplash_write "TIMEOUT 15" || true fi fi # We've given up, but we'll let the user fix matters if they can while [ ! -e "${ROOT}" ]; do panic "ALERT! ${ROOT} does not exist. Dropping to a shell!" done eval $(fstype < ${ROOT}) [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount" run_scripts /scripts/local-premount [ "$quiet" != "y" ] && log_end_msg # FIXME This has no error checking modprobe -q ${FSTYPE} # FIXME This has no error checking # Mount root mkdir /preroot if [ "${rootfstype}" ]; then opts="-t ${rootfstype}" fi # mount the device containing the file image as rw mount -w ${ROOTFLAGS} ${opts} ${ROOT} /preroot [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/log-bottom" run_scripts /scripts/local-bottom [ "$quiet" != "y" ] && log_end_msg if [ "${loopfstype}" ]; then opts="-t ${loopfstype}" fi # mount the file image loopback mount -o loop ${opts} /preroot/${loopfile} ${rootmnt} if [ -e "${rootmnt}/preroot" ]; then # bind mount the real device so that it is accessible later mount -o bind /preroot ${rootmnt}/preroot fi }