# 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 策略修复哈希取代。