|
|
@ -50,57 +50,86 @@ auto eth$i |
|
|
|
iface eth$i inet manual |
|
|
|
EOF |
|
|
|
BR="${C%=*}" |
|
|
|
[ -z "$BR" ] || brctl addif $BR $IF |
|
|
|
if [ -z "$BR" ] ; then |
|
|
|
ip link set $IF |
|
|
|
ifup $IF |
|
|
|
else |
|
|
|
brctl addif $BR $IF |
|
|
|
fi |
|
|
|
i=$((i+1)) |
|
|
|
done |
|
|
|
} |
|
|
|
|
|
|
|
REAPER=$(dirname $(realpath $0))/reaper |
|
|
|
# (name live system root work) |
|
|
|
# Set up an overlay fmr $name on $live, with a new tmpfs on its /run, |
|
|
|
# and "install" a "reaper" as the upcoming pid 1 |
|
|
|
setup_overlay() { |
|
|
|
local ROOT="$4" |
|
|
|
local LIVE="$2" |
|
|
|
local LIVE="$2" LOWER="$3" UPPER="$4" ROOT |
|
|
|
|
|
|
|
if grep -q "$1 $2" /proc/mounts ; then |
|
|
|
die "$1 is already mounted" |
|
|
|
fi |
|
|
|
|
|
|
|
# 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" |
|
|
|
|
|
|
|
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" |
|
|
|
OLY="-olowerdir=$3,upperdir=$UPPER,workdir=$5" |
|
|
|
if mount -t overlay "$OLY" $1 $2 ; then |
|
|
|
: # all good |
|
|
|
else |
|
|
|
umount -R "$UPPER/dev" |
|
|
|
umount "$UPPER/run" |
|
|
|
die "Cannot set up the overlay mount $2" |
|
|
|
fi |
|
|
|
fi |
|
|
|
cp -p $REAPER $LIVE/.reaper |
|
|
|
|
|
|
|
echo "Installing $OVERLAYDIR/reaper to $LIVE/.reaper" |
|
|
|
cp -p $OVERLAYDIR/reaper $LIVE/.reaper |
|
|
|
} |
|
|
|
|
|
|
|
start_services() { |
|
|
|