#!/bin/sh # Copyright (C) 2011 O.S. Systems Software LTDA. # Licensed on MIT finish_enabled() { return 0 } finish_run() { if [ -n "$ROOTFS_DIR" ]; then if [ ! -d $ROOTFS_DIR/dev ]; then fatal "ERROR: There's no '/dev' on rootfs." fi # Unmount anything that was automounted by busybox via mdev-mount.sh. # We're about to switch_root, and leaving anything mounted will prevent # the next rootfs from modifying the block device. Ignore ROOT_DISK, # if it was set by setup-live, because it'll be mounted over loopback # to ROOTFS_DIR. local dev for dev in /run/media/*; do if mountpoint -q "${dev}" && [ "${dev##*/}" != "${ROOT_DISK}" ]; then umount -f "${dev}" || debug "Failed to unmount ${dev}" fi done info "Switching root to '$ROOTFS_DIR'..." debug "Moving basic mounts onto rootfs" for dir in `awk '/\/dev.* \/run\/media/{print $2}' /proc/mounts`; do # Parse any OCT or HEX encoded chars such as spaces # in the mount points to actual ASCII chars dir=`printf $dir` mkdir -p "${ROOTFS_DIR}/media/${dir##*/}" mount -n --move "$dir" "${ROOTFS_DIR}/media/${dir##*/}" done debug "Moving /dev, /proc and /sys onto rootfs..." mount --move /dev $ROOTFS_DIR/dev mount --move /proc $ROOTFS_DIR/proc mount --move /sys $ROOTFS_DIR/sys cd $ROOTFS_DIR exec switch_root -c /dev/console $ROOTFS_DIR ${bootparam_init:-/sbin/init} else debug "No rootfs has been set" fi }