_ _
| |_ ___| |_ _
| | . | | | |
|_|_|___|_|_ |
|___|
git mirror - github.com/owenewans/holy - branch master
file tools/image-source-stage.sh
#!/bin/sh
set -eu
test "$#" -eq 4 || exit 2
bin=$1
root=$2
out=$3
inputs=$4
record="$out/build.record"
work="$out/work"
test -f "$inputs/sources.conf" && test -f "$inputs/aliases" || exit 6
cp "$inputs/sources.conf" "$out/inputs/sources.conf"
cp "$inputs/aliases" "$out/inputs/source-aliases"
sha256sum "$out/inputs/sources.conf" "$out/inputs/source-aliases" >> "$record"
"$bin" source plan --config "$out/inputs/sources.conf" --root "$root" > "$out/source.plan"
source_plan=$(sha256sum "$out/source.plan")
source_plan=${source_plan%% *}
printf 'source-plan %s\n' "$source_plan" >> "$record"
"$bin" source apply "$out/source.plan" --sha256 "$source_plan" --root "$root"
"$bin" source list --root "$root" > "$work/source-list"
mkdir "$out/mirrors"
while IFS= read -r alias; do
case "$alias" in ''|*[!a-zA-Z0-9_-]*) exit 2 ;; esac
index=$(cat "$inputs/$alias.index")
case "$index" in *[!0-9a-f]*|'') exit 2 ;; esac
test "${#index}" -eq 64 || exit 2
commit=
if test -f "$inputs/$alias.commit"; then
commit=$(cat "$inputs/$alias.commit")
case "$commit" in *[!0-9a-f]*|'') exit 2 ;; esac
case "${#commit}" in 40|64) ;; *) exit 2 ;; esac
fi
source_id=$(awk -v name="\"$alias\"" \
'$1 == "source" && $3 == name && $4 == "active" {print $2}' "$work/source-list")
test "${#source_id}" -eq 64 || exit 6
if test -f "$inputs/$alias.mirror"; then
mirror=$(cat "$inputs/$alias.mirror")
test "$(cat "$mirror/current")" = "sha256 $index" || exit 4
cp -R "$mirror" "$out/mirrors/$alias"
test "$(cat "$out/mirrors/$alias/current")" = "sha256 $index" || exit 4
printf 'source-mirror %s imported\n' "$alias" >> "$record"
else
set -- "$bin" sync "$alias" --root "$root" --sha256 "$index" \
--output "$out/mirrors/$alias"
if test -n "$commit"; then set -- "$@" --commit "$commit"; fi
if test -f "$inputs/$alias.ca"; then
ca_file=$(cat "$inputs/$alias.ca")
sha256sum "$ca_file" >> "$record"
set -- "$@" --ca-file "$ca_file"
fi
"$@"
printf 'source-mirror %s downloaded\n' "$alias" >> "$record"
fi
if test -f "$inputs/$alias.embed"; then
test "$(cat "$inputs/$alias.embed")" = yes || exit 2
mkdir -p "$root/var/cache/holypkg/image-mirrors"
cp -R "$out/mirrors/$alias" "$root/var/cache/holypkg/image-mirrors/$alias"
"$bin" source catalog bind "$alias" \
"$root/var/cache/holypkg/image-mirrors/$alias" --root "$root"
printf 'source-embedded %s full-catalog\n' "$alias" >> "$record"
fi
printf 'source %s %s index %s\n' "$alias" "$source_id" "$index" >> "$record"
if test -n "$commit"; then printf 'source-commit %s %s\n' "$alias" "$commit" >> "$record"; fi
done < "$out/inputs/source-aliases"