サーバー構築 バージョン管理システム Subversion

(最終更新日時:2011-07-14 16:31:34)
ソースファイル等のバージョン管理を行うため、バージョン管理システム Subversion を導入します。

Subversion は、バージョン管理システム CVS の問題点を解決すべく開発され、Windows 上での開発環境 EclipseMicrosoft Visual Studio から使用するためのプラグインも存在しています。

なお、Subversion サーバーへの接続は SSH によるセキュア接続のみで行うことにします。
さらに SSH を使用することにより、セキュア接続だけではなく、プロジェクトへの参加メンバーをログインユーザーとして作成しなくてもいいというメリットもあります。

インストール

Subversion がインストールされていない場合、yum でインストールします。
当サイトでは、バージョン 1.6.15 の 64bit 版を rpmforge-extras からインストールしました。
# yum --disableplugin=priorities --enablerepo=rpmforge-extras install subversion.x86_64

初期設定

セキュリティや管理面から Subversioyn 用グループを作成します。
また、Subversion のルートディレクトリを作成します。
# groupadd svn

# # Subversion を SSH 接続で使用しますので、作成した Subversion 用グループの SSH 接続を許可します
# vi /etc/ssh/sshd_config
----------(vi ここから)----------
       :
AllowGroups svn                                          # SSH の接続許可グループに svn を追加します
       :
----------(vi ここまで)----------

# service sshd restart                                   # SSH デーモンを再起動します

# # Subversion のルートディレクトリを作成します
# mkdir -p /home/svn

リポジトリの作成

プロジェクトのリポジトリとログインユーザーを作成します。
管理およびセキュア面からプロジェクトの参加メンバーでログインユーザーを作成することはせず、プロジェクト単位でログインユーザーを作成します。
(※プロジェクト名を pjsample、プロジェクトへのログインユーザー名を svnsample としています)
# svnadmin create --fs-type fsfs /home/svn/pjsample

# useradd svnsample -g svn -d /home/svn/pjsample

# chown -R svnsample.svn /home/svn/pjsample
# chmod -R 770 /home/svn/pjsample
# chmod    710 /home/svn/pjsample
# chmod g+s    /home/svn/pjsample/db

# su - svnsample
$ mkdir -p svntemp/trunk svntemp/branches svntemp/tags
$ svn import svntemp file://localhost/home/svn/pjsample -m "Create the Initial Directory"
$ rm -rf svntemp
$ exit

参加メンバーの鍵セット作成

プロジェクト prsample へのログインユーザーは svnsample で作成しました。
プロジェクト参加メンバーの識別は OpenSSH の公開鍵を使用した tunnel 機能を用いて行います。

PuTTY・鍵セットの作成鍵セットの作成 を参照して、各プロジェクトの参加メンバーが鍵セットを作成します。
PuTTY で鍵セットを作成できない場合は、参加メンバーからパスフレーズを受け取り、下記によりサーバー側で鍵の作成を代行します。
なお、ログインユーザーとして既に SSH の鍵セットを所有している参加メンバーの場合は、新たに鍵セット作成する必要はなく、所有している鍵を使用して構いません。
(※参加メンバを pjmember としています)
# su - svnsample
$ ssh-keygen -t rsa -C "Subversion Project - pjsample : pjmember"
Generating public/private dsa key pair.
Enter file in which to save the key (/home/svn/pjsample/.ssh/id_dsa): [Enter]
Created directory '/home/svn/pjsample/.ssh'.
Enter passphrase (empty for no passphrase): 参加メンバーから受け取ったパスフレーズ
Enter same passphrase again: パスフレーズ再入力
     :
.ssh ディレクトリ内の秘密鍵 id_rsa を参加メンバーに渡し、サーバーからは削除します。

参加メンバー登録

参加メンバーから公開鍵を受け取ったら、ログインユーザー svnsample に登録します。
# su - svnsample

$ # .ssh ディレクトリが存在しない場合は作成します
$ mkdir .ssh
$ chmod 700 .ssh

$ # PuTTY で作成した公開鍵は IETF SECSH 形式になっていますので、OpenSSH 方式に変換します
$ cd .ssh
$ ssh-keygen -i -f PuTTYの公開鍵ファイル > id_rsa.pub
$ rm  PuTTYの公開鍵ファイル

$ # tunnel 設定を公開鍵の ssh-rsa の前に付加します
$ # また、公開鍵の末尾に空白を 1 つ空けて管理用のコメントも付加しておきます
$ vi id_rsa.pub
----------(vi ここから)----------
command="svnserve -t --tunnel-user=pjmember -r /home/svn/pjsample",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa ...(中略)...== 末尾に空白を1つ空けて任意の管理用コメントを追加
----------(vi ここまで)----------

$ cat id_rsa.pub >> authorized_keys
$ rm  id_rsa.pub
$ exit
※ tunnel 設定の --tunnel-user が Subversion のユーザーになります。
※ tunnel 設定の -r オプションにより、プロジェクトリポジトリをログインユーザーのトップレベルディレクトリにしています。

上記の設定により、ログインユーザー svnsample で Subversion サーバーのプロジェクトリポジトリへログインすることができます。

フィードバック

記事の内容についてのご質問、ご指摘、その他ご意見等は、Weblog/Twitter にて受け付けております。

System House ACT Weblog 内記事 : バージョン管理システム Subversion サーバー

トラックバックまたはコメントにてお寄せください。

Twitter では .@systemact 宛につぶやいてください。
また、こちら から、この記事についてつぶやくことができます。
a System House to build an Accounting system by the Computer Technology