its-ap-builder/build-image.sh

97 lines
2.7 KiB
Bash
Executable File

#!/bin/sh
set -e
[ $# -ge 1 ] || exit 1
CONTROL="$1"; shift
IMAGEBUILDER_URL=${IMAGEBUILDER_URL:-https://downloads.openwrt.org/snapshots/targets/ath79/generic/openwrt-imagebuilder-ath79-generic.Linux-x86_64.tar.xz}
TOPDIR="$PWD"
DLDIR=${DLDIR:-"dl"}
BUILDDIR=${BUILDDIR:-"build"}
IMAGESDIR=${IMAGEDIR:-"images"}
mkdir -p "$DLDIR"
mkdir -p "$BUILDDIR"; rm -rf "$BUILDDIR"/*
mkdir -p "$IMAGESDIR"
VERSION="$(basename "$(git describe --always --tags --dirty --match 'access-points/*')")"
IMAGEDIR="$IMAGESDIR"/"$VERSION"
mkdir -p "$IMAGEDIR"
imagebuilder="$(basename "$IMAGEBUILDER_URL")"
checksums_url="$(dirname "$IMAGEBUILDER_URL")/sha256sums"
trustedkeys=$PWD/keys/trustedkeys.kbx
(
cd "$DLDIR"
wget --continue "$IMAGEBUILDER_URL" -O "$imagebuilder"
wget "${checksums_url}" -O "${imagebuilder}.sha256sums"
wget "${checksums_url}.asc" -O "${imagebuilder}.sha256sums.asc"
gpgv --keyring="$trustedkeys" \
"${imagebuilder}.sha256sums.asc" "${imagebuilder}.sha256sums" \
|| exit 42
sha256sum --ignore-missing --check ${imagebuilder}.sha256sums || exit 43
) || exit 50
tar -C "$BUILDDIR" -axf "$DLDIR"/"$imagebuilder"
IMAGEBUILDER_DIR="$BUILDDIR"/"$(tar -atf "$DLDIR"/"$imagebuilder" | head -n1)"
# source control file and extract variables
profile=$(. "$CONTROL"; echo "${PROFILE}")
target=$(. "$CONTROL"; echo "${TARGET}")
subtarget=$(. "$CONTROL"; echo "${SUBTARGET}")
(
# `make` below consumes these
export PROFILE PACKAGES
. "$CONTROL"
tmp="$(mktemp --tmpdir -d files.XXXXXXXXX)"
mkdir -p "$tmp"/etc
mkdir -p "$tmp"/etc/its-access-point/
printf '%s\n' "$VERSION" > "$tmp"/etc/its-access-point/version
printf '%s\n' "$IMAGEBUILDER_URL" \
> "$tmp"/etc/its-access-point/imagebuilder-url
sha512sum "$DLDIR/$imagebuilder" \
> "$tmp"/etc/its-access-point/imagebuilder-hash
cat "$CONTROL" > "$tmp"/etc/its-access-point/control
if [ -n "$COMMON_FILES" ]; then
cp -aLTv "$TOPDIR/$COMMON_FILES" "$tmp"
fi
if [ -n "$FILES" ]; then
cp -aLTv "$TOPDIR/$FILES" "$tmp"
fi
cd "$IMAGEBUILDER_DIR"
unset COMMON_FILES
make image FILES="$tmp" 1>&2
)
cp "$IMAGEBUILDER_DIR"/bin/targets/ath79/"${subtarget}"/openwrt*-"${target}-${subtarget}-${profile}"-squashfs-sysupgrade.bin "$IMAGEDIR"/
ln -snf "$VERSION" images/latest
{
printf '%s\n' "Date: $(date -R)"
printf '%s\n' "Image-Builder: $IMAGEBUILDER_URL"
printf '%s\n'
printf 'Checksums-Sha512:\n'
{
( cd "$DLDIR" ; sha512sum "$imagebuilder" )
( cd "$IMAGEDIR"; sha512sum openwrt*-"${target}-${subtarget}-${profile}"-squashfs-sysupgrade.bin )
} | sed 's/^/ /'
} > "$IMAGEDIR"/"${profile}".image-manifest
echo
echo
echo "Wrote images to $IMAGEDIR"
echo