64 lines
2.8 KiB
Bash
64 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
|||
|
|
set -Eeuo pipefail
|
||
|
|
|
||
|
|
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
|
||
|
|
PROJECT_DIR=$(cd -- "$SCRIPT_DIR/.." && pwd -P)
|
||
|
|
DEPENDENCY_ARCHIVES="$PROJECT_DIR/work/apt/archives"
|
||
|
|
MEDIA_DEB="$PROJECT_DIR/media/out/rk1-media-stack_20260721.1741+rk1.1_arm64.deb"
|
||
|
|
[[ -d "$DEPENDENCY_ARCHIVES" ]] || { echo "Missing APT archives: $DEPENDENCY_ARCHIVES" >&2; exit 1; }
|
||
|
|
[[ -f "$MEDIA_DEB" ]] || { echo "Missing media package: $MEDIA_DEB" >&2; exit 1; }
|
||
|
|
|
||
|
|
TEST_TMP=$(mktemp -d "$PROJECT_DIR/work/rk1-offline-apt.XXXXXXXX")
|
||
|
|
trap 'rm -rf -- "$TEST_TMP"' EXIT
|
||
|
|
SEED_ARCHIVES="$TEST_TMP/opt/rk1-seed/debs"
|
||
|
|
mkdir -p "$SEED_ARCHIVES/partial" "$TEST_TMP/state"
|
||
|
|
|
||
|
|
# Hard links keep this acquisition regression test fast while presenting APT
|
||
|
|
# with the exact single-directory cache layout used in the finished image.
|
||
|
|
while IFS= read -r -d '' source_deb; do
|
||
|
|
ln -- "$source_deb" "$SEED_ARCHIVES/$(basename -- "$source_deb")"
|
||
|
|
done < <(find "$DEPENDENCY_ARCHIVES" -maxdepth 1 -type f -name '*.deb' -print0 | sort -z)
|
||
|
|
ln -- "$MEDIA_DEB" "$SEED_ARCHIVES/$(basename -- "$MEDIA_DEB")"
|
||
|
|
mapfile -d '' debs < <(find "$SEED_ARCHIVES" -maxdepth 1 -type f -name '*.deb' -print0 | sort -z)
|
||
|
|
[[ "${#debs[@]}" == 141 ]]
|
||
|
|
|
||
|
|
apt_options=(
|
||
|
|
-o APT::Architecture=arm64
|
||
|
|
-o Dir::State::status="$PROJECT_DIR/work/base-meta/status"
|
||
|
|
-o Dir::State::lists="$PROJECT_DIR/work/apt/lists"
|
||
|
|
-o Dir::State::extended_states="$TEST_TMP/state/extended_states"
|
||
|
|
-o Dir::Cache::archives="$SEED_ARCHIVES"
|
||
|
|
-o Dir::Cache::pkgcache="$TEST_TMP/pkgcache.bin"
|
||
|
|
-o Dir::Cache::srcpkgcache="$TEST_TMP/srcpkgcache.bin"
|
||
|
|
-o Dir::Etc::sourcelist="$PROJECT_DIR/work/base-meta/debian-build.sources"
|
||
|
|
-o Dir::Etc::sourceparts=-
|
||
|
|
-o Debug::NoLocking=true
|
||
|
|
-o APT::Sandbox::User=
|
||
|
|
-o APT::Keep-Downloaded-Packages=true
|
||
|
|
)
|
||
|
|
|
||
|
|
simulation_log="$TEST_TMP/simulation.log"
|
||
|
|
apt-get "${apt_options[@]}" --simulate --no-download --no-install-recommends \
|
||
|
|
install "${debs[@]}" >"$simulation_log"
|
||
|
|
grep -q '^0 upgraded, 141 newly installed, 0 to remove' "$simulation_log"
|
||
|
|
[[ "$(grep -c '^Inst ' "$simulation_log")" == 141 ]]
|
||
|
|
[[ "$(grep -c '^Conf ' "$simulation_log")" == 141 ]]
|
||
|
|
|
||
|
|
(
|
||
|
|
cd "$SEED_ARCHIVES"
|
||
|
|
sha256sum -- *.deb >"$TEST_TMP/debs.before.sha256"
|
||
|
|
)
|
||
|
|
acquisition_log="$TEST_TMP/acquisition.log"
|
||
|
|
apt-get "${apt_options[@]}" --download-only --no-download \
|
||
|
|
--no-install-recommends --yes install "${debs[@]}" >"$acquisition_log"
|
||
|
|
grep -q '^0 upgraded, 141 newly installed, 0 to remove' "$acquisition_log"
|
||
|
|
grep -Eq '^Download complete( and in download only mode)?$' "$acquisition_log"
|
||
|
|
! grep -q '^Need to get ' "$acquisition_log"
|
||
|
|
(
|
||
|
|
cd "$SEED_ARCHIVES"
|
||
|
|
sha256sum -- *.deb >"$TEST_TMP/debs.after.sha256"
|
||
|
|
)
|
||
|
|
cmp --silent "$TEST_TMP/debs.before.sha256" "$TEST_TMP/debs.after.sha256"
|
||
|
|
|
||
|
|
echo 'PASS: offline APT closure and real acquisition (141 packages, zero downloads)'
|