96 lines
3.9 KiB
Bash
96 lines
3.9 KiB
Bash
|
|
#!/bin/sh
|
||
|
|
# openwrt-luci-entrypoint.sh
|
||
|
|
#
|
||
|
|
# Starts ubusd, rpcd, configures the br-zt bridge, seeds UCI state,
|
||
|
|
# and runs uhttpd in the foreground (the only foreground process).
|
||
|
|
set -eu
|
||
|
|
|
||
|
|
WIBLAN_CIDR="${ZTG_WIBLAN_CIDR:-10.99.13.0/24}"
|
||
|
|
|
||
|
|
# ── 1. Start ubusd first (required for rpcd + uci) ──────────────────────────
|
||
|
|
rm -f /var/run/ubus/ubus.sock /tmp/run/ubus/ubus.sock
|
||
|
|
rm -f /tmp/lock/procd_*.lock
|
||
|
|
mkdir -p /var/run/ubus
|
||
|
|
/sbin/ubusd &
|
||
|
|
UBUSD_PID=$!
|
||
|
|
|
||
|
|
# Wait for ubus socket (up to 10s)
|
||
|
|
for _i in 1 2 3 4 5 6 7 8 9 10; do
|
||
|
|
if [ -S /var/run/ubus/ubus.sock ]; then break; fi
|
||
|
|
sleep 1
|
||
|
|
done
|
||
|
|
|
||
|
|
if ! ubus list >/dev/null 2>&1; then
|
||
|
|
echo "ERROR: ubusd did not start in time" >&2
|
||
|
|
kill $UBUSD_PID 2>/dev/null || true
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 2. Start rpcd ────────────────────────────────────────────────────────────
|
||
|
|
/sbin/rpcd &
|
||
|
|
|
||
|
|
for _i in 1 2 3 4 5; do
|
||
|
|
if ubus call system board >/dev/null 2>&1; then break; fi
|
||
|
|
sleep 1
|
||
|
|
done
|
||
|
|
|
||
|
|
# ── 3. Seed root password (for LuCI login) ───────────────────────────────────
|
||
|
|
if [ -f /etc/shadow ]; then
|
||
|
|
sed -i 's|^root:.*|root::0:0:99999:7:::|' /etc/shadow
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 4a. Seed zt-gateway config from host staging if present ─────────────────
|
||
|
|
if [ -f /host-config/zt-gateway ] && [ ! -f /etc/config/zt-gateway ]; then
|
||
|
|
cp /host-config/zt-gateway /etc/config/zt-gateway
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ── 4. Configure gateway switch mode to initial state ────────────────────────
|
||
|
|
if command -v uci >/dev/null 2>&1; then
|
||
|
|
uci set zt-gateway.global.active_gateway='amsterdam' 2>/dev/null || true
|
||
|
|
uci set zt-gateway.global.switch_mode='force' 2>/dev/null || true
|
||
|
|
uci set zt-gateway.global.drain_timeout='600' 2>/dev/null || true
|
||
|
|
uci commit zt-gateway 2>/dev/null || true
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "[entrypoint] ubusd + rpcd + config done"
|
||
|
|
|
||
|
|
# ── 5. Network setup (bridge + routing) ──────────────────────────────────────
|
||
|
|
# The target bridge device (used by zt-gateway-switch and health checks).
|
||
|
|
BRIDGE="${ZTG_BRIDGE:-br-zt}"
|
||
|
|
# Detect the interface that currently holds the 10.99.12.x address.
|
||
|
|
SOURCE_IFACE=$(ip -o -4 addr show 2>/dev/null \
|
||
|
|
| awk '$4 ~ /^10\.99\.12\./ {print $2; exit}')
|
||
|
|
|
||
|
|
if [ -z "$SOURCE_IFACE" ]; then
|
||
|
|
echo "WARNING: no 10.99.12.x interface found (expected zt-exit-net); using Docker bridge"
|
||
|
|
echo 1 > /proc/sys/net/ipv4/ip_forward
|
||
|
|
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects 2>/dev/null || true
|
||
|
|
else
|
||
|
|
ip link add name "$BRIDGE" type bridge 2>/dev/null || true
|
||
|
|
ip link set "$BRIDGE" up
|
||
|
|
|
||
|
|
ADDR=$(ip -o -4 addr show dev "$SOURCE_IFACE" \
|
||
|
|
| awk '$4 ~ /^10\.99\.12\./ {print $4; exit}')
|
||
|
|
if [ -n "$ADDR" ]; then
|
||
|
|
ip addr del "$ADDR" dev "$SOURCE_IFACE" 2>/dev/null || true
|
||
|
|
ip addr add "$ADDR" dev "$BRIDGE"
|
||
|
|
ip link set "$SOURCE_IFACE" master "$BRIDGE"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo 1 > /proc/sys/net/ipv4/ip_forward
|
||
|
|
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects 2>/dev/null || true
|
||
|
|
echo 0 > /proc/sys/net/ipv4/conf/"$BRIDGE"/send_redirects 2>/dev/null || true
|
||
|
|
|
||
|
|
ip rule del from "$WIBLAN_CIDR" table 100 2>/dev/null || true
|
||
|
|
ip rule add from "$WIBLAN_CIDR" table 100 priority 100
|
||
|
|
ip route replace default via 10.99.12.3 dev "$BRIDGE" 2>/dev/null || true
|
||
|
|
ip route replace "$WIBLAN_CIDR" dev "$BRIDGE" table 1 2>/dev/null || true
|
||
|
|
|
||
|
|
echo "[entrypoint] networking: SOURCE=$SOURCE_IFACE BRIDGE=$BRIDGE ADDR=$ADDR"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "[entrypoint] starting uhttpd..."
|
||
|
|
|
||
|
|
# ── 6. Run uhttpd in foreground (replaces shell) ─────────────────────────────
|
||
|
|
exec uhttpd -f -p 80 -h /www -u /ubus -a -r "OpenWRT-Test-Router"
|