diff --git a/.cirrus.yml b/.cirrus.yml index 45c1098..67b85e6 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -24,7 +24,7 @@ shell_lint_task: - apt-get -y install shellcheck - apt-get -y clean check_script: - - shellcheck sysa/run.sh sysb/init sysb/run.sh sysc/init sysc/run.sh sysc/run2.sh sysa/helpers.sh + - shellcheck sysa/run.sh sysb/init sysb/run.sh sysc/init sysc/run.sh sysc/run2.sh sysa/helpers.sh download-distfiles.sh reuse_lint_task: container: diff --git a/README.rst b/README.rst index 36c47d4..39cf501 100644 --- a/README.rst +++ b/README.rst @@ -167,6 +167,7 @@ repository is almost completely in a form where it can be used as the source of a build. 1. Download required tarballs into ``sysa/distfiles`` and ``sysc/distfiles``. + You can use the ``download-distfiles.sh`` script. 2. Copy sysa/stage0-posix/src/* to the root of the repository. 3. Copy sysa/stage0-posix/src/bootstrap-seeds/POSIX/x86/kaem-optional-seed to init in the root of the repository. diff --git a/download-distfiles.sh b/download-distfiles.sh new file mode 100755 index 0000000..2877cfd --- /dev/null +++ b/download-distfiles.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +# SPDX-FileCopyrightText: 2022 fosslinux +# +# SPDX-License-Identifier: GPL-3.0-or-later + +download_source() { + local distfiles="${1}" + local url="${2}" + local checksum="${3}" + local fname="${4}" + # Default to basename of url if not given + fname="${fname:-$(basename "${url}")}" + + local dest_path="${distfiles}/${fname}" + if ! [ -e "${dest_path}" ]; then + echo "Downloading ${fname}" + curl -L "${url}" --output "${dest_path}" + fi + echo "${checksum} ${dest_path}" | sha256sum -c +} + +download_for_sys() { + local sysdir="${1}" + local distfiles="${sysdir}/distfiles" + + mkdir -p "${distfiles}" + + local entry + for entry in "${sysdir}"/*; do + [ -e "${entry}/sources" ] || continue + + local line + # 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 +} + +set -e +cd "$(dirname "$(readlink -f "$0")")" +download_for_sys sysa +download_for_sys sysc diff --git a/sysa/helpers.sh b/sysa/helpers.sh index a012129..150dd7d 100755 --- a/sysa/helpers.sh +++ b/sysa/helpers.sh @@ -131,7 +131,7 @@ build() { script_name=${2:-${pkg}.sh} dirname=${4:-${pkg}} - # shellcheck ignore=SC2015 + # shellcheck disable=SC2015 bin_preseed && return || true # Normal build if preseed fails cd "${SOURCES}/${pkg}" || (echo "Cannot cd into ${pkg}!"; kill $$)