Note
|
このドキュメントは2006年のものです。これ以来、多くのことが行われています。このドキュメントは、主にあなたのWebホストがCGIに対応していない場合に関連します。 他のほとんどの人は、代わりに git-http-backend(1) を見る必要があります。 |
Apacheは、人々が自分でコンパイルするのが好きなパッケージの1つであり、それ以外の人は官僚主義者を夢見るDebianを好むため、すべての人に役立つガイドラインを提供することは不可能です。 このドキュメントをお気に入りのディストリビューションに合わせて作成するには、 git@vger.kernel.org のメーリングリストにフィードバックを送信してください。
必要なもの:
-
Apache Webサーバーを使用する
Debianの場合:
$ apt-get install apache2
Apache2 をデフォルトで起動するようにするには、 /etc/default/apache2 を編集して NO_START=0 を設定します。
-
以下の構成ファイルを編集できます。
これは /etc/httpd の下にあります。 そうでなければ、お手元のApacheのドキュメントを参照してください。
Debianの場合:
これは /etc/apache2 の下のファイルを編集できることを意味します
-
以下のようにして restart 可能です。
apachectl --graceful
しようとします。 もし、できない場合は、 apacheを停止して再起動してください。 注意: これにより、あなたサーバーへのアクティブな接続が中止される可能性があることに注意してください。Debianの場合:
$ /etc/init.d/apache2 restart
または
$ /etc/init.d/apache2 force-reload
(これは、同一の事をしていると思います)
これにより、 /etc/apache2/mods-enabled から /etc/apache2/mods-available へのシンボリックリンクを追加します。
-
ディレクトリをchownする権限がある
-
クライアントにGitをインストール
-
サーバーにGitがインストールされているか、クライアントにwebdavクライアントがあります。
実際には、これは、あなたがrootになれるか、事前構成されたWebDAVサーバーを使用していることを意味します。
Step 1: setup a bare Git repository
執筆時点では、git-http-pushはGitリポジトリをリモートで作成できません。 したがって、Gitを使用してサーバー側でそれを行う必要があります。 もう1つのオプションは、クライアントで空のベアリポジトリを生成し、それをWebDAVクライアントを使用してサーバーにコピーすることです(これは、Gitがサーバーにインストールされていない場合の唯一のオプションです)。
Apacheが提供するディレクトリのDocumentRootの下にディレクトリを作成します。 例として /usr/local/apache2 を使用しますが、 grep DocumentRoot /where/ever/httpd.conf
を試してあなたのrootを探してください:
$ cd /usr/local/apache/htdocs
$ mkdir my-new-repo.git
Debianの場合:
$ cd /var/www
$ mkdir my-new-repo.git
ベアリポジトリを初期化する
$ cd my-new-repo.git
$ git --bare init
オーナー権限をWebサーバーの資格情報に変更します。 grep ^User httpd.conf
と grep ^Group httpd.conf
を使って調べて下さい:
$ chown -R www.www .
Debianの場合:
$ chown -R www-data.www-data .
Apacheがどのユーザーとして実行されているかわからない場合は、代わりに chmod -R a+w .
を実行し、後で作成されるファイルを調べて、権限を適切に設定することができます。
apache2をrestartし、 http://server/my-new-repo.git がディレクトリリストを提供するかどうかを確認します。 そうでない場合は、apacheが正常に起動したかどうかを確認してください。
Step 2: enable DAV on this repository
まず、dav_moduleがロードされていることを確認します。 このためには、 httpd.conf に以下を挿入します:
LoadModule dav_module libexec/httpd/libdav.so
AddModule mod_dav.c
また、DAV操作のロックに使用されるファイルである、以下行が存在することを確認してください:
DAVLockDB "/usr/local/apache2/temp/DAV.lock"
Debianでは、これらの手順は以下の手順で実行できます:
apacheのdavおよびdav_fsモジュールを有効にします:
$ a2enmod dav_fs
(dav_fsは不要かもしれませんが、私には分からないので、念の為)
$ a2enmod dav
DAV lock が /etc/apache2/mods-available/dav_fs.conf に記述されています:
DAVLockDB /var/lock/apache2/DAVLock
もちろん、別の場所を指すこともできますが、文字列は実際には一部のApache構成では単なるプレフィックスであるため、Apacheの実行ユーザーでディレクトリを書き込み可能にする必要があります。
次に、以下のようなものをhttpd.confに追加します
<Location /my-new-repo.git>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /usr/local/apache2/conf/passwd.git
Require valid-user
</Location>
Debianの場合:
以下の内容の /etc/apache2/conf.d/git.conf を作成(または追加):
<Location /my-new-repo.git>
DAV on
AuthType Basic
AuthName "Git"
AuthUserFile /etc/apache2/passwd.git
Require valid-user
</Location>
Debian は /etc/apache2/conf.d の下にあるすべてのファイルを自動的に読み取ります。
パスワードファイルは別の場所に置くこともできますが、Apacheで読み取り可能である必要があり、かつ、世界中からは読み取り不可にする必要があります。
このファイルは以下のコマンドラインで作成します $ htpasswd -c /usr/local/apache2/conf/passwd.git <user>
Debianの場合:
$ htpasswd -c /etc/apache2/passwd.git <user>
あなたはパスワードの入力を求められ、ファイルが作成されます。 その後のhtpasswdの呼び出しでは、既存のファイルに追加するため、 -c
オプションを省略する必要があります。
あなたはApacheをrestartする必要があります。
次に、あなたのブラウザで http://<username>@<servername>/my-new-repo.git にアクセスして、パスワードが要求され、正しいパスワードを受け入れるかどうかを確認します。
Debianの場合:
WebDAV部分をテストするには、以下のようにします:
$ apt-get install litmus
$ litmus http://<servername>/my-new-repo.git <username> <password>
ほとんどのテストに合格する必要があります。
WebDAVをテストするためのコマンドラインツールは cadaver です。 あなたがGUIが必要な場合は、たとえば、konqueror はWebDAV URLを「webdav://…」または「webdavs://…」として開くことができます。
Windowsを使用している場合、XP以降のInternet ExplorerはWebDAVをサポートしています。 これを行うには、Internet Explorer → Open Location → http://<servername>/my-new-repo.git [x] Open aswebfolder → login を実行します。
Step 3: setup the client
HTTPをサポートしていることを確認してください。つまり、Gitがlibcurl(7.10より新しいバージョン)を伴ってビルドされていることを確認してください。 引数のないコマンド githttp-push
は、使用法メッセージを表示するはずです。
次に、以下をあなたの $HOME/.netrc に追加します(なしでも実行できますが、パスワードの入力を毎回求められます)。
machine <servername>
login <username>
password <password>
…そしてパーミッションを設定: chmod 600 ~/.netrc
IPアドレス指定でWebサーバーにアクセスする場合は、サーバー名の代わりにIPアドレスを入力する必要があります。
すべてがOKかどうかを確認するには、以下を実行します:
curl --netrc --location -v http://<username>@<servername>/my-new-repo.git/HEAD
…これにより、サーバー上のHEADファイルのコンテンツである ref: refs/heads/master
のようなものが得られるはずです。
次に、エクスポートするプロジェクトを含むあなたの既存のリポジトリにリモートを追加します:
$ git-config remote.upload.url \
http://<username>@<servername>/my-new-repo.git/
最後に /
を付けることが重要です。 これがないと、サーバーはgit-http-pushが(まだ)理解できないリダイレクトを送信し、git-http-pushはリクエストを無限に繰り返します。
Step 4: make the initial push
あなたのクライアントリポジトリから以下を実行します
$ git push upload master
これにより、ブランチ master
(エクスポートするブランチと見なされます)が、以前にgit-configで定義した upload
というリポジトリにプッシュされます。
プロキシの使用:
HTTP(S)プロキシの背後からWebDAVサーバーにアクセスする必要がある場合は、変数 all_proxy
を http://proxy-host.com:port
または http://login-on-proxy:passwd-on-proxy@proxy-host.com:port
に設定します。 詳細については、 man curl
を参照してください。
トラブルシューティング:
もしgit-http-pushが以下のように言ったら
Error: no DAV locking support on remote repo http://...
これは、Webサーバーが認証を受け入れなかったことを意味します。 httpd.conf や .netrc や アップロード先のURLで、ユーザー名とパスワードが一致していることを確認してください。
git-http-pushがブロブを移動しようとしたときにエラー(22/502)を表示する場合は、Webサーバーがリクエストでその名前を認識していないことを意味します。 これは、Apacheを起動した後、ネットワークインターフェイスを無効にしたときに発生する可能性があります。 単純にApacheを再起動するだけOKです。
(22/502)のようなエラーは、(curlエラーコード/httpエラーコード)形式です。 したがって、(22/404)は、サーバーで「見つかりません」のようなものを意味します。
/usr/local/apache2/logs/error_log を読むと役立つ事がよくあります。
Debianの場合: 代わりに /var/log/apache2/error.log を読みます。
あなたがHTTPSの場所にアクセスすると、GitはSSL証明書の検証に失敗する可能性があります(これはリターンコード60です)。 http.sslVerify=false を設定すると、問題の診断に役立ちますが、セキュリティチェックは削除されます。
Debianリファレンス: http://www.debian-administration.org/articles/285
著者 Johannes Schindelin <Johannes.Schindelin@gmx.de> Rutger Nijlunsing <git@wingding.demon.nl> Matthieu Moy <Matthieu.Moy@imag.fr>