From d2291aeb96739c443c82a606cbf2bc007275e74a Mon Sep 17 00:00:00 2001 From: liuzhuohua <29739020+liuzhuohua@users.noreply.github.com> Date: Fri, 16 Oct 2026 10:58:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=20v1.0.11=EF=BC=9Aarm64=EF=BC=88Debia?= =?UTF-8?q?n=2013=EF=BC=89=E9=80=82=E9=85=8D=E7=9A=84=E4=BA=A7=E7=89=A9?= =?UTF-8?q?=E9=87=8D=E6=89=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上一版把 arm64 适配的代码推了上去,但没有重打产物 —— Release 上挂的 三件套仍是旧的,不含那次修复。这一版把产物补齐,并首次发布 arm64 的两份。 改的就一件事:版本号 1.0.10 → 1.0.11(packaging/VERSION 是唯一真源, 同步 backend/drouter-web.py 的 VERSION_FALLBACK 与 drouter-update.py 的兜底值)。 ⚠️ 全仓 grep '1.0.10' 会命中几十处,绝大多数是「1.0.10 修 / 1.0.10 起」这类 历史注释,指的是那个版本做过的事,**一个都没动** —— 改了等于篡改历史。 README 更新日志补 v1.0.11 段,写明这次适配的实测机型与分架构产物清单: 本体 drouter_1.0.11_all.deb Architecture: all,各 CPU 通用 离线包 drouter-1.0.11-offline-amd64.tar.gz / -arm64.tar.gz 镜像 drouter-1.0.11-docker.tar / drouter-1.0.11-arm64-docker.tar 关于「amd64 有没有实质更新」:代码逻辑上没有 —— · _read_bios() 新增的设备树分支在 x86 上不触发(有 EFI/DMI 时走原分支, 结果与改动前逐字节一致,只是多返回 fw_type / is_dt / compat 三个字段); · _deb_arch() 在 amd64 上返回 amd64,拼出的离线包名与原写死的完全相同。 但「只重打 arm」这条路走不通,两个硬约束: 1. deb 是 Architecture: all 的**单包**,不存在「arm 版 deb」; 2. 离线包里内含本体 deb,本体一变,amd64 那份离线包装出来的就是旧 deb。 所以这次是全量重打(deb 1 + 离线包 2 + 镜像 2)。 --- README.md | 42 +++++++++++++++++++++++++++++++++++++++ backend/drouter-update.py | 2 +- backend/drouter-web.py | 2 +- packaging/VERSION | 2 +- 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 145a2c2..c8c166f 100644 --- a/README.md +++ b/README.md @@ -1003,6 +1003,48 @@ sudo apt purge drouter # 连配置一起删 ## 📝 更新日志 + +### v1.0.11 — arm64(Debian 13)适配 + +**不改动配置存储格式**(老配置直接可用)。 + +这一版是为 ARM 开发板做的架构适配。实测机型: +**Armbian 26.8.1 trixie(Debian 13.6)/ aarch64 / 内核 6.18.35-ophub**(Amlogic S912 板)。 + +#### 1. 修掉 ARM 板被误报成「传统 BIOS」 + +`_read_bios()` 原先只看两件事:`/sys/firmware/efi` 在不在、`/sys/class/dmi` 下的字段读不读得到。 +x86 上这样够用(UEFI 与传统 BIOS 二分),但 **ARM 板两个都没有** —— 它走 U-Boot + 设备树启动, +从来没有 SMBIOS/DMI。于是这类机器一律落到 else 分支,系统概览显示「传统 BIOS」, +厂商 / 版本 / 日期还全是空白。**ARM 开发板上根本没有 BIOS 这个东西,这一行是错的。** + +新增设备树分支,判据顺序 **EFI → 设备树 → BIOS**(顺序不能换:树莓派 4 这类既能以 EFI +也能以设备树启动的机器,应当优先认 EFI);`compatible` 属性按 NUL 切开取第一条 +(原样返回会把一整串匹配标识连着空字符一起塞给前端);没有 DMI 厂商时拿设备树板名兜底。 + +#### 2. 更新模块不再给 arm64 下发 x86 离线包 + +离线包是分架构发布的(包里几百个 .deb 全是某一个 CPU 的二进制),但资源名原先写死 +`-offline-amd64`。arm64 机器上点「查看更新内容并升级」会列出并下载一份 x86 离线包, +**白白传几十 MB,然后在装包阶段炸依赖校验**。改为按 `dpkg --print-architecture` 拼名, +并对带架构后缀的附件在**下载前**先拿官方 SHA256SUMS 核对存在性 —— 没有就明确报错, +提示改用各 CPU 通用的 deb 包。 + +#### 3. 产物开始分架构发布 + +| 附件 | 适用 | +|---|---| +| `drouter_1.0.11_all.deb` | 本体,`Architecture: all`,**各 CPU 通用** | +| `drouter-1.0.11-offline-amd64.tar.gz` | x86_64 离线包(断网可装) | +| `drouter-1.0.11-offline-arm64.tar.gz` | aarch64 离线包(断网可装) | +| `drouter-1.0.11-docker.tar` | amd64 镜像 | +| `drouter-1.0.11-arm64-docker.tar` | arm64 镜像 | + +验证范围、实测数据与已知差异全部写在 `docs/07-arm64-适配说明.md`。 +想在自己的板子上复验,可以跑 `python3 devtools/verify-arm64.py`(只读,不改系统)。 + +> ⚠️ **只对一个发行版做过实测。** 别的 arm64 Debian 衍生版(Ubuntu / Raspberry Pi OS / +> 其他 Armbian 板型)未验证,请先按说明文档自检再上生产。 ### v1.0.10 — 全站中英双语 + 修掉「文字被压成竖排」的排版缺陷 **不改动配置存储格式**(老配置直接可用)。 diff --git a/backend/drouter-update.py b/backend/drouter-update.py index 3cd7bbc..5259d66 100644 --- a/backend/drouter-update.py +++ b/backend/drouter-update.py @@ -170,7 +170,7 @@ def app_version(): return v except Exception: pass - return '1.0.10' + return '1.0.11' def parse_ver(v): diff --git a/backend/drouter-web.py b/backend/drouter-web.py index e7d7079..8f9aecd 100644 --- a/backend/drouter-web.py +++ b/backend/drouter-web.py @@ -74,7 +74,7 @@ BUILD_FLAG = '/etc/drouter/BUILD_MODE' # 早先版本号在 openapi 里硬编码,于是「页面显示什么版本」和「包管理器认为 # 是哪个版本」是两条互不相干的线,只能靠人手记着同步 —— 漏一次就是一个 # 改不掉的 bug(apt 按 control 认版本,文件名是 1.0.9 它就当 1.0.8)。 -VERSION_FALLBACK = '1.0.10' +VERSION_FALLBACK = '1.0.11' _VERSION_READ = [False] diff --git a/packaging/VERSION b/packaging/VERSION index 7ee7020..59e9e60 100644 --- a/packaging/VERSION +++ b/packaging/VERSION @@ -1 +1 @@ -1.0.10 +1.0.11