X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=control;h=c2901f17570ac8e1615335fb96033b04c7c0e0f2;hb=e3f61248347065db5f10d6e022b5ec84a2c8992b;hp=b63bc74011edb82a44f6d9a8905b741664ef869c;hpb=becbe6f94ee96021027ed66a09f317e9f1924669;p=rrq%2Fsubhost.git diff --git a/control b/control index b63bc74..c2901f1 100755 --- a/control +++ b/control @@ -29,7 +29,7 @@ usage() { : ${WORK=$TOP/work} : ${MOUNT=$TOP/mnt} : ${NSNAME=$NAME} -: ${BRIDGES=homenet} +: ${BRIDGES=lan_br} : ${CONFIG=$TOP/config} [ -e "$CONFIG" ] && . "$CONFIG" @@ -39,7 +39,7 @@ cd "$SUBHOST" || exit 1 # Create a simple overlay subhost without its own image file create_subhost() { mkdir -p $TARGET $MOUNT $UPPER $WORK - [ -d "$OSROOT" ] || OSROOT=$SUBHOST/daedalus/root + [ -d "$OSROOT" ] || OSROOT=$SUBHOST/chimaera/base [ -e $CONFIG ] || cat < "$CONFIG" # Subhost $NAME is an autogenerated overlay subhost with shared filesystem OSROOT="$OSROOT" @@ -47,10 +47,12 @@ BRIDGES="$BRIDGES" EOF } -# generate a mac for given $1 (interface) using the last 5 characters +# Generate a mac address for given arguments pass through 40-bit b2sum +# and with 02: prefix. macaddr() { - local M="$(xxd -p <<< "${1:$(( ${#1} - 5)):5}")66666666" - echo "0a:${M:0:2}:${M:2:2}:${M:4:2}:${M:6:2}:${M:8:2}" + local V="$(b2sum -l 40 <<< "$*" )" + V="$( sed 's/\(..\)/\1:/g' <<< "${V}aaaaaaaaaa")" + echo "02:${V:0:14}" } # setup the subhost network namespace and link up the host side @@ -58,9 +60,12 @@ setup_network() { E=0 ip netns add $NSNAME for BRIDGE in ${BRIDGES[@]} ; do - brctl show $BRIDGE >& /dev/null || brctl addbr $BRIDGE IF=$NAME$E - MAC=$(macaddr $IF) + B=( ${BRIDGE/:/ } ) + BRIDGE="${B[0]}" + MAC="${B[1]}" + [ -z "$MAC" ] && MAC="$(macaddr "$(hostname)" "$NAME" "$IF")" + brctl show $BRIDGE >& /dev/null || brctl addbr $BRIDGE ip link add $IF type veth peer name eth$E address $MAC netns $NSNAME ip link set $IF up [ -n "$BRIDGE" ] && brctl addif $BRIDGE $IF @@ -78,8 +83,9 @@ setup_rootfs() { if is_mounted $TARGET ; then mount -oremount $TARGET else - if [ -f "$IMAGE" ] ; then - # The subhost has an image file with /root and /work in it + if [ -e "$IMAGE" ] ; then + # $IMAGE is either an image file or a link to a partition, + # with /root and /work in it. is_mounted $MOUNT || mount $IMAGE $MOUNT || exit 1 UPPER=$MOUNT/root WORK=$MOUNT/work @@ -106,7 +112,7 @@ case "$CMD" in exec ip netns exec $NSNAME unshare \ --fork --pid --mount-proc --kill-child \ --uts --ipc --mount --cgroup \ - "--root=$TARGET" $START + chroot $TARGET $START ;; stop) umount $TARGET