diff --git a/prog/plugin-v2/config.json b/prog/plugin-v2/config.json index ca04a7a8..74601b08 100644 --- a/prog/plugin-v2/config.json +++ b/prog/plugin-v2/config.json @@ -18,9 +18,10 @@ }, "mounts": [ { - "destination": "/procmount", - "type": "proc", - "source": "proc" + "destination": "/host/proc/", + "type": "bind", + "source": "/proc/", + "options": ["rbind", "rw"] }, { "destination": "/var/run/docker.sock", @@ -29,10 +30,42 @@ "options": ["rbind"] }, { - "destination": "/var/lib/weave", - "source": "/var/lib/weave", + "destination": "/host/var/lib/", + "source": "/var/lib/", "type": "bind", "options": ["rbind"] + }, + { + "destination": "/host/etc/", + "source": "/etc/", + "type": "bind", + "options": ["rbind"] + } + ], + "env": [ + { + "description": "Extra args to `weaver` and `plugin`", + "name": "EXTRA_ARGS", + "settable": [ + "value" + ], + "value": "" + }, + { + "description": "Encryption password", + "name": "WEAVE_PASSWORD", + "settable": [ + "value" + ], + "value": "" + }, + { + "description": "MTU", + "name": "WEAVE_MTU", + "settable": [ + "value" + ], + "value": "" } ], "network": { diff --git a/prog/plugin-v2/launch.sh b/prog/plugin-v2/launch.sh index 03bdd08a..c5bfc3b3 100755 --- a/prog/plugin-v2/launch.sh +++ b/prog/plugin-v2/launch.sh @@ -7,17 +7,26 @@ IPALLOC_RANGE=${IPALLOC_RANGE:-10.32.0.0/12} HTTP_ADDR=${WEAVE_HTTP_ADDR:-127.0.0.1:6784} STATUS_ADDR=${WEAVE_STATUS_ADDR:-0.0.0.0:6782} HOST_ROOT=${HOST_ROOT:-/host} -LOG_FILE=/var/lib/weave/weaver.log +WEAVE_DIR="/host/var/lib/weave" +LOG_FILE_WEAVER="$WEAVE_DIR/weaver.log" +LOG_FILE_PLUGIN="$WEAVE_DIR/plugin.log" -echo "Starting launch.sh" >>$LOG_FILE +mkdir $WEAVE_DIR || true + +echo "Starting launch.sh" >>$LOG_FILE_WEAVER # Check if the IP range overlaps anything existing on the host /usr/bin/weaveutil netcheck $IPALLOC_RANGE weave -SWARM_PEERS=$(/usr/bin/weaveutil swarm-manager-peers 2>>$LOG_FILE) -! /usr/bin/weaveutil is-swarm-manager 2>>$LOG_FILE || IS_SWARM_MANAGER=1 +SWARM_PEERS=$(/usr/bin/weaveutil swarm-manager-peers 2>>$LOG_FILE_WEAVER) +! /usr/bin/weaveutil is-swarm-manager 2>>$LOG_FILE_WEAVER || IS_SWARM_MANAGER=1 +# Prevent from restoring from a persisted peers list +rm -f "/restart.sentinel" -/home/weave/weave --local create-bridge --force >>$LOG_FILE 2>&1 +/home/weave/weave --local create-bridge \ + --proc-path=/host/proc \ + --weavedb-dir-path=$WEAVE_DIR \ + --force >>$LOG_FILE_WEAVER 2>&1 BRIDGE_OPTIONS="--datapath=datapath" if [ "$(/home/weave/weave --local bridge-type)" = "bridge" ]; then @@ -44,8 +53,10 @@ fi --ipalloc-range=$IPALLOC_RANGE \ --ipalloc-init $IPALLOC_INIT \ --nickname "$(hostname)" \ + --log-level=debug \ + --db-prefix="$WEAVE_DIR/weave" \ $(echo $SWARM_PEERS | tr '\n' ' ') \ - >>$LOG_FILE 2>&1 & + >>$LOG_FILE_WEAVER 2>&1 & WEAVE_PID=$! # Wait for weave process to become responsive @@ -58,8 +69,9 @@ while true; do sleep 1 done -/home/weave/plugin --meshsocket='' --docker-api='' >/var/lib/weave/plugin.log 2>&1 & +# TODO(mp) docker api? +/home/weave/plugin $EXTRA_ARGS --log-level=debug --meshsocket='' --docker-api='' >>$LOG_FILE_PLUGIN 2>&1 & -echo "End of launch.sh" >>$LOG_FILE +echo "End of launch.sh" >>$LOG_FILE_WEAVER wait $WEAVE_PID diff --git a/weave b/weave index dd12f351..623141ce 100755 --- a/weave +++ b/weave @@ -361,6 +361,7 @@ HTTP_ADDR=${WEAVE_HTTP_ADDR:-127.0.0.1:6784} STATUS_ADDR=${WEAVE_STATUS_ADDR:-127.0.0.1:6782} PROXY_PORT=12375 PROXY_CONTAINER_NAME=weaveproxy +PROC_PATH="/proc" COVERAGE_ARGS="" [ -n "$COVERAGE" ] && COVERAGE_ARGS="-test.coverprofile=/home/weave/cover.prof --" @@ -442,9 +443,9 @@ delete_iptables_rule() { # makes containers react more quickly to a change in the MAC address # associated with an IP address. configure_arp_cache() { - $2 sh -c "echo 5 >/proc/sys/net/ipv4/neigh/$1/base_reachable_time && - echo 2 >/proc/sys/net/ipv4/neigh/$1/delay_first_probe_time && - echo 1 >/proc/sys/net/ipv4/neigh/$1/ucast_solicit" + $2 sh -c "echo 5 >$PROC_PATH/sys/net/ipv4/neigh/$1/base_reachable_time && + echo 2 >$PROC_PATH/sys/net/ipv4/neigh/$1/delay_first_probe_time && + echo 1 >$PROC_PATH/sys/net/ipv4/neigh/$1/ucast_solicit" } # Send out an ARP announcement @@ -725,8 +726,10 @@ init_bridge_prep() { # Running this from 'weave --local' when weaveexec is not on the # path will run it as a Docker container that does not have access # to /etc/machine-id, so will not give the full range of persistent IDs - WEAVEDB_PATH=$(docker inspect -f '{{with index .Mounts 0}}{{.Source}}{{end}}' $DB_CONTAINER_NAME 2>/dev/null) - MAC=$(util_op unique-id "$HOST_ROOT/$WEAVEDB_PATH/weave" "$HOST_ROOT") + if [ -z "$WEAVEDB_DIR_PATH" ]; then + WEAVEDB_DIR_PATH="$HOST_ROOT/$(docker inspect -f '{{with index .Mounts 0}}{{.Source}}{{end}}' $DB_CONTAINER_NAME 2>/dev/null)" + fi + MAC=$(util_op unique-id "$WEAVEDB_DIR_PATH/weave" "$HOST_ROOT") ip link set dev $BRIDGE address $MAC @@ -1698,11 +1701,11 @@ setup_awsvpc() { # Set proxy_arp on the bridge, so that it could accept packets destined # to containers within the same subnet but running on remote hosts. # Without it, exact routes on each container are required. - echo 1 >/proc/sys/net/ipv4/conf/$BRIDGE/proxy_arp + echo 1 >$PROC_PATH/sys/net/ipv4/conf/$BRIDGE/proxy_arp # Avoid delaying the first ARP request. Also, setting it to 0 avoids # placing the request into a bounded queue as it can be seen: # https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/net/ipv4/arp.c?id=refs/tags/v4.6.1#n819 - echo 0 >/proc/sys/net/ipv4/neigh/$BRIDGE/proxy_delay + echo 0 >$PROC_PATH/sys/net/ipv4/neigh/$BRIDGE/proxy_delay expose_ip fi } @@ -1945,6 +1948,22 @@ case "$COMMAND" in # intentionally undocumented since it assumes knowledge of weave # internals create-bridge) + while [ $# -gt 0 ]; do + case "$1" in + --proc-path=*) + PROC_PATH="${1#*=}" + shift + ;; + --weavedb-dir-path=*) + WEAVEDB_DIR_PATH="${1#*=}" + shift + ;; + *) + break + ;; + esac + done + if [ "$1" != "--force" ] ; then cat 1>&2 <