diff --git a/docker/Dockerfile b/docker/Dockerfile index 9dc8d2b..382b4b1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -9,7 +9,7 @@ ARG VPP_INSTALL_SKIP_SYSCTL=true ARG REPO=release EXPOSE 22/tcp RUN apt-get update && apt-get -y install curl procps tcpdump iproute2 iptables \ - iputils-ping net-tools git python3 python3-pip vim-tiny openssh-server \ + iputils-ping net-tools git python3 python3-pip vim-tiny nano joe openssh-server \ mtr-tiny traceroute rsync && apt-get clean # Install VPP - sideload from local debs if --build-context vppdebs= is provided, diff --git a/docker/files/init-container.sh b/docker/files/init-container.sh index 250cb11..73d2c3c 100755 --- a/docker/files/init-container.sh +++ b/docker/files/init-container.sh @@ -1,12 +1,14 @@ #!/usr/bin/env bash STARTUP_CONFIG=${STARTUP_CONFIG:="/config/vpp/startup.conf"} -VPPCFG_YAML_FILE=${VPPCFG_YAML_FILE:=/config/vpp/vppcfg.yaml} -VPPCFG_VPP_FILE=${VPPCFG_VPP_FILE:=/config/vpp/config/vppcfg.vpp} -CLAB_VPP_FILE=${CLAB_VPP_FILE:=/config/vpp/config/clab.vpp} +VPPCFG_YAML_FILE=${VPPCFG_YAML_FILE:="/config/vpp/vppcfg.yaml"} +VPPCFG_VPP_FILE=${VPPCFG_VPP_FILE:="/config/vpp/config/vppcfg.vpp"} +CLAB_VPP_FILE=${CLAB_VPP_FILE:="/config/vpp/config/clab.vpp"} NETNS=${NETNS:="dataplane"} BIRD_ENABLED=${BIRD_ENABLED:="true"} +BIRD_CONFIG=${BIRD_CONFIG:="/config/bird/bird.conf"} FRR_ENABLED=${FRR_ENABLED:="false"} +FRR_CONFIG=${FRR_CONFIG:="/config/frr/frr.conf"} echo "Creating dataplane namespace" /usr/bin/mkdir -p /etc/netns/$NETNS @@ -19,26 +21,40 @@ sed -i -e 's,^#PermitRootLogin prohibit-password,PermitRootLogin yes,' /etc/ssh/ sed -i -e 's,^root:.*,root:$y$j9T$kG8pyZEVmwLXEtXekQCRK.$9iJxq/bEx5buni1hrC8VmvkDHRy7ZMsw9wYvwrzexID:20211::::::,' /etc/shadow /etc/init.d/ssh start -echo "Initializing /config" -for dir in vpp bird frr; do - rsync -av --ignore-existing /etc/$dir/ /config/$dir/ - rm -rf /etc/$dir/ - ln -s /config/$dir /etc/$dir -done +# TODO(pim): Remove this after containerlab 0.75 is released +if [ -r /etc/vpp/startup.conf ]; then + echo "Detected old containerlab binary - invoking backwards compatible behavior" + STARTUP_CONFIG="/etc/vpp/startup.conf" + VPPCFG_YAML_FILE="/etc/vpp/vppcfg.yaml" + VPPCFG_VPP_FILE="/config/vpp/config/vppcfg.vpp" + CLAB_VPP_FILE="/config/vpp/config/clab.vpp" + BIRD_CONFIG="/etc/bird/bird.conf" + FFR_CONFIG="/etc/frr/frr.conf" + mkdir -p /config/vpp/config/ + echo "comment { please upgrade to containerlab 0.75+ }" > /config/vpp/config/manual-pre.vpp + echo "comment { please upgrade to containerlab 0.75+ }" > /config/vpp/config/manual-post.vpp +else + echo "Initializing /config" + for dir in vpp bird frr; do + rsync -av --ignore-existing /etc/$dir/ /config/$dir/ + rm -rf /etc/$dir/ + ln -s /config/$dir /etc/$dir + done +fi if [ "$BIRD_ENABLED" == "true" ]; then echo "Starting Bird in $NETNS" mkdir -p /run/bird /var/log/bird chown bird:bird /var/log/bird ROUTERID=$(ip -br a show eth0 | awk '{ print $3 }' | cut -f1 -d/) - sed -i -e "s,.*router id .*,router id $ROUTERID; # Set by container-init.sh," /config/bird/bird.conf - /usr/bin/nsenter --net=/run/netns/$NETNS /usr/sbin/bird -u bird -g vpp -c /config/bird/bird.conf + sed -i -e "s,.*router id .*,router id $ROUTERID; # Set by container-init.sh," $BIRD_CONFIG + /usr/bin/nsenter --net=/run/netns/$NETNS /usr/sbin/bird -u bird -g vpp -c $BIRD_CONFIG fi if [ "$FRR_ENABLED" == "true" ]; then echo "Starting FRRouting in $NETNS" ROUTERID=$(ip -br a show eth0 | awk '{ print $3 }' | cut -f1 -d/) - sed -i -e "s,^ip router-id .*,ip router-id $ROUTERID," /config/frr/frr.conf + sed -i -e "s,^ip router-id .*,ip router-id $ROUTERID," $FRR_CONFIG /etc/init.d/frr start fi @@ -58,10 +74,15 @@ set interface state $IFNAME up EOF done -echo "Generating $VPPCFG_YAML_FILE into $VPPCFG_VPP_FILE" -: > $VPPCFG_VPP_FILE -if [ -r $VPPCFG_YAML_FILE ]; then - vppcfg plan --novpp -c $VPPCFG_YAML_FILE -o $VPPCFG_VPP_FILE +if [ -s $VPPCFG_YAML_FILE ]; then + echo "Generating $VPPCFG_YAML_FILE into $VPPCFG_VPP_FILE" + : > $VPPCFG_VPP_FILE + if [ -r $VPPCFG_YAML_FILE ]; then + vppcfg plan --novpp -c $VPPCFG_YAML_FILE -o $VPPCFG_VPP_FILE + fi +else + echo "Generating empty $VPPCFG_VPP_FILE due to missing or empty $VPPCFG_YAML_FILE" + echo "comment { please provide a vppcfg.yaml file }" > $VPPCFG_VPP_FILE fi echo "Starting VPP"