Skip to content

fix(clash-rs): 核心升到 v0.20.23-alpha,BUILD-INFO 记全代理开关 - #49

Merged
existyay merged 1 commit into
masterfrom
fix/clash-rs-v0.20.23
Oct 24, 2026
Merged

existyay merged 1 commit into
masterfrom
fix/clash-rs-v0.20.23

Conversation

@existyay

Copy link
Copy Markdown
Owner

三个问题的答案,以及据此做的两处改动

检查的结论先说:补丁栈没有漂移,nikki-rs 没有字段缺口,固件没有告警级缺陷;真正该动的只有一处版本滞后和一处记录缺失,都在这个 PR 里。

1. 固件当前缺陷面(最新镜像是 2026-10-19 那次定时构建)

openwrt-5b8554a95eee055c5bee96f6f2dfd3beb241e0e7,kernel 6.18.55,6 个资产齐全。逐项查过:

项 结果
构建步骤 30 步全绿,20/26 是"仅失败时运行"的正常跳过
GitHub 自己报的告警/错误注解 ##[warning] = 0,##[error] = 0(全 8791 行日志)
项目自带的告警审计步 真的跑了,结论 0 script warning(s), 0 arithmetic error(s), 0 of this project's Makefiles, 4 upstream feed Makefiles + No warnings about packages this project builds.
Kconfig 依赖告警 22 行、9 种,全部在 baseline/feed(busybox→libpam、luci-app-bmx7、kexec-tools→liblzma…),本工程自己的树里一条都没有
镜像与上游的时差 10-19 构建用的是 5b8554a9;今天 main 是 b5bc4becb4(10-24),即约 5 天的上游改动尚未进镜像 —— 周更节奏的正常状态,下一次定时构建是 10-26 04:00 UTC

唯一的真缺陷是产物记录不全:BUILD-INFO.txt 没记 enable_nikki / enable_openclash / enable_mosdns / enable_homeproxy / enable_adguardhome / enable_ebpf_proxy_kernel。这个镜像实际是 mosdns=true、ebpf_proxy_kernel=true,但产物里只字未提,排查时只能去翻 70 万行日志。已补(第二个 commit)。

2. 上游是否还有更新:有,但都不需要"合并"

  • openwrt/openwrt main:b5bc4becb4(10-24)。我们打补丁的四个包自基线以来没有新提交 —— nftables 仍是 1.1.7、libnftnl 仍是 1.3.2、firewall4/mt76 的 PKG_SOURCE_VERSION 未变。
  • 对 main 当前 head 跑完整门禁(b5bc4becb424b4d89f48e372675811821aa155bd):nftables/libnftnl 两个补丁 OK、顶层 patches/0001+0002 OK、Nikki-RS 四处锚点 4/4 OK、clash-rs 五个资产哈希 5/5 OK。firewall4/mt76 那两项只是 Windows 建不了符号链接的环境限制(退出码 2),Linux CI 上一直是绿的。
  • CHKayanami/clash-rs:从 v0.20.10-alpha 发到 v0.20.23-alpha(10-22),中间 13 个 release。这是唯一需要动作的"上游更新"。

3. nikki-rs 是否需要修补:不需要改 feed 侧,但核心钉住值要升

feed 的 main 在 10-20~10-22 动了 9 个 commit,其中三个与我们相关:

feed 提交 内容 判断
67ffca956 always package the latest clash-rs release(clash-rs/ 挪到仓库根 + CI 构建时现算哈希) 锚点没破:本仓库的锚点本来就按 clash-rs/Makefile 取,4/4 通过。但钉住的必要性反而更强了 —— 跟着 feed 走,同一份提交在不同日子会构建出不同核心
a7be43ab1 feat(dns2): upstream settings + ordered routing rules,mixin.uc 现在写 9 个 dns2.* 键 无缺口:Dns2Config / Dns2UpstreamDef 两版核心都认这 9 个键(含 inet4-range/inet6-range)
05ac84130 / 4e9a36c10 TUN 校验、reload trigger 修复 属核心/前端行为修复,随升级/feed 到来

所以:feed 侧不用打补丁(打补丁还得跟着它每次提交重新同步);核心侧的钉住值升到 v0.20.23-alpha(第一个 commit)。升级前做了两项静态核对,因为这两项都是"不看就会踩"的:

  1. 字段面:六个结构体逐字段比对,v0.20.10 与 v0.20.23 完全一致(11/5/3/4/13/7),feed 写的 19 个 ebpf 键 + 9 个 dns2 键两版都认。
  2. eBPF 功能:v0.20.23 的构建矩阵给每个 Linux 目标都是 extra-features: "jemallocator,ebpf",另有独立 build-ebpf 作业。这一条必须单独查 —— def.rs 里的 ebpf 结构体不受 feature gate 控制,所以 --strict-config 能解析不能证明功能编进去了。

顺手修掉的一个隐患:断言写死了版本号

checks.yml 原来断言字面量 want_v="0.20.10_alpha",而它自己的注释写着"bumping this is fine" —— 一次例行升级就会让必需检查变红。改成:want_v 与 want_url 必须指向同一版本、且不低于 0.20.10(第一个认识 proxy-src-macs 的 release)。三种情形都验过(当前版本通过 / 降到 0.20.9 报错 / 版本与 URL 不一致报错)。

这个 PR 不改变周更镜像

ENABLE_NIKKI 默认 false,定时构建不含 Nikki-RS,所以升级核心对周更镜像零影响;它只影响 workflow_dispatch 且 enable_nikki=true 的构建。运行期验证需要那样一次构建,见 PR 评论。

一、核心钉住值 v0.20.10-alpha -> v0.20.23-alpha

feed 在 2026-10-20~10-22 前进了 9 个 commit,其中 67ffca956 把 clash-rs 包从
nikki-rs/files/ 挪到仓库根,并让它的 CI 在构建时追最新 release
(scripts/packaging/update-clash-rs.sh 现算每个架构的哈希)。也就是说 feed 的
Makefile 里那份哈希随时会被它的 CI 改写:跟着它走,同一个 feed 提交在不同日子会
构建出不同核心。显式钉住因此比以前更必要,而原来的钉住值已经落后 13 个 release。

升级前核了两件事,都不是推断:

  * 字段面:v0.20.10 -> v0.20.23,EbpfConfig / EbpfLanConfig / EbpfHostConfig /
    EbpfTargetConfig / Dns2Config / Dns2UpstreamDef 六个结构体逐字段比对,字段数与
    名字完全一致。feed 现在写的 19 个 ebpf 键与 9 个 dns2 键两版核心都认(dns2
    upstreams 里的 type 是 pub r#type + #[serde(rename = "type")],不是未知字段)。
  * eBPF 功能:v0.20.23 的发布矩阵给每个 Linux 目标都是
    extra-features: "jemallocator,ebpf",另外单独有一个 build-ebpf 作业编字节码。
    这一条必须查 —— def.rs 里的 ebpf 结构体不受 feature gate 控制,所以
    --strict-config 能解析并不能证明功能真的编进去了。

顺带修掉一处会让例行升级变红的地方:checks.yml 原来断言字面量
want_v="0.20.10_alpha",而它自己的注释正写着"bumping this is fine"。改成断言
"want_v 与 want_url 指向同一版本、且不低于 0.20.10(第一个认识 proxy-src-macs 的
release)"。三种情形都跑过:当前版本通过、降到 0.20.9 报错、版本与 URL 不一致报错。

二、BUILD-INFO.txt 补上六个开关

10-19 那个周更镜像只记了 fancontrol / netmode / wwand / mt5700m / upnp / adblock /
dockerman,而它实际启用了 mosdns、并且 ENABLE_EBPF_PROXY_KERNEL=true。也就是说从
产物本身看不出一个固件带的是哪套代理前端,排查"这台机器为什么没有某个页面"时第一步
得去翻 70 万行的构建日志。

补上 enable_nikki / enable_openclash / enable_mosdns / enable_homeproxy /
enable_adguardhome / enable_ebpf_proxy_kernel 六个键。六个变量在 local-build.sh 里
都有默认值,set -u 下引用是安全的。

本地门禁对着新版本重跑:本仓库钉住 v0.20.23-alpha,五个架构哈希与 release 的
digest 逐条一致;Nikki-RS 四处锚点 4/4 仍在(含挪到仓库根之后的 clash-rs/Makefile)。
@existyay
existyay force-pushed the fix/clash-rs-v0.20.23 branch from 261f3a7 to fad37e4 Compare October 24, 2026 13:53
@existyay
existyay merged commit 4211ad8 into master Oct 24, 2026
12 checks passed
@existyay
existyay deleted the fix/clash-rs-v0.20.23 branch October 24, 2026 14:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant