- # setup $ROOT/run
- mkdir -p "$ROOT/run"
- mount -t tmpfs -osize=100M tmpfs "$ROOT/run"
- mkdir -p "$ROOT/run/lock"
- # setup $ROOT/dev
- mkdir -p "$ROOT/dev"
- mount -t tmpfs -osize=100M tmpfs "$ROOT/dev"
- mknod -m 622 "$ROOT/dev/console" c 5 1
- mknod -m 666 "$ROOT/dev/null" c 1 3
- mknod -m 666 "$ROOT/dev/zero" c 1 5
- mknod -m 666 "$ROOT/dev/ptmx" c 5 2
- mknod -m 666 "$ROOT/dev/tty" c 5 0
- mknod -m 444 "$ROOT/dev/random" c 1 8
- mknod -m 444 "$ROOT/dev/urandom" c 1 9
- chown root:tty "$ROOT/dev/console"
- chown root:tty "$ROOT/dev/ptmx"
- chown root:tty "$ROOT/dev/tty"
- ln -sTf /proc/self/fd "$ROOT/dev/fd"
- ln -sTf /proc/self/fd/0 "$ROOT/dev/stdin"
- ln -sTf /proc/self/fd/1 "$ROOT/dev/stdout"
- ln -sTf /proc/self/fd/2 "$ROOT/dev/stderr"
- ln -sTf /proc/kcore "$ROOT/dev/core"
- mkdir "$ROOT/dev/shm"
- mkdir "$ROOT/dev/pts"
- chmod 1777 "$ROOT/dev/shm"
+ if [ -f "${UPPER%% *}" ] ; then
+ if [ -x "${UPPER%% *}" ] ; then
+ echo "${UPPER%% *} appears to be executable" >&2
+ # Giving a program/script as UPPER= asks for running this
+ # first, to make a root filesystem available. The script takes
+ # ACTION "setup" and "teardown", and on "setup" it must tell
+ # where the ROOT is set up.
+ ROOT="$(env ACTION=setup $UPPER)"
+ if [ ! -d "$ROOT" ] ; then
+ # setup failed
+ die "root setup failed: $UPPER"
+ fi
+ UPPER="$ROOT"
+ ## Now falling down to "normal overlay" setup
+ else
+ die "${UPPER%% *} (root setup program/script) is not executable"
+ fi
+ fi
+
+ # LIVE is the same as LOWER then skip the overlay; just assume
+ # a proper chroot system exists at LIVE.
+ if [ "$LIVE" != "$LOWER" ] ; then
+ # setup $UPPER/run
+ mkdir -p "$UPPER/run"
+ mount -t tmpfs -osize=100M tmpfs "$UPPER/run"
+ mkdir -p "$UPPER/run/lock"
+ # setup $UPPER/dev
+ mkdir -p "$UPPER/dev"
+ mount -t tmpfs -osize=100M tmpfs "$UPPER/dev"
+ mknod -m 622 "$UPPER/dev/console" c 5 1
+ mknod -m 666 "$UPPER/dev/null" c 1 3
+ mknod -m 666 "$UPPER/dev/zero" c 1 5
+ mknod -m 666 "$UPPER/dev/ptmx" c 5 2
+ mknod -m 666 "$UPPER/dev/tty" c 5 0
+ mknod -m 444 "$UPPER/dev/random" c 1 8
+ mknod -m 444 "$UPPER/dev/urandom" c 1 9
+ chown root:tty "$UPPER/dev/console"
+ chown root:tty "$UPPER/dev/ptmx"
+ chown root:tty "$UPPER/dev/tty"
+ ln -sTf /proc/self/fd "$UPPER/dev/fd"
+ ln -sTf /proc/self/fd/0 "$UPPER/dev/stdin"
+ ln -sTf /proc/self/fd/1 "$UPPER/dev/stdout"
+ ln -sTf /proc/self/fd/2 "$UPPER/dev/stderr"
+ ln -sTf /proc/kcore "$UPPER/dev/core"
+ mkdir "$UPPER/dev/shm"
+ mkdir "$UPPER/dev/pts"
+ chmod 1777 "$UPPER/dev/shm"