今天用一台新的服务器装发包器,结果git炸了。

问题描述:git clone的时候

1
fatal: unable to access 'https://github.com/emmericp/MoonGen.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.

重新装git无用,简直了。

第一步

据说是gnutls的问题,需要用openssl来bypass,简单来说就是装openssl并且用它来编译git。

1
2
3
4
5
6
7
8
sudo apt-get update
sudo apt-get install build-essential fakeroot dpkg-dev
sudo apt-get build-dep git
mkdir ~/git-openssl
cd ~/git-openssl
apt-get source git
dpkg-source -x git_2.7.4-0ubuntu1.5.dsc
cd git-2.7.4

具体的git_2.7.4-0ubuntu1.5.dsc是看git-openssl下生成的文件,cd进的目录也是。

PS:中间遇到软件源的问题,我直接把另一台机器的软件源复制过来覆盖了。

第二步

./debian/control中所有的libcurl4-gnutls-dev改成libcurl4-openssl-dev

./debian/rules中的TEST=test删了,这个选项大概率过不了,而且特别浪费时间。

然后编译

1
2
sudo apt-get install libcurl4-openssl-dev
sudo dpkg-buildpackage -rfakeroot -b

最后安装package

1
sudo dpkg -i ../git_2.7.4-0ubuntu1.5_amd64.deb

第三步

不清楚这一步是不是需要的,不像验证了,干脆写下来。

把本机的rsa key公钥添加到了自己的github上。

PS:我感觉应该是没用的,理论上应该是没用的。

第四步

这种方法在我的服务器上只能通过ssh下载,如果通过https下载会出现

1
Unknown SSL protocal error in connection to github.com:443

所以把git clone的所有https改成ssh

然后如果有submodule,很遗憾只能手动改,用grep找一下https://github.com/替换掉。

grep -rl "https://github.com/" ./

感想

当看到服务器上装了desktop的时候,我就有一丝不祥的预感。