2010年10月12日火曜日

SOCKS 経由 git

Chromium OS のソースをゲットしようと昨日からいろいろやってんだけど,以下のエラーでなんだか先に進まない.

 fatal: failed to find delta-pack base object

Web をちょっと調べたら repo init するときに http でリポジトリにアクセスしてるのがダメみたいなことが書いてあって,git プロトコルでやれとのこと.

で,以下をトライ(http と微妙にパスが違うことに注意)

 $ repo init -u git://git.chromium.org/manifest -m minilayout.xml

しかし…会社からやってるんだけど git のポートは直接外に出られないことが判明.# 情シスイーカンゲンにしろって,まったくアホか.

なので,git で SOCKS 使えないか調査したところ, GIT_PROXY_COMMAND っていう環境変数でフィルタコマンドが設定できる模様.
となれば netcat でというところで同じことをやっている人発見.

Using GIT through a SOCKS proxy

http://twopenguins.org/tips/git-through-proxy.php

以下自分でやった手順.
  1. ssh の -D で手元に SOCKS proxy を作る(以下10011ポートで開けたことにする).相手は自宅の(ry.
  2. 以下の内容のスクリプト作成.以下これを gitsocks.sh とする.

     #!/bin/sh
     /usr/bin/nc -X 5 -x localhost:10011 $*
  3. $ GIT_PROXY_COMMAND=~/gitsocks.sh; export GIT_PROXY_COMMAND
  4. んで以下.

    repo init -u git://git.chromium.org/manifest -m minilayout.xml
    と,このままだと .repo/manifest.xml(->manifests/minilayout.xml)の中に http: がべた書きしてあるので,これを以下のように修正して全部 git プロトコル経由にしちゃう.


     --- minilayout.xml.orig    2010-10-12 14:01:49.000000000 +0900
     +++ minilayout.xml    2010-10-12 14:05:48.000000000 +0900
     @@ -1,7 +1,7 @@
      <?xml version="1.0" encoding="UTF-8"?>
      <manifest>
        <remote  name="cros"
     -           fetch="http://git.chromium.org/git"
     +           fetch="git://git.chromium.org"
                 review="codereview.chromium.org" />
        <default revision="refs/heads/master"
                 remote="cros" />

    んで repo sync すると… さぁうまくいくかな.

    0 件のコメント:

    コメントを投稿