11#! /bin/sh
2- # ech-wk OpenWrt helper by ChatGPT
3- # 使用前先: chmod +x /root/ech-wk.sh 然后: /root/ech-wk.sh
2+ # ech-wk OpenWrt 自动安装脚本,支持自动获取最新版本
43
54REPO_OWNER=" byJoey"
65REPO_NAME=" ech-wk"
76BIN_PATH=" /usr/bin/ech-workers"
87TMP_DIR=" /tmp/ech-workers"
98
10- # 默认值(第一次生成配置用,可以之后在菜单里改)
9+ # 默认配置
1110DEFAULT_BEST_IP=" joeyblog.net"
1211DEFAULT_SERVER_ADDR=" echo.example.com:443"
1312DEFAULT_LISTEN_ADDR=" 0.0.0.0:30001"
1413DEFAULT_TOKEN=" "
1514DEFAULT_DNS=" https://dns.alidns.com/dns-query"
1615DEFAULT_ECH_DOMAIN=" cloudflare-ech.com"
17- DEFAULT_ROUTING=" global" # 分流模式 默认值是 global,bypass_cn 表示绕过中国地区
16+ DEFAULT_ROUTING=" global" # 默认分流模式 global
17+
18+ # 更新包列表
19+ update_package_list () {
20+ echo " 更新 opkg 包列表..."
21+ opkg update || { echo " 更新失败" ; exit 1; }
22+ echo " 包列表更新完成"
23+ }
1824
1925# 检查并安装缺失的依赖
2026install_dependencies () {
@@ -24,25 +30,25 @@ install_dependencies() {
2430 # 检查 curl
2531 if ! command -v curl > /dev/null 2>&1 ; then
2632 echo " 缺少 curl,正在安装..."
27- opkg update && opkg install curl || { echo " 安装 curl 失败" ; MISSING=1; }
33+ opkg install curl || { echo " 安装 curl 失败" ; MISSING=1; }
2834 fi
2935
3036 # 检查 tar
3137 if ! command -v tar > /dev/null 2>&1 ; then
3238 echo " 缺少 tar,正在安装..."
33- opkg update && opkg install tar || { echo " 安装 tar 失败" ; MISSING=1; }
39+ opkg install tar || { echo " 安装 tar 失败" ; MISSING=1; }
3440 fi
3541
3642 # 检查 jq
3743 if ! command -v jq > /dev/null 2>&1 ; then
3844 echo " 缺少 jq,正在安装..."
39- opkg update && opkg install jq || { echo " 安装 jq 失败" ; MISSING=1; }
45+ opkg install jq || { echo " 安装 jq 失败" ; MISSING=1; }
4046 fi
4147
4248 # 检查 procd
4349 if ! command -v procd > /dev/null 2>&1 ; then
4450 echo " 缺少 procd,正在安装..."
45- opkg update && opkg install procd || { echo " 安装 procd 失败" ; MISSING=1; }
51+ opkg install procd || { echo " 安装 procd 失败" ; MISSING=1; }
4652 fi
4753
4854 if [ $MISSING -eq 1 ]; then
@@ -57,56 +63,57 @@ install_dependencies() {
5763get_latest_release_url () {
5864 echo " 正在获取 GitHub 最新发布版本..."
5965
60- # 检查架构
61- ARCH=$( uname -m)
62- if [ " $ARCH " = " x86_64" ]; then
63- DOWNLOAD_URL=" https://github.com/byJoey/ech-wk/releases/download/latest/ECHWorkers-linux-amd64-softrouter.tar.gz"
64- elif [ " $ARCH " = " aarch64" ]; then
65- DOWNLOAD_URL=" https://github.com/byJoey/ech-wk/releases/download/latest/ECHWorkers-linux-arm64-softrouter.tar.gz"
66- else
67- echo " 不支持此架构:$ARCH "
66+ # 获取最新 release 的信息
67+ RELEASE_INFO=$( curl -s " https://api.github.com/repos/${REPO_OWNER} /${REPO_NAME} /releases/latest" )
68+ if [ $? -ne 0 ]; then
69+ echo " 获取 release 信息失败"
70+ return 1
71+ fi
72+
73+ # 获取下载链接
74+ DOWNLOAD_URL=$( echo " $RELEASE_INFO " | jq -r ' .assets[] | select(.name | test("linux-amd64")) | .browser_download_url' )
75+ if [ -z " $DOWNLOAD_URL " ]; then
76+ echo " 未找到合适的下载链接"
6877 return 1
6978 fi
7079
7180 echo " 下载链接: $DOWNLOAD_URL "
7281 echo $DOWNLOAD_URL
7382}
7483
84+ # 安装二进制文件
7585ensure_binary () {
76- if [ -x " $BIN_PATH " ]; then
77- return 0
78- fi
79-
80- echo " 找不到二进制: $BIN_PATH "
81- echo " 自动下载最新版本..."
82-
83- DOWNLOAD_URL=$( get_latest_release_url)
84- if [ $? -ne 0 ]; then
85- echo " 下载失败!"
86- return 1
87- fi
88-
89- echo " 开始下载..."
90- mkdir -p " $( dirname " $BIN_PATH " ) "
91- mkdir -p " $TMP_DIR "
92-
93- # 使用 curl 下载压缩包
94- curl -L -o " $TMP_DIR /ech-workers.tar.gz" " $DOWNLOAD_URL " || {
95- echo " 下载失败" ; return 1; }
96-
97- echo " 下载完成,开始解压..."
98- # 解压下载的文件
99- tar -zxvf " $TMP_DIR /ech-workers.tar.gz" -C " $TMP_DIR " || {
100- echo " 解压失败" ; return 1; }
101-
102- # 假设解压后文件名是 ech-workers,请根据实际情况调整
103- mv " $TMP_DIR /ech-workers" " $BIN_PATH " || {
104- echo " 移动失败" ; return 1; }
105-
106- chmod +x " $BIN_PATH "
107- echo " 安装完成: $BIN_PATH "
86+ if [ -x " $BIN_PATH " ]; then
87+ return 0
88+ fi
89+
90+ echo " 找不到二进制: $BIN_PATH "
91+ echo " 自动下载最新版本..."
92+
93+ DOWNLOAD_URL=$( get_latest_release_url)
94+ if [ $? -ne 0 ]; then
95+ echo " 下载失败!"
96+ return 1
97+ fi
98+
99+ echo " 开始下载..."
100+ mkdir -p " $( dirname " $BIN_PATH " ) "
101+ mkdir -p " $TMP_DIR "
102+
103+ # 使用 curl 下载压缩包
104+ curl -L -o " $TMP_DIR /ech-workers.tar.gz" " $DOWNLOAD_URL " || { echo " 下载失败" ; return 1; }
105+
106+ echo " 下载完成,开始解压..."
107+ tar -zxvf " $TMP_DIR /ech-workers.tar.gz" -C " $TMP_DIR " || { echo " 解压失败" ; return 1; }
108+
109+ # 假设解压后文件名是 ech-workers,请根据实际情况调整
110+ mv " $TMP_DIR /ech-workers" " $BIN_PATH " || { echo " 安装失败" ; return 1; }
111+
112+ chmod +x " $BIN_PATH "
113+ echo " 安装完成: $BIN_PATH "
108114}
109115
116+ # 确保配置文件存在
110117ensure_conf () {
111118 if [ -f " $CONF_FILE " ]; then
112119 return 0
125132 echo " 已生成默认配置: $CONF_FILE "
126133}
127134
135+ # 启动服务
128136ensure_init () {
129137 if [ -f " $INIT_FILE " ]; then
130138 return 0
@@ -168,10 +176,12 @@ EOF
168176 echo " 已创建启动脚本: $INIT_FILE 并设置开机自启"
169177}
170178
179+ # 加载配置
171180load_conf () {
172181 [ -f " $CONF_FILE " ] && . " $CONF_FILE "
173182}
174183
184+ # 保存配置
175185save_conf () {
176186 mkdir -p " $( dirname " $CONF_FILE " ) "
177187 cat > " $CONF_FILE " << EOF
@@ -185,6 +195,7 @@ ROUTING="${ROUTING}"
185195EOF
186196}
187197
198+ # 菜单界面
188199show_menu () {
189200 while true ; do
190201 clear
@@ -291,6 +302,7 @@ show_menu() {
291302}
292303
293304# 入口
305+ update_package_list # 更新包列表
294306install_dependencies # 自动安装依赖
295307ensure_conf
296308show_menu
0 commit comments