#!/bin/sh set -eu P=/etc/log/apps/clash-amd64 RUN="$P/.pkg" PKG=/tmp/clash-1.0.14-amd64.ipkg URL="https://dl.naixi.net/ikuai/tmp/clash-1.0.14-amd64.ipkg?t=$(date +%s)" mkdir -p /tmp/clash-save [ -d "$RUN/app/data" ] && { rm -rf /tmp/clash-save/data; cp -a "$RUN/app/data" /tmp/clash-save/data; } || true [ -f "$RUN/app/.env" ] && cp -f "$RUN/app/.env" /tmp/clash-save/.env || true [ -x "$RUN/scripts/stop.sh" ] && sh "$RUN/scripts/stop.sh" 2>/dev/null || true killall clashd 2>/dev/null || true curl -fsSL -o "$PKG" "$URL" echo PACKAGE_SHA256; sha256sum "$PKG" rm -rf /tmp/clash-new; mkdir /tmp/clash-new; tar xzf "$PKG" -C /tmp/clash-new rm -rf "$RUN"; mkdir -p "$RUN" "$P/log"; cp -a /tmp/clash-new/clash-amd64/. "$RUN"/ [ -d /tmp/clash-save/data ] && { rm -rf "$RUN/app/data"; cp -a /tmp/clash-save/data "$RUN/app/data"; } [ -f /tmp/clash-save/.env ] && cp -f /tmp/clash-save/.env "$RUN/app/.env" cat > "$RUN/app/environment" <<'EOF' HOST_IP=192.168.9.1 APP_PORT_WEB=9190 APP_WEB_LOGIN_URI=/dashboard CLASH_CLIENT_MODE=exclude CLASH_CLIENTS=192.168.9.1,192.168.9.100-192.168.9.200,192.168.10.0/24 CLASH_LOG_LEVEL=silent EOF chmod 755 "$RUN/app/bin/clashd" "$RUN/scripts/start.sh" "$RUN/scripts/stop.sh" mkdir -p "$RUN/log" echo OLD_RUN_MARKER > "$RUN/log/run.log" cd "$RUN/scripts"; sh start.sh; sleep 15 echo VERSION; grep -E '"name"|"version"' "$RUN/manifest.json" echo PROCESS; ps w | grep '[c]lashd' echo PORTS; netstat -lntp 2>/dev/null | grep -E '(:9190|:1909[0-9]|:7891|:7893|:1054)' echo HTTP; curl -sS -m 5 -o /tmp/panel -w 'HTTP=%{http_code} SIZE=%{size_download}\n' http://192.168.9.1:9190/dashboard echo STATUS; curl -sS -m 5 http://192.168.9.1:9190/api/v1/status; echo echo EXCLUDE_MANGLE; iptables -t mangle -S CLASH echo EXCLUDE_DNS; iptables -t nat -S CLASH_DNS echo LOG_RESET; if grep -q OLD_RUN_MARKER "$RUN/log/run.log"; then echo FAIL_OLD_LOG; exit 1; else echo PASS_CURRENT_RUN_ONLY; fi echo EXCLUDE_OK sh "$RUN/scripts/stop.sh"; sleep 2 sed -i 's/^CLASH_CLIENT_MODE=.*/CLASH_CLIENT_MODE=include/' "$RUN/app/environment" echo SECOND_OLD_MARKER > "$RUN/log/run.log" cd "$RUN/scripts"; sh start.sh; sleep 15 echo INCLUDE_PROCESS; ps w | grep '[c]lashd' echo INCLUDE_MANGLE; iptables -t mangle -S CLASH echo INCLUDE_DNS; iptables -t nat -S CLASH_DNS echo INCLUDE_LOG_RESET; if grep -q SECOND_OLD_MARKER "$RUN/log/run.log"; then echo FAIL_SECOND_LOG; exit 1; else echo PASS_SECOND_RUN_ONLY; fi echo FINAL_STATUS; curl -sS -m 5 http://192.168.9.1:9190/api/v1/status; echo echo __82_DONE__