プロキシ下でrepo sync (git clone)を実行する

さて、昨日の時点でプロキシ環境下でrepoのダウンロードとインストールまではできたので、次はrepo initによりローカルのリポジトリを初期化することが必要だが、repoもデフォルトではプロキシ下の環境には対応しておらず、普通に実行するとエラーとなってしまう。

$ repo init -u git://android.git.kernel.org/platform/manifest.git
Proxy could not open connnection to android.git.kernel.org:  Proxy authenticatio
n required
fatal: The remote end hung up unexpectedly
fatal: cannot obtain manifest git://android.git.kernel.org/platform/manifest.git

これに関しては既に解決方法が所々で公開されており、corkscrewという洒落た名のSSHトンネリングを使ってHTTPプロキシを超えるためのツールがあり、これと連携することで対処できるようだ。
私は@esmasuiさんに教えて頂いた株式会社ブリリアントサービスのAndroid情報公開用サイト(はてな)を参考にした。

Corkscrew is a tool for tunneling SSH through HTTP proxies.
Proxyが存在するネットワーク上でのgit使用 - BRILLIANT SERVICE


repo(git)をcorkscrewと連携するには以下の手順で作業を行う。

corkscrewをインストール

cygwin setupパッケージからweb/corkscrewを選択してインストールする。簡単だ。

プロキシコマンドの作成

corkscrewから参照されるプロキシコマンド(スクリプト)を作成しておく。

  • /usr/local/bin/proxy-cmd.sh
#!/bin/sh
corkscrew <プロキシサーバ名> <ポート> $1 $2 

私の環境もそうだが、認証が必要なプロキシサーバの場合は末尾に認証に使用するユーザ:パスワードを記述した認証用ファイルへのパスを記述する。

corkscrew <プロキシサーバ名> <ポート> $1 $2 /usr/local/bin/proxy_auth

認証用ファイルを同一パスに作成して、プロキシ認証に使用するユーザ名とパスワードを以下のように記述するだけだ。

  • /usr/local/bin/proxy_auth
<ユーザ名>:<パスワード>
.bashrcにプロキシコマンドを登録

既に作成した/usr/local/bin/proxy-cmd.shをcorkscrewから参照するための環境変数を登録するため、以下の行を追加する。

  • ~/.bashrc
export GIT_PROXY_COMMAND=/usr/local/bin/proxy-cmd.sh

これでOKだ。

実行結果
$ repo init -u git://android.git.kernel.org/platform/manifest.git
 :
 : 
 * [new tag]         android-sdk-tools_r6 -> android-sdk-tools_r6
 * [new tag]         android-sdk-tools_r7 -> android-sdk-tools_r7
From git://android.git.kernel.org/platform/manifest
 * [new tag]         android-1.0 -> android-1.0
 * [new tag]         android-2.3.3_r1 -> android-2.3.3_r1

Your Name  [Kazz]:_

名前とメールアドレス(オプション)を入力すれば、あとはrepo syncも動くはず。

$ repo sync

Initializing project platform/bionic ...
remote: Counting objects: 7670, done.
remote: Compressing objects: 100% (2743/2743), done.
Receiving objects:  27% (2071/7670), 892.00 KiB | 167 KiB/s
:

長かったが、これで自宅と仕事場の両方のPCからcygwinでrepo syncを実行できた。