空想犬猫記

※当日記では、犬も猫も空想も扱っておりません。(旧・エト記)

Gitサーバの設定メモ

最近、AtlassianからSourceTreeというWindows上で動く有望な無料のGitクライアントが発表された。ようやくWindows環境でもGitをまともに使い始められそうな機運が高まってきたので、それにあわせてサーバの設定などを簡単にまとめてみる。

一般的な情報は「Git に関する良記事 - あどけない話」から辿れる。

ここでは10人程度で共有するレポジトリを、ローカルのLinuxサーバ上に作成するためのミニマルな方法を模索する。手元にあったDebianサーバで試したが、必要なものはsshとgitだけなので、その他のディストリビューションでも設定方法は大差ないと思われる。

運用の基本方針

  1. gitというサーバ側のレポジトリを操作するためのアカウントを作成し、みんなでssh経由で接続して共有する。
  2. gitユーザに出来ることを制限したり(後述)アクセスするための敷居をあげて(後述)セキュリティに配慮する。
  3. Anonymous accessは対応しない。

必要なパッケージ

※以下「%」はスーパーユーザ、「$」は一般ユーザのプロンプトのつもり

これだけ。Debianであれば

% aptitude install git
% aptitude install ssh

とするだけ。

サーバ側の初期設定

サーバ上ではgitユーザがgitコマンドを叩くだけなので、実質的な設定は

  1. gitユーザの作成と設定
  2. sshの公開鍵認証の設定
  3. レポジトリの準備

の3ステップ

gitユーザの作成と設定

普通にadduserする。

% adduser git
% : (テケテケ)

gitユーザはレポジトリ利用者全員で共有するので、念のためgitのレポジトリ操作以外のことは出来ないようにする。それを実現するためにgit-shellという特殊なシェルあり、それをgitユーザのログインシェルに設定する。

% chsh git
% : (テケテケ)
% : (どのシェルを使うか聞かれるので /usr/bin/git-shell を指定する)
sshの公開鍵認証の設定

これはデフォルトの設定で特に問題ないのだけれど、前述したとおり「アクセスするための敷居をあげ」るために、パスワードによるsshの認証を禁止する。具体的には /etc/ssh/sshd_config を編集して

PasswordAuthentication no
RhostsAuthentication no

を追加ないしコメントアウトする。RhostsAuthentication はデフォルトで no だった。設定を有効にするため、sshdをrestartする。

% /etc/init.d/ssh restart
レポジトリの準備

共有レポジトリはどこに作っても良いと思うが、慣習に従って /var 以下に作成する。

% mkdir /var/repos
% chgrp git /var/repos
% chown git /var/repos

次に、作業ディレクトリを持たない空のレポジトリを作る。

% mkdir /var/repos/MyGreatProject.git
% cd /var/repos/MyGreatProject.git
% git --bare init
% chgrp -R git . 
% chown -R git .

以上で、初期設定が完了。

運用方法

ユーザの追加のしかた
  1. ユーザに公開鍵を作成してもらう。
    • ssh-keygenやSourceTreeの Tools > Create or Import SSH Keys メニューから
  2. 公開鍵を /home/git/.ssh/authorized_keys に追加する。
空のレポジトリに最初にpushするとき
$ cd <今までローカルで作業していたgitレポジトリ>
$ git remote add origin git@<サーバ名>:/var/repos/MyGreatProject.git
$ git push origin master
cloneのしかた(CVSでいうcheckoutね)
$ git clone git@<サーバ名>:/var/repos/MyGreatProject.git MyGreatProject
新しくレポジトリを追加するとき

新しいレポジトリ名で、前述の「レポジトリの準備」の後半部分でやったことをする。

その他の小ネタ

リモートレポジトリを変更する
$ git remote set-url origin git@<新しいサーバ名>:/var/repos/MyGreatProject.git

さらに詳しく知りたいときは

Git - サーバーのセットアップ