#!/usr/bin/env bash set -euo pipefail bundle_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) zero_dir="$bundle_dir/zero" image_tar="$zero_dir/product-vamp-zero-linux-arm64.docker.tar" config_dir=/etc/product-vamp state_dir=/var/lib/product-vamp run_dir=/run/product-vamp share_dir=/usr/share/product-vamp required_packages=( docker.io docker-cli network-manager sqlite3 ca-certificates python3 ) if [ "$(id -u)" -ne 0 ]; then echo "install-zero.sh must be run as root" >&2 exit 1 fi if [ ! -f "$image_tar" ]; then echo "missing Docker archive: $image_tar" >&2 exit 1 fi missing_packages=() for package in "${required_packages[@]}"; do if ! dpkg-query -W -f='${Status}' "$package" 2>/dev/null | grep -qx 'install ok installed'; then missing_packages+=("$package") fi done if [ "${#missing_packages[@]}" -eq 0 ]; then echo "Required OS packages already installed; skipping apt." else echo "Installing missing OS packages: ${missing_packages[*]}" if ! apt-get update -o APT::Update::Error-Mode=any; then echo "Failed to refresh apt package indexes." >&2 echo "Connect the Zero to upstream internet, then rerun sudo zero/install-zero.sh." >&2 exit 1 fi if ! apt-get install -y --no-install-recommends "${missing_packages[@]}"; then echo "Failed to install required OS packages: ${missing_packages[*]}" >&2 echo "Connect the Zero to upstream internet, then rerun sudo zero/install-zero.sh." >&2 exit 1 fi fi systemctl enable --now docker NetworkManager install -d -m 0755 "$config_dir" "$state_dir" "$run_dir" "$share_dir" cp -R "$zero_dir/share/product-vamp/." "$share_dir/" if [ ! -f "$config_dir/vamp.json" ]; then cp "$zero_dir/config/vamp.example.json" "$config_dir/vamp.json" fi docker load -i "$image_tar" install -m 0755 "$zero_dir/start-ap.sh" /usr/local/bin/product-vamp-start-ap install -m 0755 "$zero_dir/start-zero.sh" /usr/local/bin/product-vamp-start-zero install -m 0644 "$zero_dir/systemd/product-vamp-ap.service" /etc/systemd/system/product-vamp-ap.service install -m 0644 "$zero_dir/systemd/product-vamp-zero.service" /etc/systemd/system/product-vamp-zero.service systemctl daemon-reload systemctl disable --now getty@tty1.service >/dev/null 2>&1 || true systemctl enable --now getty@tty2.service >/dev/null 2>&1 || true systemctl enable --now product-vamp-ap.service systemctl enable product-vamp-zero.service systemctl restart product-vamp-zero.service echo "Product Vamp Zero installed. Control AP defaults to SSID 'Vamp Control' at http://192.168.42.1:8080."