macport selfupdate 使用 sudo 在代理后失败

macport selfupdate 使用 sudo 在代理后失败

我刚刚安装了 macport,但 selfupdate 失败了。我怀疑这是因为我在公司网络上使用了代理,但不知道该如何修复。

对于背景,我已经设置了代理:

$> typeset -p http_proxy
declare -x http_proxy="http://proxy:8080"

但 macports 失败了getaddrinfo

$> sudo port -d selfupdate
DEBUG: Copying /Users/i063510/Library/Preferences/com.apple.dt.Xcode.plist to /opt/local/var/macports/home/Library/Preferences
DEBUG: MacPorts sources location: /opt/local/var/macports/sources/rsync.macports.org/release/tarballs
--->  Updating MacPorts base sources using rsync
rsync: getaddrinfo: rsync.macports.org 873: nodename nor servname provided, or not known
rsync error: error in socket IO (code 10) at /SourceCache/rsync/rsync-42/rsync/clientserver.c(105) [receiver=2.6.9]
Command failed: /usr/bin/rsync -rtzv --delete-after rsync://rsync.macports.org/release/tarballs/base.tar /opt/local/var/macports/sources/rsync.macports.org/release/tarballs
Exit code: 10
DEBUG: Error synchronizing MacPorts sources: command execution failed
    while executing
"macports::selfupdate [array get global_options] base_updated"
Error: /opt/local/bin/port: port selfupdate failed: Error synchronizing MacPorts sources: command execution failed

有趣的是,curl成功了却ping失败了:

$> curl http://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
$> ping google.com
ping: cannot resolve google.com: Unknown host

答案1

您正在为 http 连接设置代理。curl 和您的 Web 浏览器使用 http,但 rsync 不使用。这解释了错误。

理想情况下,你需要请求代理管理员更改代理以允许 rsync 通过,

如果没有,那么你也许能够按照此方法通过 http 代理进行同步博客

有三个步骤。要实现此功能,先决条件是您拥有代理地址、Mac 的管理员访问权限,并且代理支持 rsync 端口 (873/tcp)。

您可以通过以下方式测试连通性: http://rsync.macports.org:873,您将收到以下错误:

@RSYNCD: 30.0
@ERROR: protocol startup error

如果一切正常,那么您需要为 osx 设置 sudo 环境以让代理环境设置通过。

  1. 使用 编辑你的 sudoers 文件sudo visudo。你需要添加以下几行:

    默认值 env_keep += “http_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY RSYNC_PROXY” 默认值 env_keep += “ALL_PROXY NO_PROXY”

  2. 设置您的 http 代理

    导出 http_proxy=http://proxy.example.com:8080

    其中 8080 是代理的端口号

  3. 让 rsync 使用代理。默认情况下,port 使用 rsync 来管理其更新。RSync 可以使用代理环境设置(mre 的 man rsync)

    导出 RSYNC_PROXY=proxy.example.com:8080

    请注意 rsync 代理大写,并且它不需要 http://

这样就行了。然后您可以运行 selfupdate 来获取最新版本的端口。

相关内容