2011年11月25日金曜日

gitとプロキシサーバ

ソースコードバージョン管理というと、最近はgitが主流になっているように見えます。
数年前バージョン管理サーバを立ち上げたときは、
cvsはもういやだったこと、
gitのWindowsクライアントが見当たらなかったこと、
プロキシ対応や秘匿性確保の観点でhttpsを利用したかった等
いろいろあってsvnを選択し、
今でもまだ使っています。
もし今立ち上げるなら第一候補はgitにするでしょうね。

ただgitがsvnに劣っているのがプロキシ対応だったりします。
先日androidのカーネルソースの取得の際ちょっと悩んだので
ここに書き残しておきます。
最近はちょっと状況が変わっていますが。

プロキシサーバの設定を変更できる場合


corkscrewを使うのがよいでしょう。
corkscrewは任意のTCPクライアントアプリケーションを
プロキシサーバ経由でサーバに接続する汎用のツールですが、
プロキシサーバ側がその動作を許可している必要があります。
gitの場合ポート番号9418の利用を許可してもらう必要があり、
squidなら設定ファイル"squid.conf"を

acl SSL_ports port 443 9418
http_access deny CONNECT !SSL_ports

のような状態にしておくことになります。

プロキシサーバ側の設定が終わってしまえば
あとはクライアント側の設定で、

# su -
# apt-get install corkscrew

なりでcorkscrewをインストールして、

# echo '#!/bin/bash' > /usr/local/bin/git-proxy.sh
# echo 'CORKSCREW=`which corkscrew`' >> /usr/local/bin/git-proxy.sh
# echo '$CORKSCREW <プロキシサーバの名前かIPアドレス> <プロキシサーバのポート番号> $1 $2' >> /usr/local/bin/git-proxy.sh
# chmod 777 /usr/local/bin/git-proxy.sh
# exit
$ echo 'export GIT_PROXY_COMMAND=/usr/local/bin/git-proxy.sh' > ~/.bashrc
$ exit

を実行すれば普通にgitが使えるはずです。

プロキシサーバの設定を変更できない場合


プロキシサーバがgitに対応できないときはhttpを使います。
クライアントからgitでアクセスしてるところを、
軒並みhttpに変えてやればいいわけです。
例えばandroidのソースを取るのにrepoを使うとすれば、

$ cd ~
$ mkdir myandroid
$ cd myandroid
$ curl http://android.git.kernel.org/repo > ./repo
$ chmod a+x ./repo
$ ./repo init -u git://android.git.kernel.org/platform/manifest.git
$ ./repo sync

とするところを、

$ git config --global http.proxy "http://<プロキシサーバの名前かIPアドレス>:<プロキシサーバのポート番号>/"
$ cd ~
$ mkdir myandroid
$ cd myandroid
$ curl --proxy <プロキシサーバの名前かIPアドレス>:<プロキシサーバのポート番号> http://android.git.kernel.org/repo > ./repo
$ chmod a+x ./repo
$ vi ./repo
REPO_URL='git://android.git.kernel.org/tools/repo.git'
の行を
REPO_URL='http://android.git.kernel.org/tools/repo.git'
に変更。
$ ./repo init -u http://android.git.kernel.org/platform/manifest.git
$ vi .repo/manifests/default.xml
fetch="git://android.git.kernel.org/"
の行を
fetch="http://android.git.kernel.org/"
に変更。
$ vi .repo/repo/repo
REPO_URL='git://android.git.kernel.org/tools/repo.git'
の行を
REPO_URL='http://android.git.kernel.org/tools/repo.git'
に変更。
$ ./repo sync

とすればいいだけです。
ただし、すべてのgitサーバがhttpが使えるように
きちんとメンテナンスされているかというと
そうでもないんですよね。
そんなときは…あきらめるしかなさそうです。

0 件のコメント:

コメントを投稿