2.1 KiB
2.1 KiB
1.0.2 SSH 首启自动重启超时修复
现象与证据
- 真实 TF 卡的 FAT 状态文件曾显示首启成功,但设备没有按预期自动重启,SSH 端口也未监听。
- Linux 分区 journal 显示 SSH 配置校验、主机密钥生成和
ssh.service启用已经完成,随后matrix-image-firstboot.service因启动超时被终止。 - 首启脚本在自身仍运行时删除 unit 并执行
systemctl daemon-reload,导致 systemd 丢失该运行中 unit 的显式超时定义并回落到默认启动超时;成功状态又在清理和同步之前写入,因此形成假成功。
修复
matrix-image-firstboot.service改用TimeoutStartSec=infinity,避免不同 TF 卡速度导致合法的离线部署被中止。- 首启脚本不再在自身运行时执行
systemctl daemon-reload;unit 文件仍在重启前删除,新的 systemd 实例启动后自然不再加载它。 - 成功状态延后到秘密和临时文件清理、首启 unit 禁用、工作目录删除及全盘同步之后,仅在请求重启前写入。
- 保留先前
/run/sshd、受管 SSH 策略、需密码完整 sudo 权限及禁止 root SSH 的修复。
验证结果
- 聚焦 Python 测试:12 项通过。
- 完整 Python 回归:305 项通过,8 项跳过。
- Node 前端回归:61 项通过。
- shell 语法、远端 rootfs 安装及只读验证通过。
- 最终 IMG 从官方基础镜像重新复制构建;官方基础镜像 SHA-256 保持不变。
- 最终 IMG 的 FAT 配置双槽与旧 1.0.2 工厂配置逐字节一致;bundle 与当前源码一致。
- rootfs 中首启 unit、受管 SSH 配置和服务启用状态正确,且不含 SSH 主机密钥、NetworkManager 连接、项目凭据或设备数据。
旧验收哈希已被新的 1.0.2 正式哈希取代,不得继续作为可发布镜像使用。真实设备的 SSH 登录、sudo、root 拒绝和再次重启验证继续以本轮 TF 卡验收为准。
后续真实 sudo 验收又发现基础镜像的 Defaults rootpw 和旧 pi NOPASSWD,本归档对应哈希再次被最终 sudo 策略修复哈希取代。