#!/bin/sh
# Install packages, falling through to the next Ubuntu mirror when one is
# unreachable. See docker/Dockerfile.e2e.
set -e

for mirror in azure.archive.ubuntu.com archive.ubuntu.com; do
	for apt_source in /etc/apt/sources.list /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; do
		[ -f "$apt_source" ] || continue
		[ -f "$apt_source.orig" ] || cp "$apt_source" "$apt_source.orig"
		sed -E "s|(https?://)[a-z0-9.]*archive\.ubuntu\.com/ubuntu|\1$mirror/ubuntu|g; s|(https?://)security\.ubuntu\.com/ubuntu|\1$mirror/ubuntu|g" \
			"$apt_source.orig" > "$apt_source"
	done
	if timeout --kill-after=5s 120s apt-get -o Acquire::Retries=1 -o Acquire::http::Timeout=15 -o Acquire::https::Timeout=15 -o APT::Update::Error-Mode=any update && \
		DEBIAN_FRONTEND=noninteractive timeout --kill-after=5s 180s apt-get -o Acquire::Retries=1 -o Acquire::http::Timeout=15 -o Acquire::https::Timeout=15 install -y \
			--no-install-recommends --no-install-suggests "$@"; then
		apt-get clean
		rm -rf /var/lib/apt/lists/*
		exit 0
	fi
	echo "apt: $mirror unreachable, trying the next mirror" >&2
done

exit 1
