test-install: Wait for network in the lxc container.

Ubuntu 20.04 "focal" comes up to runlevel 5 several seconds before it
is able to successfully resolve hosts, causing `prepare-base` to fail
while fetching from the apt repositories.

Add an additional check to verify that outbound networking is running
before returning from `lxc-wait`.
This commit is contained in:
Alex Vandiver 2020-06-23 19:32:00 +00:00 committed by Tim Abbott
parent fc31eaa356
commit e0b725be63
1 changed files with 32 additions and 12 deletions

View File

@ -27,16 +27,36 @@ if [ "$EUID" -ne 0 ]; then
fi fi
# We poll. # We poll.
for _ in {1..60}; do poll_runlevel() {
echo "lxc-wait: $CONTAINER_NAME: polling for boot..." >&2 for _ in {1..60}; do
runlevel="$(lxc-attach --clear-env -n "$CONTAINER_NAME" -- runlevel 2>/dev/null)" \ echo "lxc-wait: $CONTAINER_NAME: polling for boot..." >&2
|| { sleep 1; continue; } runlevel="$(lxc-attach --clear-env -n "$CONTAINER_NAME" -- runlevel 2>/dev/null)" \
if [ "$runlevel" != "${0%[0-9]}" ]; then || { sleep 1; continue; }
echo "lxc-wait: $CONTAINER_NAME: booted!" >&2 if [ "$runlevel" != "${0%[0-9]}" ]; then
exit 0 echo "lxc-wait: $CONTAINER_NAME: booted!" >&2
fi poll_network
sleep 1 fi
done sleep 1
done
echo "error: timeout waiting for container to boot" >&2
exit 1
}
poll_network() {
for _ in {1..60}; do
echo "lxc-wait: $CONTAINER_NAME: polling for network..." >&2
# New hosts don't have `host` or `nslookup`
lxc-attach --clear-env -n "$CONTAINER_NAME" -- \
ping -q -c 1 archive.ubuntu.com 2>/dev/null >/dev/null \
|| { sleep 1; continue; }
echo "lxc-wait: $CONTAINER_NAME: network is up!" >&2
exit 0
done
echo "error: timeout waiting for container to get network" >&2
exit 1
}
poll_runlevel
echo "error: timeout waiting for container to boot" >&2
exit 1