Pragmatic ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

Scientific Linux 6.1でgit serverを立てる

CentOSのアップデートが最近遅いので
ScientificLinux6.1を使ってGit Serverを立ててみた。(UbuntuでもOKでした)

ざっと調べたところ gitosisとgitoliteというのが2つあったが、前者のほうは開発が止まっているようだったのでgitoliteを使うことにした。

必要な環境
・クライアント(MacLinuxが楽。Windowsのやり方はここでは紹介していません)
・サーバー(Linux系だったらだいたいOKだと思います)

事前準備
・クライアント、サーバー共にgitをインストールしておく

以下手順サーバー側とクライアント側の作業があるので気をつけてください

サーバー


まず gitolite という名前でユーザを作成。GUI(system->administration->Users and Groups)を使って
やると簡単にできます。
コマンドでやる場合は,
> useradd gitolite
> passwd gitolite


あとsshのキー保存用のディレクトリを作っておきます
> su gitolite
> mkdir ~/.ssh

クライアント


> ssh-keygen -t rsa
sshのキーを作成します。
保存場所や名前はデフォルトでよいです。パスワードは任意。


この結果 ~/.ssh/以下に id_rsa, id_rsa.pubが生成されます。
前者が秘密鍵で後者が共通鍵です。
ここで名前を変えておきます。 {user_name}は自由に決めてください。
> mv id_rsa {user_name}
> mv id_rsa.pub {user_name}.pub


次に共通鍵をサーバーに保存します。{server_name}はサーバーのホスト名かipアドレス
> scp ~/.ssh/{user_name}.pub gitolite@{server_name}:/home/gitolite/.ssh


(connection refused ではじかれた場合はサーバー側のsshdが動いていないか設定がおかしいかなのでなおす)


sshでログインできるか確認
> ssh gitolite@{server_name}
ここで特に
The authenticity of host can't be established ...などと出なければOKです。

サーバー


> su gitolite
> cp ~/.ssh/{user_name}.pub /tmp
> cd ~
> git clone git://github.com/sitaramc/gitolite
> cd gitolite
> src/gl-system-install
> vi ~/.bashrc
PATH="$PATH":/home/gitolite/bin
を追加
> source ~/.bashrc
> gl-setup /tmp/{user_name}.pub
hit-enterでENTERキーを押すとviが起動するので:qでぬける。

クライアント


> cd ~/.ssh
> touch config
> vi config
以下の内容をconfigファイルに記載{server_name},{user_name}は前記と同じにする。
host gitolite
       user gitolite
       hostname {server_name}
       port 22
       identityfile ~/.ssh/{user_name}


gitolite-adminの設定用のディレクトリを保存するディレクトリ(任意)に移動します。


> cd ~/{WORK_DIR}
> git clone gitolite:gitolite-admin


これで何事も無くダウンロードできたらほぼ問題ないと思います。
ちなみに、私はここで以下のエラーでかなり手こずりましたが、この手順でやれば出ませんでした。
fatal:gitolite-admin.git does not appear to be a git repository


git clone gitolite@{server_name}:repositories/gitolite-adminとやると一見うまくいったように見えますが、pushができなくなるので無駄です。


上記エラーではまった場合のチェックポイント
・サーバー:/home/gitolite/.ssh/authorized_keysの中身を確認。
 ⇒command="/home/gitolite/bin/gl-auth-command {user_name} ではじまってるか?なかったら最初からやりなおしてみる。。他に変なのがまじってたら消す。
・サーバー:/home/gitolite/.gitolite/keydirに{user_name}.pubがはいってるか?


一応pushできるか確認


> cd gitolite-admin
> touch README
> git add .
> git commit -m "add README file"
> git push

以上で最初の設定は完了です。