podman/tests/roles/disable_systemd_resolved/files/disable_systemd_resolved.sh
Ed Santiago a37af540a5 Disable systemd resolved
Fixes flake: 'dial tcp: lookup cdn03.quay.io: no such host'

Okay, doesn't actually fix as in _fix_, just fix as in "sweep it
under the rug". The actual bug is in systemd-resolved, or in the
quay.io/cloudflare.net DNS nameservers, or in the weird specific
setup for cdn03 (it's a CNAME, compared to cdn01/02 which are A).
Maybe a combination of all of the above. I don't care; I just
want the flakes gone. I realize that this makes our testing
environment different from default Fedora, and am okay with
that because I suspect many Fedora users disable systemd-resolved
as SOP.

Signed-off-by: Ed Santiago <santiago@redhat.com>
2023-05-08 10:05:42 -06:00

42 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
#
# Excerpted from https://github.com/containers/automation_images/blob/main/systemd_banish.sh
#
# Early 2023: https://github.com/containers/podman/issues/16973
#
# We see countless instances of "lookup cdn03.quay.io" flakes.
# Disabling the systemd resolver has completely resolved those,
# from multiple flakes per day to zero in a month.
#
# Opinions differ on the merits of systemd-resolve, but the fact is
# it breaks our CI testing. Kill it.
nsswitch=/etc/authselect/nsswitch.conf
if [[ -e $nsswitch ]]; then
if grep -q -E 'hosts:.*resolve' $nsswitch; then
echo "Disabling systemd-resolved"
sed -i -e 's/^\(hosts: *\).*/\1files dns myhostname/' $nsswitch
systemctl disable --now systemd-resolved
rm -f /etc/resolv.conf
# NetworkManager may already be running, or it may not....
systemctl start NetworkManager
sleep 1
systemctl restart NetworkManager
# ...and it may create resolv.conf upon start/restart, or it
# may not. Keep restarting until it does. (Yes, I realize
# this is cargocult thinking. Don't care. Not worth the effort
# to diagnose and solve properly.)
retries=10
while ! test -e /etc/resolv.conf;do
retries=$((retries - 1))
if [[ $retries -eq 0 ]]; then
echo "Timed out waiting for resolv.conf" >&2
echo "...gonna try continuing. Expect failures." >&2
fi
systemctl restart NetworkManager
sleep 5
done
fi
fi