mirror of
https://github.com/fosslinux/live-bootstrap.git
synced 2026-03-02 01:18:08 +01:00
Spawns a simple HTTP server to host the mirror. Useful for testing mirror support or CI in chroot or bwrap modes.
84 lines
2.2 KiB
Bash
Executable file
84 lines
2.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# SPDX-FileCopyrightText: 2022 fosslinux <fosslinux@aussies.space>
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
# Optional arguments: Mirrors
|
|
|
|
download_source() {
|
|
local distfiles="${1}"
|
|
local url="${2}"
|
|
shift 2
|
|
if [[ "${url}" == git://* ]]; then
|
|
url="${1}"
|
|
shift
|
|
fi
|
|
local checksum="${1}"
|
|
local fname="${2}"
|
|
# Default to basename of url if not given
|
|
fname="${fname:-$(basename "${url}")}"
|
|
if [ "${fname}" = "_" ]; then
|
|
echo "ERROR: ${url} must have a filename specified"
|
|
exit 1
|
|
fi
|
|
|
|
local dest_path="${distfiles}/${fname}"
|
|
if ! [ -e "${dest_path}" ]; then
|
|
echo "Downloading ${fname}"
|
|
if [ "${mirrors_len}" -ne 0 ]; then
|
|
local mirror_ix="$((RANDOM % mirrors_len))"
|
|
url="${mirrors[${mirror_ix}]}/${fname}"
|
|
fi
|
|
curl --fail --location "${url}" --output "${dest_path}" || true
|
|
fi
|
|
}
|
|
|
|
check_source() {
|
|
local distfiles="${1}"
|
|
local url="${2}"
|
|
shift 2
|
|
if [[ "${url}" == git://* ]]; then
|
|
url="${1}"
|
|
shift
|
|
fi
|
|
local checksum="${1}"
|
|
local fname="${2}"
|
|
# Default to basename of url if not given
|
|
fname="${fname:-$(basename "${url}")}"
|
|
|
|
local dest_path="${distfiles}/${fname}"
|
|
echo "${checksum} ${dest_path}" | sha256sum -c
|
|
}
|
|
|
|
set -e
|
|
|
|
mirrors=( "$@" )
|
|
mirrors_len="$#"
|
|
|
|
cd "$(dirname "$(readlink -f "$0")")"
|
|
mkdir -p distfiles
|
|
|
|
# First, try to download anything missing - ignore failing mirrors
|
|
for entry in steps/*; do
|
|
[ -e "${entry}/sources" ] || continue
|
|
|
|
# shellcheck disable=SC2162
|
|
while read line; do
|
|
# This is intentional - we want to split out ${line} into separate arguments.
|
|
# shellcheck disable=SC2086
|
|
download_source distfiles ${line}
|
|
done < "${entry}/sources"
|
|
done
|
|
|
|
# Then, check if everything has been obtained at least once
|
|
for entry in steps/*; do
|
|
[ -e "${entry}/sources" ] || continue
|
|
|
|
# shellcheck disable=SC2162
|
|
while read line; do
|
|
# This is intentional - we want to split out ${line} into separate arguments.
|
|
# shellcheck disable=SC2086
|
|
check_source distfiles ${line}
|
|
done < "${entry}/sources"
|
|
done
|