Quantcast
Channel: smokycat.info » ALMinium
Viewing all articles
Browse latest Browse all 2

UbuntuのGitがhttps越しにgit cloneしてくれない件

$
0
0

Mac の git ならどうってことないのに、 Ubuntu の git は Redmine (というかALMinium) 上に作った git リポジトリに対して git clone https://… とかやってアクセスしようとすると、

error: gnutls_handshake() failed: A TLS warning alert has been received.

とか怒ってくるです。
git version 1.7.9.5 さんはまだ怒ってくれるけど、 git version 1.9.1 さんは無言で 128 返してくるからノーヒントすぎてツライ。

オレオレ証明書使ってるのがまずいのかと思い、証明書をひっぺがして /usr/share/ca-certificates/smokycat/ 以下とかに置いて sudo dpkg-reconfigure ca-certificates とかしてシステムに信用させてもダメ。

stackoverflow error: gnutls_handshake() failed GIT repository には、類似の問題が載ってて、

error: gnutls_handshake() failed: A TLS packet with unexpected length was received. while accessing https://github.com/blah/blah.git/info/refs

っていう問題に対して、「gnutls無しでgitをビルドして使うんだ!」という解決方法が書いてある。
(め、めんどくせー・・・・・)

git clone http://…. ならよくて、 git clone https://…. ならダメなのです。
libcurl-gnutls に依存している git-remote-https を使ってるのがダメなようです(libgnutls はOK)。

色々探した結果、やっぱり自分でgitをコンパイルするしかないなーって結論に至りました。
調べた感じ、komamitsu.log様に書いてあった方法が最も簡潔だったので実行です。

# 全historyを落としてきたら重すぎるので、HEADだけ取得。
# ギットギットしすぎ。
git clone --depth=1 https://github.com/git/git.git
cd git
autoconf
sudo aptitude install libcurl4-openssl-dev
./configure --with-openssl --with-curl
make
sudo make install

これで /usr/local/bin 以下に最新のgitができ、 /usr/local/libexec/git-core/ 以下に、 libcurl-gnutls に非依存の git-remote-https ができます。
これだとイケる!詳細は不明!

1. 余談

github はこんなことしなくても git clone https://github.com/… とかで clone できるし、あまつさえ push すらできる。
なぜできてるのか?と思って、 github が使ってるウェブサーバ調べてみたところ、 apache とか nginx とか書いてあるはずのところに「 GitHub.com 」って書いてあった。
独自のウェブサーバのようだ。

smokycat $ curl -is https://github.com/ | grep Server
Server: GitHub.com

先ほど挙げた、stackoverflowの質問 error: gnutls_handshake() failed GIT repository も、githubに関するものだったし、 gnutls のために github はずいぶん苦心したんだろうなぁと推測しました。


Viewing all articles
Browse latest Browse all 2

Trending Articles