#!/bin/bash set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" if [[ $# -lt 1 || $# -gt 2 ]]; then echo "Usage: $0 CANDIDATE.deb [PREVIOUS.deb]" >&2 exit 2 fi candidate="$(realpath "$1")" previous="" [[ -f "$candidate" ]] || { echo "Package not found: $candidate" >&2; exit 1; } if [[ $# -eq 2 ]]; then previous="$(realpath "$2")" [[ -f "$previous" ]] || { echo "Package not found: $previous" >&2; exit 1; } fi echo "Validating $(basename "$candidate") on Debian Trixie" docker_args=( run --rm -i -v "$candidate:/packages/candidate.deb:ro" ) if [[ -n "$previous" ]]; then docker_args+=( -v "$previous:/packages/previous.deb:ro" ) fi docker "${docker_args[@]}" debian:trixie-slim \ bash -s -- "${previous:+/packages/previous.deb}" <<'CONTAINER' set -euo pipefail export DEBIAN_FRONTEND=noninteractive apt-get update -qq previous="${1:-}" if [[ -n "$previous" ]]; then apt-get install -y -qq "$previous" >/tmp/previous-install.log cat > /etc/ekklesia-classroom/device.conf <<'CONFIG' # Configuration carried forward from 0.1.36 UPDATE_URL=https://updates.riverofglorymn.org CHANNEL=canary DVD_ENABLED=true UI_SCALE=1.25 MQTT_ENABLED=true MQTT_HOST=broker.example.test MQTT_PORT=1884 MQTT_USERNAME=classroom MQTT_PASSWORD=preserve-me CUSTOM_SETTING=preserve-me-too CONFIG fi apt-get install -y -qq /packages/candidate.deb >/tmp/candidate-install.log command -v nmtui >/dev/null command -v lpadmin >/dev/null command -v lpinfo >/dev/null systemctl is-enabled NetworkManager.service >/dev/null systemctl is-enabled cups.service >/dev/null ! systemctl is-enabled NetworkManager-wait-online.service >/dev/null 2>&1 grep -q '^managed=false$' /etc/NetworkManager/NetworkManager.conf # A normal Docker container has Ethernet and no Wi-Fi adapter. Reaching this # point proves package configuration did not require Wi-Fi hardware. ! find /sys/class/net -mindepth 2 -maxdepth 2 -type d -name wireless | grep -q . /usr/sbin/cupsd sleep 1 driver='foomatic-db-compressed-ppds:0/ppd/foomatic-ppd/Generic-PCL_6_PCL_XL_Printer-pxlcolor.ppd' lpinfo -m | grep -q "^${driver} " classroom-printer-setup 192.0.2.10 >/tmp/printer-first.log classroom-printer-setup 192.0.2.10 >/tmp/printer-second.log lpstat -p Classroom_Color -d -v | grep -q 'socket://192.0.2.10:9100' if [[ -n "$previous" ]]; then grep -q '^CHANNEL=canary$' /etc/ekklesia-classroom/device.conf grep -q '^DVD_ENABLED=true$' /etc/ekklesia-classroom/device.conf grep -q '^UI_SCALE=1.25$' /etc/ekklesia-classroom/device.conf grep -q '^MQTT_PASSWORD=preserve-me$' /etc/ekklesia-classroom/device.conf grep -q '^CUSTOM_SETTING=preserve-me-too$' /etc/ekklesia-classroom/device.conf [[ "$(grep -c '^LIVE_ENABLED=' /etc/ekklesia-classroom/device.conf)" -eq 1 ]] apt-get install --reinstall -y -qq /packages/candidate.deb \ >/tmp/candidate-reinstall.log [[ "$(grep -c '^LIVE_ENABLED=' /etc/ekklesia-classroom/device.conf)" -eq 1 ]] fi echo "Trixie package, upgrade, networking, printing and reinstall checks passed." CONTAINER