forked from Starry-Sky-World/FaceProxy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathentrypoint.sh
More file actions
144 lines (124 loc) · 4.6 KB
/
entrypoint.sh
File metadata and controls
144 lines (124 loc) · 4.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/bash
set -e
WARP_READY=false
# mihomo 优先于 WARP
if [ "$ENABLE_MIHOMO" = "true" ]; then
if [ -z "$MIHOMO_SUB_URL" ]; then
echo "[FaceProxy] ERROR: ENABLE_MIHOMO=true but MIHOMO_SUB_URL is empty, falling back to direct"
export ENABLE_MIHOMO=false
elif ! command -v mihomo >/dev/null 2>&1; then
echo "[FaceProxy] ERROR: ENABLE_MIHOMO=true but mihomo binary not found, falling back to direct"
export ENABLE_MIHOMO=false
else
# 覆盖 WARP,互斥
export ENABLE_AUTOWARP=false
echo "[FaceProxy] Fetching mihomo subscription..."
if ! curl -fsSL "$MIHOMO_SUB_URL" -o /tmp/sub_full.yaml; then
echo "[FaceProxy] ERROR: Failed to fetch subscription, falling back to direct"
export ENABLE_MIHOMO=false
else
mkdir -p /etc/mihomo
# 从订阅中提取 proxies 段写入 provider 文件
# 匹配从 "proxies:" 到下一个顶级 key 之间的内容
sed -n '/^proxies:/,/^[a-zA-Z]/{/^proxies:/p;/^[a-zA-Z]/!p;}' /tmp/sub_full.yaml > /etc/mihomo/proxies.yaml
# 检查提取结果是否有效
if [ ! -s /etc/mihomo/proxies.yaml ] || ! grep -q "proxies:" /etc/mihomo/proxies.yaml; then
echo "[FaceProxy] ERROR: Failed to extract proxies from subscription, falling back to direct"
export ENABLE_MIHOMO=false
else
# 构建健康检查 URL
HC_URL="https://${HF_SPACE_USER}-${HF_SPACE_NAME}.hf.space"
# 生成 mihomo 配置
cat > /etc/mihomo/config.yaml <<MIHOMO_EOF
mixed-port: 7890
mode: global
log-level: warning
ipv6: false
proxy-providers:
sub:
type: file
path: /etc/mihomo/proxies.yaml
health-check:
enable: true
url: "${HC_URL}"
interval: 180
proxy-groups:
- name: "lb"
type: load-balance
strategy: round-robin
use:
- sub
url: "${HC_URL}"
interval: 180
rules:
- MATCH,lb
MIHOMO_EOF
echo "[FaceProxy] Starting mihomo..."
mihomo -d /etc/mihomo &
# 等待 mihomo 就绪(检测 7890 端口)
MIHOMO_READY=false
for i in $(seq 1 15); do
if ss -tlnp 2>/dev/null | grep -q ":7890 " || \
bash -c "echo >/dev/tcp/127.0.0.1/7890" 2>/dev/null; then
echo "[FaceProxy] mihomo is ready on port 7890"
MIHOMO_READY=true
break
fi
echo "[FaceProxy] Waiting for mihomo to be ready... ($i/15)"
sleep 2
done
if [ "$MIHOMO_READY" = "false" ]; then
echo "[FaceProxy] WARNING: mihomo failed to start, falling back to direct"
export ENABLE_MIHOMO=false
fi
fi
fi
fi
fi
if [ "$ENABLE_MIHOMO" != "true" ] && [ "$ENABLE_AUTOWARP" = "true" ]; then
if ! command -v warp-svc >/dev/null 2>&1; then
echo "[FaceProxy] ERROR: ENABLE_AUTOWARP=true but warp-svc not found, running without WARP"
export ENABLE_AUTOWARP=false
else
# warp-svc 依赖 dbus
mkdir -p /run/dbus
if command -v dbus-daemon >/dev/null 2>&1; then
dbus-daemon --system --nofork &
sleep 1
fi
echo "[FaceProxy] Starting Cloudflare WARP daemon..."
warp-svc &
sleep 3
# 等待 warp-cli 可用
for i in $(seq 1 10); do
if warp-cli --accept-tos status >/dev/null 2>&1; then
break
fi
echo "[FaceProxy] Waiting for warp-svc to be ready... ($i/10)"
sleep 2
done
# 注册(已注册则跳过)
if ! warp-cli --accept-tos registration show >/dev/null 2>&1; then
warp-cli --accept-tos registration new
echo "[FaceProxy] WARP registered"
fi
# Proxy 模式,不需要 TUN 设备
warp-cli --accept-tos mode proxy
warp-cli --accept-tos proxy port 40000
warp-cli --accept-tos connect
# 等待连接就绪
for i in $(seq 1 30); do
if warp-cli --accept-tos status 2>/dev/null | grep -q "Connected"; then
echo "[FaceProxy] WARP connected"
WARP_READY=true
break
fi
sleep 1
done
if [ "$WARP_READY" = "false" ]; then
echo "[FaceProxy] WARNING: WARP failed to connect, disabling WARP"
export ENABLE_AUTOWARP=false
fi
fi
fi
exec /faceproxy