Skip to content

v0.10.0 — NFSv4 远程挂载(SSH 隧道)+ 退出清理修复

Choose a tag to compare

@benz-ai-x benz-ai-x released this 18 Sep 02:01
· 84 commits to main since this release

远程服务器的目录经 SSH 隧道以 NFSv4 挂载到本机,像本地磁盘一样直读直写。决策落档 ADR-007;四轮架构评审同日收官(ADR-008)。

NFS 远程挂载(ADR-007)

  • 仅 NFSv4:单端口 2049、一条 SSH -L 隧道承载该服务器全部挂载;macOS 自带客户端,本地零内核扩展(对比 SSHFS 的 macFUSE)
  • 服务器一键安装:设置窗「远程挂载」页填路径 →「一键安装 / 更新导出」——发行版探测(apt/dnf/yum)+ 装包 + 写应用专属 exports(仅导出给 127.0.0.1,不对公网暴露)+ 2049 验证,幂等可重复执行
  • 本地挂载:默认 /Volumes/<挂载名>(可自定义);首次挂载弹一次管理员授权(sudoers 规则仅限 mount_nfs/umount 两个命令),之后免密
  • 断线自愈:hard 挂载 + 隧道断开立即强制卸载(Finder 不卡死)→ 网络恢复自动重挂;应用退出先卸载后断隧道
  • 属主统一映射(all_squash):服务器/Mac 用户 UID 不一致时文件属主统一到 SSH 用户,一键安装自动处理目录属主
  • 密钥登录的服务器:sudo 密码输入一次存 Keychain,或直接支持 NOPASSWD
  • 菜单栏新增「远程挂载 ▸」分区(挂/卸/打开目录/状态徽标);状态行挂载计数

退出清理修复

  • AppleEvent 退出(osascript / 注销 / 重启 / 升级替换)曾跳过全部清理——NFS 会话的 ssh 泄漏成孤儿进程占住本地端口,下个实例挂载死循环(真机实测定位);清理链收进幂等 _shutdown 并挂 NSApplicationWillTerminate,两条退出路径同一咽喉
  • 启动时自动清扫上个实例崩溃残留的陈旧挂载

设置窗

  • 「远程挂载」页与「隧道」页同款 master-detail 布局(共享服务器选中);偏好设置窗口加宽至 1200×880

架构评审四轮收官(ADR-008)

SSH 会话三件套收敛为 SshSession(镜像 3→1)、prepare 校验分域(303→80 行)、运行态投影 RuntimeProjection 单一 seam、ForwardState/MountState NamedTuple 化、六件次级清偿(含一处行为修复)——剩余候选的「暂不做 + 触发条件」清单落档 ADR-008。

验证

pytest 1893 绿 + node 124 绿;双服务器真机 E2E(一键安装 / 挂载 / 读写核对 / 断线恢复 / 干净卸载 / 现场还原);DMG Developer ID 签名 + Apple 公证 + staple 通过。