浏览器走 SOCKS 正常,普通 SSH 会话也正常,可 MacPorts 在同步 ports tree 时却卡住。在再加一个 SSH 选项之前,先看清源的 URI。

rsync://host/module 指的是 rsync 守护进程服务。用 rsync -e ssh user@host:path 的示例走的是远程 shell,需要能访问该主机上合适的账号。公共 rsync 镜像并不会因为客户端有 ProxyCommand 就获得 SSH 登录。

三种前置条件不同的路径

路径必须具备什么
通过 HTTP 或 HTTPS 的 ports tree 快照受支持的快照源与可用的 HTTP 代理配置
经 Web 代理访问 rsync 守护进程使用 RSYNC_PROXY 的 rsync 客户端,以及允许 CONNECT 到守护进程端口 的代理
经 SSH 的 rsync一个 SSH 端点、账号与远端 rsync 配置

MacPorts 在 sources.conf 中把 HTTP 与 HTTPS 的 tarball 源记录为常用同步传输不可用时的替代方案。应为已安装的版本选择项目支持的源;更改 URI 方案并不等于获准指向任意归档。

rsync 的 RSYNC_PROXY 是 Web 代理机制,不是通用的 SOCKS URL 设置。守护进程路径通常需要 873 端口,而一个其他方面正常的 Web 代理可能有意拒绝它。另一个 RSYNC_CONNECT_PROG 机制可以用辅助程序替换直连守护进程套接字,但该辅助程序必须提供预期的字节流。

最后,要弄清失败的是 MacPorts 的哪个阶段。更新 ports tree、获取归档与下载某个 port 的源文件并不一定使用同一种传输方式。修好第一条路径,并不能证明其余路径也共享它的代理。

相关文章