diff --git a/contrib/scripts/nm-in-container.d/.gitignore b/contrib/scripts/nm-in-container.d/.gitignore index e7f6952095..047b879b7b 100644 --- a/contrib/scripts/nm-in-container.d/.gitignore +++ b/contrib/scripts/nm-in-container.d/.gitignore @@ -1 +1,3 @@ +/data-NM-log +/data-motd /dockerfile.* diff --git a/contrib/scripts/nm-in-container.d/data-nm-env-prepare.sh b/contrib/scripts/nm-in-container.d/data-nm-env-prepare.sh index c98d2766a1..5769d1b077 100755 --- a/contrib/scripts/nm-in-container.d/data-nm-env-prepare.sh +++ b/contrib/scripts/nm-in-container.d/data-nm-env-prepare.sh @@ -11,7 +11,12 @@ cleanup() { local IDX="$1" pkill -F "/tmp/nm-dnsmasq-d_$IDX.pid" dnsmasq &>/dev/null || : - : > "/tmp/nm-dnsmasq-d_$IDX.pid" + rm -rf "/tmp/nm-dnsmasq-d_$IDX.pid" + + pkill -F "/tmp/nm-radvd-d_$IDX.pid" radvd &>/dev/null || : + rm -rf "/tmp/nm-radvd-d_$IDX.pid" + + rm -rf "/tmp/nm-radvd-d_$IDX.conf" ip link del "d_$IDX" &>/dev/null || : } @@ -25,6 +30,7 @@ setup() { ip link set "d_$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" dnsmasq \ --conf-file=/dev/null \ @@ -38,6 +44,22 @@ setup() { --dhcp-range="192.168.$((120 + $IDX)).100,192.168.$((120 + $IDX)).150" \ --no-ping \ & + + cat < "/tmp/nm-radvd-d_$IDX.conf" +interface d_$IDX +{ + AdvSendAdvert on; + prefix 192:168:$((120 + IDX))::/64 + { + AdvOnLink on; + }; + +}; +EOF + radvd \ + --config "/tmp/nm-radvd-d_$IDX.conf" \ + --pidfile "/tmp/nm-radvd-d_$IDX.pid" \ + & } IDX=1 diff --git a/contrib/scripts/nm-in-container.sh b/contrib/scripts/nm-in-container.sh index def8d950a6..536dffd6c3 100755 --- a/contrib/scripts/nm-in-container.sh +++ b/contrib/scripts/nm-in-container.sh @@ -42,6 +42,7 @@ bind_files() { H=~ for f in ~/.gitconfig* ~/.vim* ; do + test -f "$f" || continue f2="${f#$H/}" [[ "$f2" = .viminf* ]] && continue [[ "$f2" = *.tmp ]] && continue @@ -58,6 +59,22 @@ create_dockerfile() { DOCKERFILE="$1" BASE_IMAGE="$2" + cp "$BASEDIR_NM/contrib/scripts/NM-log" "$BASEDIR/data-NM-log" + CLEANUP_FILES+=( "$BASEDIR/data-NM-log" ) + + cat < "$BASEDIR/data-motd" +*** nm-in-container: + +find NetworkManager bind mounted at $BASEDIR_NM +run \`nm-env-prepare.sh setup --idx 1\` to setup test interfaces + +Configure NetworkManager with + \$ ./configure --enable-maintainer-mode --enable-more-warnings=error --with-more-asserts="\${NM_BUILD_MORE_ASSERTS:-1000}" --with-nm-cloud-setup=yes --prefix=/opt/test --localstatedir=/var --sysconfdir=/etc --enable-gtk-doc --enable-introspection --with-ofono=yes --with-dhclient=yes --with-dhcpcanon=yes --with-dhcpcd=yes --enable-more-logging --enable-compile-warnings=yes --enable-address-sanitizer=no --enable-undefined-sanitizer=no --with-valgrind=yes --enable-concheck --enable-wimax --enable-ifcfg-rh=yes --enable-config-plugin-ibft=yes --enable-ifcfg-suse --enable-ifupdown=yes --enable-ifnet --enable-vala=yes --enable-polkit=yes --with-libnm-glib=yes --with-nmcli=yes --with-nmtui=yes --with-modem-manager-1 --with-suspend-resume=systemd --enable-teamdctl=yes --enable-ovs=yes --enable-tests=${NM_BUILD_TESTS} --with-netconfig=/bin/nowhere/netconfig --with-resolvconf=/bin/nowhere/resolvconf --with-crypto=nss --with-session-tracking=systemd --with-consolekit=yes --with-systemd-logind=yes --with-iwd=yes --enable-json-validation=yes --with-consolekit=yes --with-config-dns-rc-manager-default=auto --with-config-dhcp-default=internal "\${NM_CONFIGURE_OTPS[@]}" +Test with: + \$ systemctl stop NetworkManager; /opt/test/sbin/NetworkManager --debug 2>&1 | tee -a /tmp/nm-log.txt +EOF + CLEANUP_FILES+=( "$BASEDIR/data-motd" ) + cat < "$DOCKERFILE" FROM $BASE_IMAGE @@ -110,6 +127,7 @@ RUN dnf install -y \\ python3-gobject \\ python3-pip \\ python3-pip \\ + radvd \\ readline-devel \\ rpm-build \\ strace \\ @@ -126,21 +144,36 @@ RUN pip install gdbgui RUN systemctl enable NetworkManager RUN dnf clean all +COPY data-NM-log "/usr/bin/NM-log" COPY data-nm-env-prepare.sh "/usr/bin/nm-env-prepare.sh" +COPY data-motd /etc/motd RUN sed 's/.*RateLimitBurst=.*/RateLimitBurst=0/' /etc/systemd/journald.conf -i RUN echo -e '[logging]\nlevel=TRACE\ndomains=ALL,VPN_PLUGIN:TRACE\n' >> /etc/NetworkManager/conf.d/90-my.conf +RUN echo -e '[main]\nno-auto-default=*\ndebug=RLIMIT_CORE,fatal-warnings\n' >> /etc/NetworkManager/conf.d/90-my.conf RUN echo -e '[device-veths-1]\nmatch-device=interface-name:d_*\nmanaged=0\n' >> /etc/NetworkManager/conf.d/90-my.conf RUN echo -e '[device-veths-2]\nmatch-device=interface-name:net*\nmanaged=1\n' >> /etc/NetworkManager/conf.d/90-my.conf RUN rm -rf /etc/NetworkManager/system-connections/* +RUN echo 'cd $BASEDIR_NM' >> /root/.bash_history +RUN echo 'nm-env-prepare.sh setup --idx 1' >> /root/.bash_history +RUN echo 'systemctl stop NetworkManager; /opt/test/sbin/NetworkManager --debug 2>&1 | tee -a /tmp/nm-log.txt' >> /root/.bash_history +RUN echo 'NM-log' >> /root/.bash_history +RUN echo 'NM-log /tmp/nm-log.txt' >> /root/.bash_history +RUN chmod 600 /root/.bash_history + RUN echo 'alias m="make -j 8"' >> /etc/bashrc.my RUN echo 'alias n="ninja -C build"' >> /etc/bashrc.my RUN echo '' >> /etc/bashrc.my RUN echo '. /usr/share/git-core/contrib/completion/git-prompt.sh' >> /etc/bashrc.my RUN echo 'PS1="\[\\033[01;36m\]\u@\h\[\\033[00m\]:\\t:\[\\033[01;34m\]\w\\\$(__git_ps1 \\" \[\\033[01;36m\](%s)\[\\033[00m\]\\")\[\\033[00m\]\$ "' >> /etc/bashrc.my +RUN echo '' >> /etc/bashrc.my +RUN echo 'if test "\$SHOW_MOTD" != 0; then' >> /etc/bashrc.my +RUN echo ' cat /etc/motd' >> /etc/bashrc.my +RUN echo ' export SHOW_MOTD=0' >> /etc/bashrc.my +RUN echo 'fi' >> /etc/bashrc.my RUN echo -e '\n. /etc/bashrc.my\n' >> /etc/bashrc EOF @@ -207,7 +240,7 @@ do_run() { do_exec() { do_run - podman exec -it "$CONTAINER_NAME_NAME" /bin/bash -c "cd \"$BASEDIR_NM\"; exec /bin/bash" + podman exec --workdir "$BASEDIR_NM" -it "$CONTAINER_NAME_NAME" bash } ###############################################################################