- # 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 mount -t overlay -olowerdir=$3,upperdir=$4,workdir=$5 $1 $2 ; then
- : # all good
- else
- umount -R "$ROOT/dev"
- umount "$ROOT/run"
- die "Cannot set up the overlay mount $2"
+ [ -d "$UPPER" ] || die "UPPER=$UPPER is not a directory"
+ [ -d "$LOWER" ] || die "LOWER=LOWPER is not a directory"
+ [ -d "$LIVE" ] || die "LOWER=LOWPER is not a directory"
+ [ -x "${PREMOUNT%% *}" ] || die "PREMOUNT=${PREMOUNT%% *} not executable"
+ [ -f "${PREMOUNT%% *}" ] || die "PREMOUNT='$PREMOUNT' is not a command"
+ [ -x "${POSTMOUNT%% *}" ] || \
+ die "POSTMOUNT=${POSTMOUNT%% *} not executable"
+ [ -f "${POSTMOUNT%% *}" ] || \
+ die "POSTMOUNT='$POSTMOUNT' is not a command"
+
+ # UPPER is the same as LOWER then skip the overlay mount
+ if [ "$UPPER" != "$LOWER" ] ; then
+ # sanity check
+ [ -d "$WORK" ] || die "WORK=$WORK is not a directory"
+
+ env CONFIG="$CONFIG" $PREMOUNT "$UPPER"
+
+ OLY="-olowerdir=$3,upperdir=$UPPER,workdir=$5"
+ if ! mount -t overlay "$OLY" $1 $2 ; then
+ umount -R "$UPPER/dev"
+ umount "$UPPER/run"
+ die "Cannot set up the overlay mount $2"
+ fi
+ elif [ "$LIVE" != "$UPPER" ] ; then
+ # With UPPER = LOWER we rather make a bind mount to LIVE
+ env CONFIG="$CONFIG" $PREMOUNT "$UPPER"
+ mount --bind $UPPER $LIVE