收起左侧

fnOS 系统更新失败 Bug 反馈

1
回复
25
查看
[ 复制链接 ]

2

主题

0

回帖

0

牛值

江湖小虾

社区上线纪念勋章

upload 附件:fnos_update_logs.zip

# fnOS 系统更新失败 Bug 反馈(按社区规范格式)

一、发帖时必须提供的基础信息

系统版本

  • 设备架构: X86_64
  • 系统版本: fnOS 1.2.0302(更新目标版本 1.2.0401,内核 6.18.18.c952-trim)

设备环境

  • 物理机 / 虚拟机: 虚拟机(virtio 磁盘驱动)
  • 网络: 局域网(IP 192.168.31.4,网关 192.168.31.1,DNS 192.168.31.1)
  • 访问方式: 局域网网页端 http://192.168.31.4:5666
  • 浏览器: Edge / Chrome 最新版
  • 客户端: 仅网页端操作

BUG 现象

通过局域网网页端登录 fnOS,进入"系统设置 - 系统更新",点击"立即更新"后出现以下现象:

  1. 更新进度卡在"下载"阶段较长时间后,提示"更新失败",且反复重试多次均失败;
  2. 失败后系统自动回滚,但回滚不彻底:内核镜像已安装(linux-image-6.18.18.c952-trim),
    而配套的 linux-modules-trim-、linux-headers-、trim 包未安装;
  3. 重启后系统以新内核运行,但 ZFS 等内核模块缺失,系统日志持续报错:
    • "The ZFS modules cannot be auto-loaded."
    • trim 守护进程每 5 秒执行 zpool status 均返回 WEXITSTATUS=1;
  4. 在系统重启后再次点击"立即更新",若下载文件完整则一次成功(本次成功时 trim 包 342M 完整下载),
    说明问题与下载文件的完整性强相关。

附:完整根因分析与证据见本文件"二、详细分析",关键日志已按要求打包(见"四、日志文件")。

出现频率

  • 大版本更新(含 319M 的 trim 包、96M 的 linux-image 包)时:必现(多次重试均失败)
  • 小版本/小文件更新:偶现
  • 重启后重试:可能成功(取决于 CDN 节点与下载完整性)

联系方式

  • 飞牛私有云 fnOS27 微信群昵称:Lonely Rye

二、详细分析

根因 1:liveupdate 下载 .deb 包后不做完整性校验(主因)

  • liveupdate 从 download.liveupdate.fnnas.com 下载 .deb 到 /var/tmp/trim-update/ 后,
    不校验文件大小、不校验 SHA256、不校验 .deb 文件头,直接交给 dpkg -i 安装;
  • 大文件(319M trim 包、96M linux-image)下载不完整(实测曾出现仅下载 89M),
    dpkg 解压报错: "lzma decompression error: unexpected end of file or stream",随后整体回滚;
  • liveupdate status 返回的 JSON 中每个包都带 sign(SHA256)字段,但客户端未在安装前使用。

根因 2:更新失败回滚不彻底,产生"半更新"状态

  • 2026-08-09 02:07 更新尝试:linux-image-6.18.18.c952-trim 安装成功,
    后续包(trim 1.2.0401 等)未安装即中断回滚;
  • 重启后系统直接运行新内核 6.18.18.c952-trim,但配套模块缺失,ZFS 无法加载;
  • dpkg 日志(/var/log/dpkg.log)证实:02:07:22 install linux-image... -> 02:07:57 status installed,
    之后无任何其他包的安装记录。

根因 3:updatemgr 服务持续崩溃循环

  • /var/log/updatemgr/error.log 显示自 2026-08-05 起持续报错:
    "socket /var/run/trim_app_cgi/updatemgr is running"(每 5 秒一次);
  • info.log 显示 updatemgr 内部 queryTransportRet**oop 每 5 秒 panic 一次,持续多日;
  • 该崩溃循环与 2026-08-09 更新失败时间段(02:07-02:11)完全重叠;
  • 系统重启后恢复(info.log 出现 "lazy apply success")。

复现与对比验证

  • 2026-08-09 02:28 重启后再次点击"立即更新",全程监控下载缓存:
    fnos_Mainland-PE_x86_1.2.0401_2328.deb 完整下载 342M,随后 trim 1.2.0401、
    linux-modules-trim-extra、linux-image-amd64、linux-headers x2、linux-libc-dev 全部安装成功;
  • 同一台机器、同一网络,只要下载完整即可一次成功,进一步证明问题在下载完整性。

三、建议修复方向

  1. liveupdate 下载完成后校验文件大小与 SHA256(sign 字段),不匹配则删除重试(建议至少 3 次);
  2. 检查下载响应 Content-Length 与实际接收字节数一致性,支持断点续传;
  3. 改进回滚机制:内核镜像等不可回滚的包应最后安装,或安装前备份 bootloader,避免"半更新"状态;
  4. updatemgr 启动时检测 stale socket:确认旧进程不存在则清理 socket 文件后重新监听。

四、日志文件

以下日志文件已按社区要求整理并打包(附件 fnos_update_logs.zip,包内附 README.txt 说明):

文件 来源 说明
updatemgr_error.log /var/log/updatemgr/error.log(摘录) updatemgr 崩溃循环(socket is running,08-05 ~ 08-09 共 61727 次,每 5 秒一次)
updatemgr_info.log /var/log/updatemgr/info.log(摘录) updatemgr 运行日志(6272 次 panic,含完整堆栈:trim-cgi-sdk.Listen(),重启后恢复)
dpkg.log /var/log/dpkg.log 更新安装记录(02:07 仅 linux-image c952 部分安装;02:28 全部包成功)
journalctl_trim_update.txt journalctl -t trim-update 重启后 journal 已轮转(-- No entries --),证明日志随重启丢失
journalctl_trim_update_captured_excerpt.txt 故障现场抓取(7/17 与 08-09) trim-update 更新/失败现场日志(updating / failed to install / WEXITSTATUS)
liveupdate_status.json /usr/trim/bin/liveupdate status 更新包元数据(url/size/sign);反馈时已无待更新包
syslog_zpool_errors.txt /var/log/syslog(摘录) ZFS 模块无法自动加载、zpool status 轮询 WEXITSTATUS=1

说明:

  • updatemgr 原始日志较大(error.log 6.2M、info.log 11.5M、syslog 35M),本次提供关键摘录;如需完整原始文件可另行提供;
  • 系统诊断日志请按社区要求,在"日志应用 - 更多 - 系统诊断日志"导出后随帖上传;
  • 如附件超过论坛大小限制,可通过网盘/飞牛外链分享提供。
收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

436

主题

1万

回帖

0

牛值

管理员

fnOS1.0上线纪念勋章

我们这边联系你具体看看

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则