プロキシ下で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を実行できた。