vernesong / OpenClash

A Clash Client For OpenWrt
MIT License
16.86k stars 3.1k forks source link

[Bug] 下载超时后提示下载成功,并继续执行内核更新流程 #3851

Closed trantuan-20048607 closed 4 months ago

trantuan-20048607 commented 5 months ago

Verify Steps

OpenClash Version

v0.46.007-beta

Bug on Environment

Official OpenWrt

OpenWrt Version

OpenWrt 22.03.4

Bug on Platform

Linux-amd64(x86-64)

Describe the Bug

当前版本不会检查内核下载是否成功而始终执行更新流程,导致服务无法启动

To Reproduce

在管理面板中打断下载内核的 TCP 连接

OpenClash Log

2024-04-18 18:37:49 OpenClash 开始关闭...
2024-04-18 18:37:48 错误:无法获取 General 部分的转发端口设置, OpenClash 使用原始配置文件启动失败
2024-04-18 18:37:48 错误:无法获取 DNS 部分的运行模式设置, OpenClash 使用原始配置文件启动失败
2024-04-18 18:37:48 错误:无法获取 DNS 部分的监听端口设置, OpenClash 使用原始配置文件启动失败
2024-04-18 18:37:47 错误:OpenClash 启动失败,尝试使用原始配置文件启动...
2024-04-18 18:37:43 启动前调用内核测试配置文件...
2024-04-18 18:37:43 提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动...
2024-04-18 18:37:43 错误:OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序...
2024-04-18 18:37:43 第六步: 等待主程序下载外部文件...
2024-04-18 18:37:40 第五步: 检查内核启动状态...
2024-04-18 18:37:39 启动前调用内核测试配置文件...
2024-04-18 18:37:39 提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动...
2024-04-18 18:37:39 第四步: 启动主程序...
2024-04-18 18:37:39 提示:开始运行自定义覆写脚本...
2024-04-18 18:37:39 提示:您为 SOCKS5/HTTP(S) 代理设置的账户密码为【root:********】
2024-04-18 18:37:39 第三步: 修改配置文件...
2024-04-18 18:37:39 提示:由于文件【 /etc/config/openclash 】被修改,暂停快速启动...
2024-04-18 18:37:38 第二步: 组件运行前检查...
2024-04-18 18:37:38 第一步: 获取配置...
2024-04-18 18:37:38 OpenClash 开始启动...
2024-04-18 18:37:38 第六步:删除 OpenClash 残留文件...
2024-04-18 18:37:35 第五步: 重启 Dnsmasq 程序...
2024-04-18 18:37:35 第四步: 关闭 Clash 主程序...
2024-04-18 18:37:35 第三步: 关闭 OpenClash 守护程序...
2024-04-18 18:37:35 第二步: 删除 OpenClash 防火墙规则...
2024-04-18 18:37:35 第一步: 备份当前策略组状态...
2024-04-18 18:37:35 OpenClash 开始关闭...
2024-04-18 18:37:35 OpenClash 重新启动中...
2024-04-18 18:37:35 【Meta】版本内核更新成功!
2024-04-18 18:37:35 【Meta】版本内核下载成功,开始更新...
2024-04-18 18:34:32【/tmp/clash_meta.tar.gz】下载失败:【curl: (28) Operation timed out after 60000 milliseconds with 7360628 out of 7585662 bytes received curl: (28) Operation timed out after 60001 milliseconds with 6162093 out of 7585662 bytes received curl: (28) Operation timed out after 60001 milliseconds with 6059361 out of 7585662 bytes received】

OpenClash Config

No response

Expected Behavior

下载失败后提示、停止更新流程并清理临时文件

Additional Context

No response

minisind commented 5 months ago

18:37:35 这个时间第一条就是下载成功啊。 看来你只看到了前面那条不成功的信息。

trantuan-20048607 commented 5 months ago

18:37:35 这个时间第一条就是下载成功啊。 看来你只看到了前面那条不成功的信息。

下载后启动失败了,文件不完整;不修改配置的情况下手动下载后放进去就又能运行了

minisind commented 5 months ago

你上面那个日志,下载成功的信息应该不是你手动下载放进去的信息提示吧。

trantuan-20048607 commented 5 months ago

你上面那个日志,下载成功的信息应该不是你手动下载放进去的信息提示吧。

所以我的意思是 OpenClash 不会判断下载文件有没有损坏,无视报错地显示下载成功,然后进行后续步骤。后续步骤在规则文件测试就失败了,因为文件根本运行不了;测试失败后还原配置文件自然也没用

trantuan-20048607 commented 5 months ago

18:37:35 这个时间第一条就是下载成功啊。 看来你只看到了前面那条不成功的信息。

今天又碰到了一次这个问题,下载失败信息的时间是开始下载的时间(下载持续了几分钟都没有完成导致超时),下载失败后立刻提示下载成功并更新了内核,导致无法上网 因为内核损坏后无法上网,目前只能后台镜像一个 OpenClash 的 GitHub 项目,然后手动提取出内核上传,非常麻烦

完整流程:

2024-04-21 10:10:35 第六步:删除 OpenClash 残留文件...
2024-04-21 10:10:33 第五步: 重启 Dnsmasq 程序...
2024-04-21 10:10:33 第四步: 关闭 Clash 主程序...
2024-04-21 10:10:33 第三步: 关闭 OpenClash 守护程序...
2024-04-21 10:10:33 第二步: 删除 OpenClash 防火墙规则...
2024-04-21 10:10:33 第一步: 备份当前策略组状态...
2024-04-21 10:10:33 OpenClash 开始关闭...
2024-04-21 10:10:32 错误:无法获取 General 部分的转发端口设置, OpenClash 使用原始配置文件启动失败
2024-04-21 10:10:32 错误:无法获取 DNS 部分的运行模式设置, OpenClash 使用原始配置文件启动失败
2024-04-21 10:10:32 错误:无法获取 DNS 部分的监听端口设置, OpenClash 使用原始配置文件启动失败
2024-04-21 10:10:31 错误:OpenClash 启动失败,尝试使用原始配置文件启动...
2024-04-21 10:10:27 启动前调用内核测试配置文件...
2024-04-21 10:10:27 提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动...
2024-04-21 10:10:27 错误:OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序...
2024-04-21 10:10:27 第六步: 等待主程序下载外部文件...
2024-04-21 10:10:24 第五步: 检查内核启动状态...
2024-04-21 10:10:23 启动前调用内核测试配置文件...
2024-04-21 10:10:23 提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动...
2024-04-21 10:10:23 第四步: 启动主程序...
2024-04-21 10:10:23 提示:开始运行自定义覆写脚本...
2024-04-21 10:10:23 提示:您为 SOCKS5/HTTP(S) 代理设置的账户密码为【root:********】
2024-04-21 10:10:23 第三步: 修改配置文件...
2024-04-21 10:10:23 提示:由于文件【 /etc/config/openclash 】被修改,暂停快速启动...
2024-04-21 10:10:23 第二步: 组件运行前检查...
2024-04-21 10:10:22 第一步: 获取配置...
2024-04-21 10:10:22 OpenClash 开始启动...
2024-04-21 10:10:22 第六步:删除 OpenClash 残留文件...
2024-04-21 10:10:20 第五步: 重启 Dnsmasq 程序...
2024-04-21 10:10:20 第四步: 关闭 Clash 主程序...
2024-04-21 10:10:20 第三步: 关闭 OpenClash 守护程序...
2024-04-21 10:10:20 第二步: 删除 OpenClash 防火墙规则...
2024-04-21 10:10:20 第一步: 备份当前策略组状态...
2024-04-21 10:10:20 OpenClash 开始关闭...
2024-04-21 10:10:20 OpenClash 重新启动中...
2024-04-21 10:10:20 【Meta】版本内核更新成功!
2024-04-21 10:10:20 【Meta】版本内核下载成功,开始更新...
2024-04-21 10:07:17【/tmp/clash_meta.tar.gz】下载失败:【curl: (28) Operation timed out after 60000 milliseconds with 7495151 out of 7584650 bytes received curl: (28) Operation timed out after 60000 milliseconds with 5942661 out of 7584650 bytes received curl: (28) Operation timed out after 60000 milliseconds with 6349477 out of 7584650 bytes received】
2024-04-21 10:07:17 【Meta】版本内核正在下载,如下载失败请尝试手动下载并上传...
2024-04-21 10:07:16 提示:如果下载失败,您可以尝试在覆写设置 - 常规设置 - Github地址修改选项中设置CDN
yellowsavant commented 5 months ago

18:37:35 这个时间第一条就是下载成功啊。 看来你只看到了前面那条不成功的信息。

今天又碰到了一次这个问题,下载失败信息的时间是开始下载的时间(下载持续了几分钟都没有完成导致超时),下载失败后立刻提示下载成功并更新了内核,导致无法上网 因为内核损坏后无法上网,目前只能后台镜像一个 OpenClash 的 GitHub 项目,然后手动提取出内核上传,非常麻烦

完整流程:

2024-04-21 10:10:35 第六步:删除 OpenClash 残留文件...
2024-04-21 10:10:33 第五步: 重启 Dnsmasq 程序...
2024-04-21 10:10:33 第四步: 关闭 Clash 主程序...
2024-04-21 10:10:33 第三步: 关闭 OpenClash 守护程序...
2024-04-21 10:10:33 第二步: 删除 OpenClash 防火墙规则...
2024-04-21 10:10:33 第一步: 备份当前策略组状态...
2024-04-21 10:10:33 OpenClash 开始关闭...
2024-04-21 10:10:32 错误:无法获取 General 部分的转发端口设置, OpenClash 使用原始配置文件启动失败
2024-04-21 10:10:32 错误:无法获取 DNS 部分的运行模式设置, OpenClash 使用原始配置文件启动失败
2024-04-21 10:10:32 错误:无法获取 DNS 部分的监听端口设置, OpenClash 使用原始配置文件启动失败
2024-04-21 10:10:31 错误:OpenClash 启动失败,尝试使用原始配置文件启动...
2024-04-21 10:10:27 启动前调用内核测试配置文件...
2024-04-21 10:10:27 提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动...
2024-04-21 10:10:27 错误:OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序...
2024-04-21 10:10:27 第六步: 等待主程序下载外部文件...
2024-04-21 10:10:24 第五步: 检查内核启动状态...
2024-04-21 10:10:23 启动前调用内核测试配置文件...
2024-04-21 10:10:23 提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动...
2024-04-21 10:10:23 第四步: 启动主程序...
2024-04-21 10:10:23 提示:开始运行自定义覆写脚本...
2024-04-21 10:10:23 提示:您为 SOCKS5/HTTP(S) 代理设置的账户密码为【root:********】
2024-04-21 10:10:23 第三步: 修改配置文件...
2024-04-21 10:10:23 提示:由于文件【 /etc/config/openclash 】被修改,暂停快速启动...
2024-04-21 10:10:23 第二步: 组件运行前检查...
2024-04-21 10:10:22 第一步: 获取配置...
2024-04-21 10:10:22 OpenClash 开始启动...
2024-04-21 10:10:22 第六步:删除 OpenClash 残留文件...
2024-04-21 10:10:20 第五步: 重启 Dnsmasq 程序...
2024-04-21 10:10:20 第四步: 关闭 Clash 主程序...
2024-04-21 10:10:20 第三步: 关闭 OpenClash 守护程序...
2024-04-21 10:10:20 第二步: 删除 OpenClash 防火墙规则...
2024-04-21 10:10:20 第一步: 备份当前策略组状态...
2024-04-21 10:10:20 OpenClash 开始关闭...
2024-04-21 10:10:20 OpenClash 重新启动中...
2024-04-21 10:10:20 【Meta】版本内核更新成功!
2024-04-21 10:10:20 【Meta】版本内核下载成功,开始更新...
2024-04-21 10:07:17【/tmp/clash_meta.tar.gz】下载失败:【curl: (28) Operation timed out after 60000 milliseconds with 7495151 out of 7584650 bytes received curl: (28) Operation timed out after 60000 milliseconds with 5942661 out of 7584650 bytes received curl: (28) Operation timed out after 60000 milliseconds with 6349477 out of 7584650 bytes received】
2024-04-21 10:07:17 【Meta】版本内核正在下载,如下载失败请尝试手动下载并上传...
2024-04-21 10:07:16 提示:如果下载失败,您可以尝试在覆写设置 - 常规设置 - Github地址修改选项中设置CDN

openclash本身应该只下载,不做文档crc校验,自己到mihomo下载手动上传更新了 应该不是很麻烦,就是不是很方便了

trantuan-20048607 commented 5 months ago

18:37:35 这个时间第一条就是下载成功啊。 看来你只看到了前面那条不成功的信息。

今天又碰到了一次这个问题,下载失败信息的时间是开始下载的时间(下载持续了几分钟都没有完成导致超时),下载失败后立刻提示下载成功并更新了内核,导致无法上网 因为内核损坏后无法上网,目前只能后台镜像一个 OpenClash 的 GitHub 项目,然后手动提取出内核上传,非常麻烦 完整流程:

2024-04-21 10:10:35 第六步:删除 OpenClash 残留文件...
2024-04-21 10:10:33 第五步: 重启 Dnsmasq 程序...
2024-04-21 10:10:33 第四步: 关闭 Clash 主程序...
2024-04-21 10:10:33 第三步: 关闭 OpenClash 守护程序...
2024-04-21 10:10:33 第二步: 删除 OpenClash 防火墙规则...
2024-04-21 10:10:33 第一步: 备份当前策略组状态...
2024-04-21 10:10:33 OpenClash 开始关闭...
2024-04-21 10:10:32 错误:无法获取 General 部分的转发端口设置, OpenClash 使用原始配置文件启动失败
2024-04-21 10:10:32 错误:无法获取 DNS 部分的运行模式设置, OpenClash 使用原始配置文件启动失败
2024-04-21 10:10:32 错误:无法获取 DNS 部分的监听端口设置, OpenClash 使用原始配置文件启动失败
2024-04-21 10:10:31 错误:OpenClash 启动失败,尝试使用原始配置文件启动...
2024-04-21 10:10:27 启动前调用内核测试配置文件...
2024-04-21 10:10:27 提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动...
2024-04-21 10:10:27 错误:OpenClash 启动失败,尝试还原第三方规则并重新启动 Clash 主程序...
2024-04-21 10:10:27 第六步: 等待主程序下载外部文件...
2024-04-21 10:10:24 第五步: 检查内核启动状态...
2024-04-21 10:10:23 启动前调用内核测试配置文件...
2024-04-21 10:10:23 提示:检测到配置了 Meta 内核专属功能,调用 Meta 内核启动...
2024-04-21 10:10:23 第四步: 启动主程序...
2024-04-21 10:10:23 提示:开始运行自定义覆写脚本...
2024-04-21 10:10:23 提示:您为 SOCKS5/HTTP(S) 代理设置的账户密码为【root:********】
2024-04-21 10:10:23 第三步: 修改配置文件...
2024-04-21 10:10:23 提示:由于文件【 /etc/config/openclash 】被修改,暂停快速启动...
2024-04-21 10:10:23 第二步: 组件运行前检查...
2024-04-21 10:10:22 第一步: 获取配置...
2024-04-21 10:10:22 OpenClash 开始启动...
2024-04-21 10:10:22 第六步:删除 OpenClash 残留文件...
2024-04-21 10:10:20 第五步: 重启 Dnsmasq 程序...
2024-04-21 10:10:20 第四步: 关闭 Clash 主程序...
2024-04-21 10:10:20 第三步: 关闭 OpenClash 守护程序...
2024-04-21 10:10:20 第二步: 删除 OpenClash 防火墙规则...
2024-04-21 10:10:20 第一步: 备份当前策略组状态...
2024-04-21 10:10:20 OpenClash 开始关闭...
2024-04-21 10:10:20 OpenClash 重新启动中...
2024-04-21 10:10:20 【Meta】版本内核更新成功!
2024-04-21 10:10:20 【Meta】版本内核下载成功,开始更新...
2024-04-21 10:07:17【/tmp/clash_meta.tar.gz】下载失败:【curl: (28) Operation timed out after 60000 milliseconds with 7495151 out of 7584650 bytes received curl: (28) Operation timed out after 60000 milliseconds with 5942661 out of 7584650 bytes received curl: (28) Operation timed out after 60000 milliseconds with 6349477 out of 7584650 bytes received】
2024-04-21 10:07:17 【Meta】版本内核正在下载,如下载失败请尝试手动下载并上传...
2024-04-21 10:07:16 提示:如果下载失败,您可以尝试在覆写设置 - 常规设置 - Github地址修改选项中设置CDN

openclash本身应该只下载,不做文档crc校验,自己到mihomo下载手动上传更新了 应该不是很麻烦,就是不是很方便了

日志里能写出 curl 的返回值,应该往脚本里加一个判断就可以解决了

vernesong commented 5 months ago

不会检查文件完整性,curl返回成功就是成功

trantuan-20048607 commented 5 months ago

不会检查文件完整性,curl返回成功就是成功

但是这个日志有点自相矛盾,前脚提示下载失败后脚就下载成功,说明脚本应该比较方便实现在下载失败后停止更新并清理 作者可以考虑加一下,对终端没有梯子的家庭组网很重要(下载失败后所有设备失去梯子,无法从外网下载完整内核,我自己是镜像了一个 OpenClash 的 GitHub 项目从 core 分支提取的)

vernesong commented 5 months ago

curl有重试功能啊

vernesong commented 5 months ago

image 你加CDN

trantuan-20048607 commented 5 months ago

curl有重试功能啊

我自己测试是只要任何原因打断 curl 发起的那个连接就直接结束了,不会重试。

image 你加CDN

这个虽然可行,但之前加 CDN 之后有些订阅规则就没法更新了