git で "error: gnutls_handshake() failed:..." が出る場合

古いgitを使っていると、httpsでの通信時にエラーが出ることが。 例えば Debian5.0.4 / git-v1.7.12-315 source compiled の環境で以下のようなエラーが発生。

server01:~$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
Cloning into '/home/doracat/.rbenv'...

error: gnutls_handshake() failed: An unexpected TLS packet was received. while accessing https://github.com/sstephenson/rbenv.git/info/refs
fatal: HTTP request failed

server01:~$

新しいバージョンのgitをパッケージ導入できればそれが早いですが、ソースコンパイルして入れなおすとすればこんな感じ。 ちなみに libcurl4-openssl-dev 等の依存ライブラリは事前に導入しておく。

# gitのソースは /usr/local/src 以下に展開済み
server01:# cd /usr/local/src/git-v1.7.12-315
server01:# make clean
server01:# make configure
server01:# ./configure --prefix=/usr/local --with-openssl --with-curl
server01:# make
server01:# make install

無事に git clone 成功。

server01:~> git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
Cloning into '/home/doracat/.rbenv/plugins/ruby-build'...
remote: Reusing existing pack: 2793, done.
remote: Counting objects: 25, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 2818 (delta 12), reused 15 (delta 2)
Receiving objects: 100% (2818/2818), 478.64 KiB | 217 KiB/s, done.
Resolving deltas: 100% (1222/1222), done.
server01:~>