1 # This file implements common functions for all boot methods
8 # grab and set a configuration variable
9 # $1 = variable, [ $2 = default .. error otherwise ]
11 eval $1="$(sed "/^$1=.*/{s|^$1=||;b};d" $CONFIG)"
12 [ -z "$(eval echo "\$$1")" ] || return 0
13 [ $# -lt 2 ] && die "Missing $1=... in $CONFIG"
18 # Unless the subhost already has a private /etc/network/interfaces,
19 # install an "empty" one
21 [ -r $UPPER/etc/network/interfaces ] && return 0
22 [ "$UPPER/etc/network" = "/etc/network" ] && exit 1
23 mkdir -p $UPPER/etc/network
24 cat <<EOF > $UPPER/etc/network/interfaces
25 # Generated for $NAME subhost
27 iface lo inet loopback
32 # Setup the network namespace for the given $CABLES
33 # $1=netns ( $2="br=mac" .. )
35 local NETNS BR IF MAC C i ADD
40 setup_networking || ADD=true
44 [ -z "$MAC" ] || MAC="address $MAC"
45 ip link add $IF type veth peer name eth$i $MAC netns $NETNS
47 $ADD && cat <<EOF >> $UPPER/etc/network/interfaces
50 iface eth$i inet manual
53 [ -z "$BR" ] || brctl addif $BR $IF
58 REAPER=$(dirname $(realpath $0))/reaper
59 # (name live system root work)
60 # Set up an overlay fmr $name on $live, with a new tmpfs on its /run,
61 # and "install" a "reaper" as the upcoming pid 1
66 if grep -q "$1 $2" /proc/mounts ; then
67 die "$1 is already mounted"
72 mount -t tmpfs -osize=100M tmpfs "$ROOT/run"
73 mkdir -p "$ROOT/run/lock"
76 mount -t tmpfs -osize=100M tmpfs "$ROOT/dev"
77 mknod -m 622 "$ROOT/dev/console" c 5 1
78 mknod -m 666 "$ROOT/dev/null" c 1 3
79 mknod -m 666 "$ROOT/dev/zero" c 1 5
80 mknod -m 666 "$ROOT/dev/ptmx" c 5 2
81 mknod -m 666 "$ROOT/dev/tty" c 5 0
82 mknod -m 444 "$ROOT/dev/random" c 1 8
83 mknod -m 444 "$ROOT/dev/urandom" c 1 9
84 chown root:tty "$ROOT/dev/console"
85 chown root:tty "$ROOT/dev/ptmx"
86 chown root:tty "$ROOT/dev/tty"
87 ln -sTf /proc/self/fd "$ROOT/dev/fd"
88 ln -sTf /proc/self/fd/0 "$ROOT/dev/stdin"
89 ln -sTf /proc/self/fd/1 "$ROOT/dev/stdout"
90 ln -sTf /proc/self/fd/2 "$ROOT/dev/stderr"
91 ln -sTf /proc/kcore "$ROOT/dev/core"
94 chmod 1777 "$ROOT/dev/shm"
96 if mount -t overlay -olowerdir=$3,upperdir=$4,workdir=$5 $1 $2 ; then
101 die "Cannot set up the overlay mount $2"
103 cp -p $REAPER $LIVE/.reaper
112 # find the upperdir option for an overlay mount line
114 sed 's/.*upperdir=\([^,]*\).*/\1/'
117 # Check if $1 is "live" and echo the
118 # unshare and reaper process pids
121 local USPID="$(pgrep -f "unshare.* $NAME ")"
122 [ -z "$USPID" ] && return 1
123 echo $USPID $(pgrep -f ".reaper $NAME")