CentOS 6をGitサーバーにする
ネット上でも情報が錯綜してわけわかめな状態になっているのでCentOS 6でHTTPなGitサーバーを自前で立てるための情報をここにまとめるものである。
とりあえずBASIC認証なユーザーがベアリポジトリを読み書きできるようになるまで。
まず、CentOS 6を入れる。まぁタイトル通りですわ。で、最新の6.5まで上げたらhttpdとmod_ssl(HTTPSを使う場合)とgitをyumで標準リポジトリから取ってくる。
# yum install httpd mod_ssl git
次にリポジトリ用の場所を作る。/var/gitとする。ついでに一つサンプルのベアリポジトリsample.gitを作る。
# cd /var # mkdir git # chown apache.apache git # sudo -u apache git init --bare sample.git
ちなみにgit initで–sharedをつけていないが、これはsample.git内の各ファイルのアクセス権をグループに対してもつけるものなので、CentOS6のhttpdを実行しているユーザapacheだけ読み書きできればいいのでこの場合はつけなくていい。
ssl.confに以下のような内容を追加。
BASIC認証用のパスワードファイルは各人好みの場所に作成されたい。
SetEnv GIT_PROJECT_ROOT /var/git SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git /usr/libexec/git-core/git-http-backend <Directory /var/git> Order deny,allow Allow from All </Directory> <Location /git> AuthType Basic AuthName "Basic Auth for Git Service" AuthUserFile /path/to/.htpasswd Require valid-user </Location>
なぜDirectoryディレクティブとLocationディレクティブを分けているかというと、特に意味は無い。わしの好み。一応ディレクトリそのもののアクセス権とBASIC認証を分ける事ができるというメリットはある。
ポイントはSetEnv GIT_PROJECT_ROOT /var/gitしてScriptAliasを/usr/libexec/git-core/git-http-backendに対してかけてやることだ。これでSubversionにおけるDAV svnとSVNParentPath /var/svnのような振る舞いをしてくれる。
これでBASIC認証でvalidなuserはとりあえずサーバーからsample.gitをローカルにクローンしてコミットしてプッシュできるようになる。