通过代理转发 MacPorts 的 rsync 源
让 ports tree 的源协议与代理传输相匹配,而不是假定一个 SSH 示例也能修好 rsync 守护进程连接。
浏览器走 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 的源文件并不一定使用同一种传输方式。修好第一条路径,并不能证明其余路径也共享它的代理。