contrib: improve nm-in-container.sh script (7)

This commit is contained in:
Thomas Haller 2021-09-20 19:03:05 +02:00
parent bf6d5f355e
commit 48691a2101
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 69 additions and 19 deletions

View file

@ -9,32 +9,36 @@ die() {
do_cleanup() {
local IDX="$1"
local NAME_PREFIX="${2:-net}"
local PEER_PREFIX="${3:-d_}"
pkill -F "/tmp/nm-dnsmasq-d_$IDX.pid" dnsmasq &>/dev/null || :
rm -rf "/tmp/nm-dnsmasq-d_$IDX.pid"
pkill -F "/tmp/nm-dnsmasq-$PEER_PREFIX$IDX.pid" dnsmasq &>/dev/null || :
rm -rf "/tmp/nm-dnsmasq-$PEER_PREFIX$IDX.pid"
pkill -F "/tmp/nm-radvd-d_$IDX.pid" radvd &>/dev/null || :
rm -rf "/tmp/nm-radvd-d_$IDX.pid"
pkill -F "/tmp/nm-radvd-$PEER_PREFIX$IDX.pid" radvd &>/dev/null || :
rm -rf "/tmp/nm-radvd-$PEER_PREFIX$IDX.pid"
rm -rf "/tmp/nm-radvd-d_$IDX.conf"
rm -rf "/tmp/nm-radvd-$PEER_PREFIX$IDX.conf"
ip link del "d_$IDX" &>/dev/null || :
ip link del "$PEER_PREFIX$IDX" &>/dev/null || :
}
do_setup() {
local IDX="$1"
local NAME_PREFIX="${2:-net}"
local PEER_PREFIX="${3:-d_}"
do_cleanup "$IDX"
ip link add "net$IDX" type veth peer "d_$IDX"
ip link set "d_$IDX" up
ip link add "$NAME_PREFIX$IDX" type veth peer "$PEER_PREFIX$IDX"
ip link set "$PEER_PREFIX$IDX" up
ip addr add "192.168.$((120 + $IDX)).1/23" dev "d_$IDX"
ip addr add "192:168:$((120 + IDX))::1/64" dev "d_$IDX"
ip addr add "192.168.$((120 + $IDX)).1/23" dev "$PEER_PREFIX$IDX"
ip addr add "192:168:$((120 + IDX))::1/64" dev "$PEER_PREFIX$IDX"
dnsmasq \
--conf-file=/dev/null \
--pid-file="/tmp/nm-dnsmasq-d_$IDX.pid" \
--pid-file="/tmp/nm-dnsmasq-$PEER_PREFIX$IDX.pid" \
--no-hosts \
--keep-in-foreground \
--bind-interfaces \
@ -45,8 +49,8 @@ do_setup() {
--no-ping \
&
cat <<EOF > "/tmp/nm-radvd-d_$IDX.conf"
interface d_$IDX
cat <<EOF > "/tmp/nm-radvd-$PEER_PREFIX$IDX.conf"
interface $PEER_PREFIX$IDX
{
AdvSendAdvert on;
prefix 192:168:$((120 + IDX))::/64
@ -57,19 +61,21 @@ interface d_$IDX
};
EOF
radvd \
--config "/tmp/nm-radvd-d_$IDX.conf" \
--pidfile "/tmp/nm-radvd-d_$IDX.pid" \
--config "/tmp/nm-radvd-$PEER_PREFIX$IDX.conf" \
--pidfile "/tmp/nm-radvd-$PEER_PREFIX$IDX.pid" \
&
}
do_redo() {
do_cleanup "$1"
do_setup "$1"
do_cleanup "$@"
do_setup "$@"
}
###############################################################################
IDX=1
NAME_PREFIX=net
PEER_PREFIX=
CMD=redo
for (( i=1 ; i<="$#" ; )) ; do
c="${@:$i:1}"
@ -78,6 +84,16 @@ for (( i=1 ; i<="$#" ; )) ; do
redo|setup|cleanup)
CMD="$c"
;;
--prefix|-p)
NAME_PREFIX="${@:$i:1}"
test -n "$NAME_PREFIX" || die "missing argument to --prefix"
i=$((i+1))
;;
--peer-prefix)
PEER_PREFIX="${@:$i:1}"
test -n "$PEER_PREFIX" || die "missing argument to --peer-prefix"
i=$((i+1))
;;
--idx|-i)
test $i -le "$#" || die "missing argument to --idx"
IDX="${@:$i:1}"
@ -89,4 +105,12 @@ for (( i=1 ; i<="$#" ; )) ; do
esac
done
do_$CMD "$IDX"
if [ -z "$PEER_PREFIX" ]; then
if [ "$NAME_PREFIX" = net ]; then
PEER_PREFIX=d_
else
PEER_PREFIX="d_${NAME_PREFIX}_"
fi
fi
do_$CMD "$IDX" "$NAME_PREFIX" "$PEER_PREFIX"

View file

@ -126,6 +126,12 @@ Clean() {
nm-env-prepare.sh
}
Cat-Timestamp() {
while IFS=$'\n' read line; do
printf "[%s]: %s\n" "$(date '+%s.%N')" "$line"
done
}
nm_run_gdb() {
systemctl stop NetworkManager.service
gdb --args "\${1:-/opt/test/sbin/NetworkManager}" --debug
@ -138,6 +144,7 @@ nm_run_normal() {
. /usr/share/git-core/contrib/completion/git-prompt.sh
PS1="\[\\033[01;36m\]\u@\h\[\\033[00m\]:\\t:\[\\033[01;34m\]\w\\\$(__git_ps1 \\" \[\\033[01;36m\](%s)\[\\033[00m\]\\")\[\\033[00m\]\$ "
export GIT_PS1_SHOWDIRTYSTATE=1
if test "\$SHOW_MOTD" != 0; then
cat /etc/motd
@ -159,18 +166,22 @@ match-device=interface-name:d_*,interface-name:tap*
managed=0
[device-managed-1]
match-device=interface-name:net*
match-device=interface-name:net*,interface-name:eth*
managed=1
EOF
cat <<EOF | tmp_file "$BASEDIR/data-bash_history" 600
NM-log
NM-log /tmp/nm-log.txt
behave -f html --stop ./features/scenarios/vrf.feature
behave -f html --stop -t ipv4_method_static_with_IP ./features/scenarios/ipv4.feature
cd $BASEDIR_NM
journalctl | NM-log
nm-env-prepare.sh
nm-env-prepare.sh --prefix eth -i 4
nm_run_gdb
nm_run_normal
for i in {1..9}; do nm-env-prepare.sh --prefix eth -i \$i; done
systemctl status NetworkManager
systemctl stop NetworkManager
systemctl stop NetworkManager; /opt/test/sbin/NetworkManager --debug 2>&1 | tee -a /tmp/nm-log.txt
@ -183,7 +194,13 @@ set history filename ~/.gdb_history
EOF
cat <<EOF | tmp_file "$BASEDIR/data-gdb_history" 600
run
run --debug 2>&1 | tee /tmp/nm-log.txt
EOF
cat <<EOF | tmp_file "$BASEDIR/data-behaverc" 600
[behave.formatters]
html = behave_html_formatter:HTMLFormatter
EOF
cat <<EOF | tmp_file "$CONTAINERFILE"
@ -197,6 +214,7 @@ RUN dnf install -y \\
NetworkManager \\
audit-libs-devel \\
bash-completion \\
bind-utils \\
bluez-libs-devel \\
cscope \\
dbus-devel \\
@ -234,10 +252,14 @@ RUN dnf install -y \\
ppp \\
ppp-devel \\
procps \\
python3-behave \\
python3-dbus \\
python3-devel \\
python3-gobject \\
python3-pexpect \\
python3-pip \\
python3-pyte \\
python3-pyyaml \\
radvd \\
readline-devel \\
rpm-build \\
@ -253,6 +275,9 @@ RUN dnf install -y \\
RUN dnf debuginfo-install --skip-broken \$(ldd /usr/sbin/NetworkManager | sed -n 's/.* => \\(.*\\) (0x[0-9A-Fa-f]*)$/\1/p' | xargs -n1 readlink -f) -y
RUN pip3 install --user \\
behave_html_formatter
RUN systemctl enable NetworkManager
COPY data-NM-log "/usr/bin/NM-log"
@ -263,6 +288,7 @@ COPY data-90-my.conf /etc/NetworkManager/conf.d/90-my.conf
COPY data-bash_history /root/.bash_history
COPY data-gdbinit /root/.gdbinit
COPY data-gdb_history /root/.gdb_history
COPY data-behaverc /root/.behaverc
# Generate a stable machine id.
RUN echo "10001000100010001000100010001000" > /etc/machine-id