port to Pi 4 'wan': onboard eth0+wlan0 as NM WANs, AP stack verbatim
The USB hub (5GHz + 2.4GHz AP dongles, Starlink + LAN RTL8153s) moves over from wayback; MAC-derived wlx*/enx* names travel with it, so hostapd/ networkd/cockpit configs are unchanged. Pi diffs only: failover WAN list (wlan0 wifi 100, eth0 150, starlink USB 200, Koodo 300), cpu_thermal sensor, bcm2835 watchdog 10s, no HA DNAT/lease, and deploy.sh drops battery/lid/heartbeat/ZT-dns. Netplan reference in ap/50-van-wan.yaml. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
23448294a4
commit
9bf142074a
@@ -1,8 +1,8 @@
|
||||
#!/usr/bin/env bash
|
||||
# Deploy vanlink configs/scripts from this directory to their system locations.
|
||||
# Deploy vanlink configs/scripts (Pi 4 "wan" port) to their system locations.
|
||||
# Usage: cd ~/vanlink && sudo ./deploy.sh
|
||||
# Idempotent. See README.md §4 for the two manual steps this does NOT do
|
||||
# (zerotier-systemd-manager binary install, hostapd unmask).
|
||||
# Idempotent. Netplan (onboard eth0+wlan0 = NM-managed WANs) is NOT touched here —
|
||||
# reference copy in ap/50-van-wan.yaml, applied once manually (apply flaps uplinks).
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$(readlink -f "$0")")"
|
||||
[ "$(id -u)" = 0 ] || { echo "Run with sudo (writes to /etc, /usr)."; exit 1; }
|
||||
@@ -11,13 +11,13 @@ echo "== access point =="
|
||||
install -D -m0644 ap/hostapd.conf /etc/hostapd/hostapd.conf
|
||||
install -D -m0644 ap/hostapd-restart.conf /etc/systemd/system/hostapd.service.d/restart.conf
|
||||
install -D -m0644 ap/default-hostapd /etc/default/hostapd
|
||||
install -D -m0755 ap/van-ap-watchdog /usr/local/sbin/van-ap-watchdog
|
||||
install -D -m0644 ap/van-ap-watchdog.service /etc/systemd/system/van-ap-watchdog.service
|
||||
install -D -m0644 ap/hostapd-2g.conf /etc/hostapd/hostapd-2g.conf
|
||||
install -D -m0644 ap/hostapd-2g.service /etc/systemd/system/hostapd-2g.service
|
||||
install -D -m0644 ap/11-van-ap-2g.network /etc/systemd/network/11-van-ap-2g.network
|
||||
install -D -m0644 ap/van-ap-watchdog-2g.service /etc/systemd/system/van-ap-watchdog-2g.service
|
||||
install -D -m0644 ap/rtw88.conf /etc/modprobe.d/rtw88.conf
|
||||
install -D -m0755 ap/van-ap-watchdog /usr/local/sbin/van-ap-watchdog
|
||||
install -D -m0644 ap/van-ap-watchdog.service /etc/systemd/system/van-ap-watchdog.service
|
||||
install -D -m0644 ap/van-ap-dnsmasq.conf /etc/van-ap/dnsmasq.conf
|
||||
install -D -m0644 ap/van-ap-dnsmasq.service /etc/systemd/system/van-ap-dnsmasq.service
|
||||
install -D -m0644 ap/10-van-ap.network /etc/systemd/network/10-van-ap.network
|
||||
@@ -37,9 +37,6 @@ install -D -m0644 failover/van-failover.service /etc/systemd/system/van-failover
|
||||
install -D -m0755 failover/50-disable-eee /etc/NetworkManager/dispatcher.d/50-disable-eee
|
||||
install -D -m0644 failover/99-van-arp.conf /etc/sysctl.d/99-van-arp.conf
|
||||
|
||||
echo "== zerotier managed dns =="
|
||||
install -D -m0644 dns/zt-search.conf /etc/systemd/network/99-ztuga7c2kh.network.d/search.conf
|
||||
|
||||
echo "== cockpit plugin =="
|
||||
install -d /usr/share/cockpit/vanrouter
|
||||
install -m0644 cockpit/vanrouter/* /usr/share/cockpit/vanrouter/
|
||||
@@ -48,60 +45,32 @@ echo "== thermal monitor =="
|
||||
install -D -m0755 power/van-thermal /usr/local/sbin/van-thermal
|
||||
install -D -m0644 power/thermal-config.json /etc/van-thermal/config.json
|
||||
install -D -m0644 power/van-thermal.service /etc/systemd/system/van-thermal.service
|
||||
|
||||
echo "== battery monitor =="
|
||||
install -D -m0755 power/van-battery /usr/local/sbin/van-battery
|
||||
install -D -m0644 power/battery-config.json /etc/van-battery/config.json
|
||||
install -D -m0644 power/van-battery.service /etc/systemd/system/van-battery.service
|
||||
# Pushover secrets live only on the system (0600), never in the repo. Seed from the
|
||||
# template on first deploy; never clobber a filled-in file on later deploys.
|
||||
# Pushover secrets live only on the system (0600), never in the repo. Path kept
|
||||
# under /etc/van-battery/ for parity with wayback's van-thermal default.
|
||||
if [ ! -f /etc/van-battery/pushover.json ]; then
|
||||
install -D -m0600 power/pushover.json.example /etc/van-battery/pushover.json
|
||||
echo " -> seeded /etc/van-battery/pushover.json (EDIT IT: add Pushover token + user)"
|
||||
fi
|
||||
|
||||
echo "== power / never-sleep =="
|
||||
install -D -m0644 power/10-vanlink-nolid.conf /etc/systemd/logind.conf.d/10-vanlink-nolid.conf
|
||||
# Belt-and-suspenders: a router must never suspend from idle, GUI, or a stray `systemctl suspend`.
|
||||
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target >/dev/null 2>&1 || true
|
||||
|
||||
echo "== hardware watchdog =="
|
||||
install -D -m0644 power/10-vanlink-watchdog.conf /etc/systemd/system.conf.d/10-vanlink-watchdog.conf
|
||||
|
||||
echo "== heartbeat client (dead-man's switch) =="
|
||||
install -D -m0644 heartbeat/hbc.yaml /etc/hbc.yaml
|
||||
install -D -m0644 heartbeat/hbc.service /etc/systemd/system/hbc.service
|
||||
# The hbc binary itself (~/bin/hbc + venv) is installed once via the heartbeat
|
||||
# project's installer — see README §4. Only start the service if it's present.
|
||||
if [ ! -x /home/andreas/bin/hbc ]; then
|
||||
echo " -> /home/andreas/bin/hbc not found; run 'sh ~/git/heartbeat/scripts/hb_install.sh client' (README §4)"
|
||||
fi
|
||||
|
||||
echo "== apply =="
|
||||
sysctl --system >/dev/null
|
||||
systemctl daemon-reload
|
||||
# Re-exec PID1 so the system.conf.d watchdog drop-in takes effect (daemon-reload alone
|
||||
# does NOT re-arm RuntimeWatchdogSec). Safe online: re-exec keeps all services running.
|
||||
# Re-exec PID1 so the system.conf.d watchdog drop-in takes effect (daemon-reload
|
||||
# alone does NOT re-arm RuntimeWatchdogSec). Safe online.
|
||||
systemctl daemon-reexec
|
||||
# networkd here owns only the AP + ZT overlay (neither a real uplink), so its wait-online
|
||||
# can never satisfy "online" and just burns its 120s timeout, stalling network-online.target
|
||||
# and ZeroTier by ~2min every boot. Real uplink readiness is covered by NetworkManager-wait-online.
|
||||
# networkd here owns only the AP radios + bridge + wired LAN port (no real uplink);
|
||||
# its wait-online would just stall network-online.target. NM-wait-online covers WANs.
|
||||
systemctl mask systemd-networkd-wait-online.service >/dev/null 2>&1 || true
|
||||
# pick up the lid drop-in (re-execs logind; does NOT drop the network)
|
||||
systemctl restart systemd-logind >/dev/null 2>&1 || true
|
||||
systemctl unmask hostapd >/dev/null 2>&1 || true
|
||||
systemctl enable regdomain.service hostapd hostapd-2g van-ap-dnsmasq nftables systemd-networkd van-failover van-thermal van-battery van-ap-watchdog van-ap-watchdog-2g >/dev/null 2>&1 || true
|
||||
systemctl restart van-thermal van-battery
|
||||
# Heartbeat: only enable/start once the client binary is installed (README §4).
|
||||
if [ -x /home/andreas/bin/hbc ]; then
|
||||
systemctl enable hbc >/dev/null 2>&1 || true
|
||||
systemctl restart hbc
|
||||
fi
|
||||
# Pick up the unmanaged-devices change so NM releases the wired LAN port (drops its
|
||||
# old 192.168.10.x lease); networkd then enslaves it to br0 on the restart below.
|
||||
systemctl enable regdomain.service hostapd hostapd-2g van-ap-dnsmasq nftables systemd-networkd van-failover van-thermal van-ap-watchdog van-ap-watchdog-2g >/dev/null 2>&1 || true
|
||||
systemctl restart van-thermal
|
||||
# Pick up unmanaged-devices changes so NM releases/keeps the right interfaces.
|
||||
nmcli general reload 2>/dev/null || systemctl reload NetworkManager 2>/dev/null || true
|
||||
# restart in dependency order: br0 + AP iface + LAN member first, then hostapd adds
|
||||
# the wlan to br0, then dnsmasq binds br0, then NAT/failover
|
||||
# restart in dependency order: bridge + members first, then hostapd enslaves the
|
||||
# radios, then dnsmasq binds br0, then NAT/failover
|
||||
systemctl restart systemd-networkd
|
||||
systemctl restart hostapd hostapd-2g van-ap-dnsmasq nftables van-failover
|
||||
# AP watchdogs last, after hostapd is back up (they only ever restart a wedged hostapd)
|
||||
@@ -109,10 +78,10 @@ systemctl restart van-ap-watchdog van-ap-watchdog-2g
|
||||
networkctl reload 2>/dev/null || true
|
||||
|
||||
echo
|
||||
echo "Deployed. Verify:"
|
||||
echo "Deployed. NOTE: until the USB hub (AP radios + LAN/Starlink adapters) is"
|
||||
echo "plugged in, hostapd/hostapd-2g just retry every 5s — that is by design."
|
||||
echo "Verify (with hub present):"
|
||||
echo " iw dev wlxc83a35a4ee55 info | grep -E 'ssid|channel|width'"
|
||||
echo " iw dev wlxd8ec5e2faa8c info | grep -E 'ssid|channel|width'"
|
||||
echo " cat /run/van-failover/state.json"
|
||||
echo " cat /run/van-thermal/state.json # CPU + NVMe temps"
|
||||
echo " cat /run/van-battery/state.json # mains/battery + charge %"
|
||||
echo " systemctl status hbc # heartbeat client -> hbd.wrede.pvt"
|
||||
echo "Manual one-time steps (see README §4): zerotier-systemd-manager binary + 'zerotier-cli set <nwid> allowDNS=1'."
|
||||
echo " cat /run/van-thermal/state.json"
|
||||
|
||||
Reference in New Issue
Block a user