Repository navigation
v0.10.0 — NFSv4 远程挂载(SSH 隧道)+ 退出清理修复
远程服务器的目录经 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 通过。