Executable
+75
@@ -0,0 +1,75 @@
|
||||
#!/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."
|
||||
Reference in New Issue
Block a user