brew安装程序包如何绕开墙的办法

上次说过用brew安装应用的时候碰上“curl: (7) couldn’t connect to host 的问题”,去掉了代理访问虽然正常了,但由于很多应用还是托管在sourceforge上,而sourceforge由于被墙的缘故,所以使用brew安装的时候还是会报错。

象我安装ImageMagick的时候,就出现:

$ brew install ImageMagick

Warning: Your Xcode (4.4.1) is outdated

Please install Xcode 4.6.

==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/imagemagick-6.8.0-

curl: (56) Recv failure: Connection reset by peer

Warning: Bottle installation failed: building from source.

==> Downloading http://downloads.sf.net/project/machomebrew/mirror/ImageMagick-6.8.0-10

curl: (56) Recv failure: Connection reset by peer

Error: Download failed: http://downloads.sf.net/project/machomebrew/mirror/ImageMagick-6.8.0-10.tar.gz
如何解决这个问题呢?有多种方法:

  1. 一是跳过下载步骤,事先下载程序包,放到/Library/Caches/Homebrew/ 目录中,就可以继续。不过讨厌的是你不知道需要依赖多少个包的时候,这一个个下实在是浪费功夫。
  2. 修改下载目标源,直接把sf.net的地址给替换掉,一样麻烦。
  3. 使用代理,让curl通过代理来访问。编辑$HOME/.curlrc文件,增加“–socks5 127.0.0.1:1080”即可(替换成你自己的代理),这样你在brew install安装的时候,相应curl就会通过socks代理访问,从而成功下载完成安装。方便简单,就是你需要自己设置一个socks代理。

curl: (7) couldn’t connect to host 的问题

使用Cloud Foundry过程中,vmc push 遇到错误“net/http.rb:799: [BUG] Segmentation fault”,原因见:Fixing a Segmentation Fault in Ruby 1.9.3 ,主要是vmc用到了openssl库,和使用MacPorts依赖的库产生冲突。(这个问题下次再说)

查问题的时候,发现抱怨MacPorts较多,选择用Homebrew替换MacPorts,卸载了MacPorts,安装Homebrew,使用命令:

$ brew install wget
测试出现错误:“curl: (7) couldn’t connect to host”。

$ curl -v http://localhost
发现开始就去连接本地的socks proxy 服务器,而我又没起该代理服务器。于是连接上代理服务器,再做测试,提示:“Empty reply from server mac”。

干脆去掉默认代理连接,打开.bash_profile,注释:

#export http_proxy='http://localhost:1080' $ curl localhost <html><body><h1>It works!</h1></body></html>

一切就正常了。