使用sudo的macport selfupdate在代理后面失败


0

我刚刚安装了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

Answers:


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使用代理。默认情况下,端口使用rsync来管理其更新。RSync可以使用代理环境设置(用于mre的man rsync)

    导出RSYNC_PROXY = proxy.example.com:8080

    请注意rsync代理的大小写,以及不需要http://的事实

那应该做。然后,您可以运行selfupdate以获得最新版本的端口。


我怀疑在大型公司防火墙和代理之后,我将无法让IT进行任何更改。但我希望这会奏效。谢谢。
悲惨变量
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.