2009年 7月 18日(土曜日) 11:50

SVNのセットアップ

評価:
(0 票)

バージョン管理には今までCVSを使ってきましたが、最近のオープンソースプロジェクトでのバージョン管理はSubversion (SVN)に急速にシフトしていて、CVSはもはやマイナーになっているようです。

そこで私も、Cent OSに開発環境を移行しているついでに、SVNに乗り換えようと思います。

SVNはCVSを拡張したものという位置づけで、CVSではできなかったディレクトリのバージョン管理や、ファイル名の変更などに対応していることで、かなり使いやすくなっている印象です。

マニュアルも充実していて、オライリーから出版されているがPDFで無料でダウンロードできました。日本語版もありました。すばらしい!

ここでは、Cent OS5をインストールしたばかりの状態で、リポジトリを作成し、既存のファイルをリポジトリに追加してみます。


1. SVN管理ユーザ・グループの作成

SVN管理用のユーザとグループをあらかじめ作成しておきます。

# groupadd svnuser
# useradd svnadmin -g svnuser

2. リポジトリの作成

あらかじめリポジトリとなるディレクトリを作成し、オーナーをsvnadminにしておきます。

# mkdir -p /svn/mh
# cd /svn/
# chown -R svnadmin:svnuser *
# su - svnadmin

svnadminユーザで、リポジトリを格納するディレクトリを用意し、svnadminコマンドでリポジトリを作成します。

$ svnadmin create /svn/mh

SVNでは、リポジトリの保存形式として、全てのデータをBarkeley DBに保存する方法と、OSのファイルシステムから見えるflat形式(FSFS)で保存する方法の2つのうちどちらかを選べるようになっています。デフォルトはFSFSです。Barkeley DB形式は高度なバックアップ方法などが使えるようですが、ちょっとしたことでリポジトリが壊れてしまいやすいということなので、私は新しい方法で使いやすそうなFSFS(デフォルト)を選びました。

3. 既存ソースファイルのインポート

svn importコマンドを使って、既存のソースファイルをリポジトリにインポートします。まずはインポートするソースファイルを用意します。インポートするディレクトリ構造に決まりはないようですが、経験から下のようにしておくのが方が良いそうです。私の例では~kura/svntmp/の下に次のようなディレクトリ構造を用意して、trunkの下にインポートしたいソースファイルを配置しました。

branches/

tags/

trunk/  ← この下にソースファイルを配置

次に、次のコマンドを実行します。

$ svn import ~kura/svntmp/ file:///svn/mh -m "Initial import"

4. 認証方法の設定

作成したリポジトリにはconfディレクトリが作成され、その中のsvnserve.confにこのリポジトリの認証方法が書かれています。

ここではユーザ毎の認証を行うこととし、kuraという名前のユーザが読み書きできるようにユーザを追加してみます。

まず、リポジトリの下のconf/svnserve.confを開き、下の2行のコメントアウト#を外します。realmは適当に変更しておきます。

[general]
password-db = passwd
realm = My First Repository

次に、同じディレクトリにあるpasswdファイルを開き、[users]の下に「ユーザ名 = パスワード」を追加します。ここで指定するユーザ名はLinuxのシステムに登録されているユーザ名でなくても何でもよいようです。

[users]
kura = passowrd

他のユーザがパスワードファイルや設定ファイルを見る事が出来ないようにしておきます。

$ chmod 600 passwd svnserve.conf

ちなみに、SVNではsvnserve.confによる認証以外に、SSH認証という方法があり、こちらも試しましたが、eclipseではSSHのパスワードを保存できないらしく(svnserve.confを使う方式のパスワードは保存できるのですが)、レポジトリを開く度にパスワードを聞いてきてとても使い物にならない状態だったのでやめました。。。

5. svnserveサービスの設定

SVNクライアントからSVNサーバに接続できるように、SVNサーバを設定します。SVNサーバにはSubversionに付属してくるsvnserveを使う方法と、httpd経由でApacheのモジュール(mod_dav_svn)を使う方法の2種類があるようですが、私の場合はWeb経由でリポジトリにアクセスすることもないので、設定が簡単なsvnserveを使うことにしました。

まず、rootユーザで/etc/servicesの次の2行を、

svn                3690/tcp                        # Subversion
svn 3690/udp # Subversion

次のように変更します。

svnserve           3690/tcp                        # Subversion
svnserve 3690/udp # Subversion

(これはデフォルトの/etc/servicesの間違いなのではないかという気がしないでもないです。。。下の設定ファイルの方でサーバ名をsvnに統一してしまう方法も可能ですが、svnはクライアントコマンドの名前なので気持ちが悪いので、こちらをsvnserveに修正しました。)

次に、/etc/xinetd.dに、次のような内容のファイルを作成し、svnserveという名前で保存します。

service svnserve
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = svnadmin
server = /usr/bin/svnserve
server_args = -i
log_on_failure += USERID
}

ここまで設定したら、xinetdを再起動します。

# service xinetd restart

さらに、ファイアウォールを設定している場合は、ポート3690へのアクセスを許可ておきます。

これで、SVNサーバの設定が完了しました。

6. SVNクライアントのインストール

eclipseにSVNクライアントのプラグインSubversiveがありましたので、私はこれをインストールしました。

(2009年7月26日追記:Tigrisの提供しているプラグインSubclipseの方が、グラフィカルなバージョンツリーを表示させたりできるなど、高機能なようです。)

7. クライアントでリポジトリの設定

SVNクライアントでリポジトリの設定をします。

eclipseで、「SVNリポジトリエクスプローラ」パースペクティブを開き、「SVNリポジトリの追加」ボタンをクリックして、リポジトリの場所を入力します。svnserveをサーバとして使うので、場所はsvn://ではじまる文字列で指定しました。

SVNリポジトリの追加

ここまででサーバとクライアントの設定は終わりました。

8. eclipseプロジェクトへチェックアウト!

SVNレポジトリエクスプローラで、trunkの下のディレクトリを右クリックし、「チェックアウト」を選びます。

次に、「新規プロジェクトウィザードを使ってプロジェクトとしてチェックアウト」を選んで"Finish"ボタンをクリックします。

あとは、通常eclipseのプロジェクトを作成する要領でプロジェクトを作成してチェックアウト完了です。

チェックインするときには、4で設定した認証方法によってパスワードを聞いてきます。

最終更新日: 2011年 6月 27日(月曜日) 01:44
くらち たかよし

くらち たかよし

モバイル・Webアプリ作家。最近は主にiPhoneアプリ制作を手がける。企画から、UIデザイン、設計、実装、テスト、多言語対応、ユーザーサポートまでを1人〜数人の個人で行う全人的開発手法の確立を目指している。

使う言語はObjective-C, C++, C#, Java, PHPなど。Web関連で使うものはCakePHP, MySQL, Joomla! CMSなど。デザインはシロウトながらPhotoshopとIllustratorをなんとかがんばって使う。

場所や時間に縛られない、インターネット時代の新しい働き方、自由な生き方を模索中。海外移住、低予算&低リスク起業、キャリアデザイン、心理学などにも興味あり。

Web: awaresoft.jp/