1#!/bin/sh 2# Copyright (C) 2011 O.S. Systems Software LTDA. 3# Licensed on MIT 4 5finish_enabled() { 6 return 0 7} 8 9finish_run() { 10 if [ -n "$ROOTFS_DIR" ]; then 11 if [ ! -d $ROOTFS_DIR/dev ]; then 12 fatal "ERROR: There's no '/dev' on rootfs." 13 fi 14 15 # Unmount anything that was automounted by busybox via mdev-mount.sh. 16 # We're about to switch_root, and leaving anything mounted will prevent 17 # the next rootfs from modifying the block device. Ignore ROOT_DISK, 18 # if it was set by setup-live, because it'll be mounted over loopback 19 # to ROOTFS_DIR. 20 local dev 21 for dev in /run/media/*; do 22 if mountpoint -q "${dev}" && [ "${dev##*/}" != "${ROOT_DISK}" ]; then 23 umount -f "${dev}" || debug "Failed to unmount ${dev}" 24 fi 25 done 26 27 info "Switching root to '$ROOTFS_DIR'..." 28 29 debug "Moving basic mounts onto rootfs" 30 for dir in `awk '/\/dev.* \/run\/media/{print $2}' /proc/mounts`; do 31 # Parse any OCT or HEX encoded chars such as spaces 32 # in the mount points to actual ASCII chars 33 dir=`printf $dir` 34 mkdir -p "${ROOTFS_DIR}/media/${dir##*/}" 35 mount -n --move "$dir" "${ROOTFS_DIR}/media/${dir##*/}" 36 done 37 38 debug "Moving /dev, /proc and /sys onto rootfs..." 39 mount --move /dev $ROOTFS_DIR/dev 40 mount --move /proc $ROOTFS_DIR/proc 41 mount --move /sys $ROOTFS_DIR/sys 42 43 cd $ROOTFS_DIR 44 exec switch_root -c /dev/console $ROOTFS_DIR ${bootparam_init:-/sbin/init} 45 else 46 debug "No rootfs has been set" 47 fi 48} 49