76 lines
2.5 KiB
Bash
Executable File
76 lines
2.5 KiB
Bash
Executable File
#!/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."
|