| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/bin/sh
- set -eu
- SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
- APP_DIR=$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)
- CONFIG_PATH=${1:-"$APP_DIR/router_local.conf"}
- if [ ! -r "$CONFIG_PATH" ]; then
- echo "[router-http] config not found: $CONFIG_PATH" >&2
- exit 1
- fi
- # shellcheck disable=SC1090
- . "$CONFIG_PATH"
- BUSYBOX_BIN=${BUSYBOX_BIN:-"$APP_DIR/busybox_armv7l"}
- RUNTIME_DIR=${RUNTIME_DIR:-"$APP_DIR/cfip_runtime"}
- VALUE_TEXT_FILE=${VALUE_TEXT_FILE:-"current_ip.txt"}
- HTTP_PORT=${HTTP_PORT:-8080}
- TEXT_PATH="$RUNTIME_DIR/$VALUE_TEXT_FILE"
- INDEX_PATH="$RUNTIME_DIR/index.html"
- resolve_busybox() {
- if [ -n "$BUSYBOX_BIN" ] && [ -x "$BUSYBOX_BIN" ]; then
- printf '%s\n' "$BUSYBOX_BIN"
- return 0
- fi
- if [ -x "$APP_DIR/busybox_armv7l" ]; then
- printf '%s\n' "$APP_DIR/busybox_armv7l"
- return 0
- fi
- if command -v busybox >/dev/null 2>&1; then
- command -v busybox
- return 0
- fi
- return 1
- }
- busybox_has_applet() {
- busybox_bin="$1"
- applet="$2"
- "$busybox_bin" --list 2>/dev/null | grep "^$applet$" >/dev/null
- }
- ensure_index() {
- if [ ! -f "$TEXT_PATH" ]; then
- return 0
- fi
- rm -f "$INDEX_PATH"
- cp "$TEXT_PATH" "$INDEX_PATH"
- }
- start_httpd() {
- busybox_bin=$(resolve_busybox || true)
- if [ -n "$busybox_bin" ] && busybox_has_applet "$busybox_bin" httpd; then
- echo "[router-http] serving $RUNTIME_DIR on 0.0.0.0:$HTTP_PORT via $busybox_bin httpd"
- "$busybox_bin" httpd -f -p "$HTTP_PORT" -h "$RUNTIME_DIR" &
- httpd_pid=$!
- trap 'kill "$httpd_pid" 2>/dev/null || true' INT TERM EXIT
- wait "$httpd_pid"
- exit $?
- fi
- if [ -n "$busybox_bin" ]; then
- echo "[router-http] selected BusyBox has no httpd applet: $busybox_bin" >&2
- fi
- if command -v httpd >/dev/null 2>&1; then
- echo "[router-http] found system httpd at $(command -v httpd), but it is not used" >&2
- echo "[router-http] ASUS firmware httpd is usually the router admin web server and does not support serving an arbitrary -h directory" >&2
- fi
- echo "[router-http] usable BusyBox httpd applet not found" >&2
- echo "[router-http] set BUSYBOX_BIN in router_local.conf to your full BusyBox binary, for example: BUSYBOX_BIN=\"./busybox_armv7l\"" >&2
- exit 1
- }
- if [ ! -d "$RUNTIME_DIR" ]; then
- echo "[router-http] runtime dir not found: $RUNTIME_DIR" >&2
- echo "[router-http] run: sh scripts/router_local_update.sh $CONFIG_PATH" >&2
- exit 1
- fi
- ensure_index
- start_httpd
|