给mercurial hg设置goagent代理

前言

和谐社会,但是我们程序员是非常单纯的,我们只想查查技术资料,看看开源代码。但是由于gov对google的封锁,导致我们无法访问code.google.com,有不少开源项目在这里,这叫我们如何是好?我的目的只是为了获得vim的源代码而已,vim的源代码就是托管到code.google.com上的,用mercurial这个CVS工具。在非敏感时期访问code.google.com就非常慢了,在这敏感时期直接访问不了。


正文

现象,没有设置hg代理或者终端代理之前,hg命令无法访问google code网站。
设置终端代理:
cpp export https_proxy="127.0.0.1:8087" export http_proxy="127.0.0.1:8087"

然后执行:

hg clone https://vim.googlecode.com/hg/ vim_src

由于我们访问的是https的服务器,如过我们只加入http_proxy,则会有下面的错误提示:

中止: vim.googlecode.com certificate error: certificate is for www.google.com
(configure hostfingerprint c2:8a:1e:9c:a8:00:be:02:4c:2a:53:60:2b:09:50:d8:ee:5c:bc:68 or use --insecure to connect insecurely)

然后尝试执行:

hg clone https://vim.googlecode.com/hg/ vim_src --insecure

则是下面的结果:

warning: vim.googlecode.com certificate with fingerprint c2:8a:1e:9c:a8:00:be:02:4c:2a:53:60:2b:09:50:d8:ee:5c:bc:68 not verified (check hostfingerprints or web.cacerts config setting)
正在请求全部修改
warning: vim.googlecode.com certificate with fingerprint c2:8a:1e:9c:a8:00:be:02:4c:2a:53:60:2b:09:50:d8:ee:5c:bc:68 not verified (check hostfingerprints or web.cacerts config setting)
正在增加修改集
正在增加清单
正在增加文件改变
事务中止!
完成回滚
中止: connection ended unexpectedly

  1. 建立mercurial hg的配置文件到家目录

    cp /usr/share/doc/mercurial-common/examples/example.hgrc ~/.hgrc
  2. 向.hgrc的末尾添加以下内容:

       [hostfingerprints]
       vim.googlecode.com=c2:8a:1e:9c:a8:00:be:02:4c:2a:53:60:2b:09:50:d8:ee:5c:bc:68        
       [http_proxy]
       host=127.0.0.1:8087
       [web]
       cacerts = /etc/ssl/certs/ca-certificates.crt

保存,搞定。但是我们还是要搞清楚是怎么一回事,在这个链接官方说了mercurial1.7之后:

When connecting to an HTTPS server, it will now verify the server's certificate correctly and reject the connection if the server identity can't be confirmed - but only if Certification Authorities (CAs) have been configured

很多操作系统都有一些根证书让你决定是否信任,对于debian系列linux发行版:可以在hgrc中指定信任的证书,也就是上面我们添加到.hgrc中的最后一项。
另外一个方法是Host certificate fingerprints(指纹),也就是我们上面添加到.hgrc中的第一项。该网站指纹值就是刚才出现warning。

另外http_proxy的格式

[http_proxy]
host = foo.bar:8000
passwd = password
user = username

你可能感兴趣的:(mercurial)