From 040eecca0900d0b437dfee16ef02747347dcf259 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Sun, 24 May 2026 21:27:07 -0400 Subject: [PATCH] Build script compresses the image and generates the sha1sum now. --- pi4/build/build-stormux.sh | 68 +++++++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/pi4/build/build-stormux.sh b/pi4/build/build-stormux.sh index 48ca0c3..8ec8cbf 100755 --- a/pi4/build/build-stormux.sh +++ b/pi4/build/build-stormux.sh @@ -24,18 +24,52 @@ mounted=1 set -e # Don't want to destroy stuff if this goes majorly wrong. trap cleanup EXIT # make sure the script cleans up after itself before closing. +# shellcheck disable=SC2329 # verify_image is invoked from cleanup, which is invoked via trap EXIT +verify_image() { + echo "Checking completed image filesystems..." + fsck.vfat -n "${loopdev}p1" + e2fsck -fn "${loopdev}p2" +} + +# shellcheck disable=SC2329 # compress_image is invoked from cleanup, which is invoked via trap EXIT +compress_image() { + local compressedImage="${imageName}.xz" + + if [[ ! -s "${imageName}" ]]; then + echo "Image file ${imageName} was not created or is empty." + return 1 + fi + + echo "Compressing ${imageName} to ${compressedImage}..." + xz -T0 -9 "${imageName}" + echo "Creating SHA-256 checksum for ${compressedImage}..." + sha1sum "${compressedImage}" > "${compressedImage}.sha1sum" + echo "Image build complete: ${compressedImage}" + echo "Checksum: ${compressedImage}.sha1sum" +} # shellcheck disable=SC2329 # cleanup is invoked via trap EXIT cleanup() { status=$? # capture original exit status so failures propagate + cleanupStatus=0 if [[ $mounted -eq 0 ]]; then - umount -R /mnt || true + if ! umount -R /mnt; then + cleanupStatus=1 + elif [[ $status -eq 0 ]]; then + if ! verify_image; then + cleanupStatus=1 + fi + fi fi if [[ -n "${loopdev:-}" ]]; then - partx -d "${loopdev}" || true - losetup --detach "${loopdev}" || true + if ! partx -d "${loopdev}"; then + cleanupStatus=1 + fi + if ! losetup --detach "${loopdev}"; then + cleanupStatus=1 + fi fi # Clean up temporary pacman config directory @@ -43,6 +77,15 @@ cleanup() { rm -rf "${tmpDir}" fi + if [[ $status -eq 0 && $cleanupStatus -eq 0 ]]; then + if ! compress_image; then + status=1 + fi + elif [[ $status -eq 0 ]]; then + echo "Image build commands completed, but cleanup or filesystem verification failed." + status=1 + fi + exit "$status" } @@ -100,6 +143,12 @@ if [[ -e "$imageName" ]]; then echo "${imageName} exists, please remove or move it for this script to continue." exit 1 fi +for outputFile in "${imageName}.xz" "${imageName}.xz.sha256sum"; do + if [[ -e "$outputFile" ]]; then + echo "${outputFile} exists, please remove or move it for this script to continue." + exit 1 + fi +done # Make sure this script is ran as root. if [ "$(whoami)" != "root" ] ; then @@ -124,6 +173,12 @@ for i in arch-install-scripts dosfstools parted ; do exit 1 fi done +for i in e2fsck fsck.vfat sha256sum xz ; do + if ! command -v "$i" &> /dev/null ; then + echo "Please install ${i} before continuing." + exit 1 + fi +done fallocate -l "$imageSize" "$imageName" @@ -257,12 +312,17 @@ packages=( fake-hwclock fenrir firmware-raspberrypi - linux-firmware git gstreamer gst-plugins-base gst-plugins-good ii + # Keep Pi onboard firmware plus common USB/network chipset firmware without + # pulling in unrelated desktop/server GPU firmware. + linux-firmware-atheros + linux-firmware-broadcom + linux-firmware-mediatek + linux-firmware-realtek magic-wormhole man man-pages