12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #!/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, /sys and /run onto rootfs..."
- mount --move /dev $ROOTFS_DIR/dev
- mount --move /proc $ROOTFS_DIR/proc
- mount --move /sys $ROOTFS_DIR/sys
- mount --move /run $ROOTFS_DIR/run
- cd $ROOTFS_DIR
- exec switch_root $ROOTFS_DIR ${bootparam_init:-/sbin/init}
- else
- debug "No rootfs has been set"
- fi
- }
|