Subversionの設置
UbuntuにSubversionのリポジトリを置いてアクセスできるようにしてやりたいと思いやってみた時のメモです。
Subversionの設置
Subversionのインストール
$ sudo apt-get install subversion
実行ユーザの作成
いまのところSubversionのみですが、将来的にはGitなど他のリビジョンコントロールシステムをトライしてみたくなったり必要になったりする可能性があるかもしれません。
よって リビジョンコントロールシステム > Subversion という階層概念をユーザでもディレクトリでも設けたいと思います。
# リポジトリ管理ユーザrcs (revision control system) の作成 $ sudo useradd rcs # Subversion管理ユーザの作成 $ sudo useradd svn -g rcs
リポジトリ格納用ディレクトリの作成
$ cd /var $ sudo mkdir repos $ sudo chown rcs:rcs repos $ cd /var/repos $ sudo su rcs $ mkdir svn $ chown svn svn
svnserveの設定
リポジトリへのアクセスは Table 1.1. Repository access URLs / Version Control with Subversion によると以下のような方法があるようです。
Schema | Access method | |
---|---|---|
file:/// | ローカルディスクにおける直接アクセス | |
http:// | ApacheにおけるWebDAVプロトコルで | |
https:// | http:// と同様。ただしSSL使用。 | |
svn:// | svnserver という独自サーバ経由で | |
svn+ssh:// | svn:// と同様。ただしSSHトンネル経由で |
今回のSubversion用リポジトリはLANあるいはVPN内から自分だけがアクセスするのみです。よってこのレイヤではセキュリティについてあまり頭悩ませたくないので、とりあえず簡単だと触れ込みのあるsvnserverを設定してやりたいと思います。
svnserverの主なメリット・デメリットを The svnserve Server / Version Control with Subversion より一部抜粋。
- メリット
- セットアップが簡単
- WebDAVより断然速い
- デメリット
- 認証の方法がひとつしかなくてその上暗号化されてないしサーバにストアされてるパスワードが平文
- あらゆるロギングがない
# svnユーザにスイッチ $ sudo su svn # svnserveで包括的に扱う設定を設置 $ cd /var/repos/svn $ mkdir .conf
/var/repos/svn/.conf/svnserve.conf
[general] anon-access = read # 匿名ユーザは read を許す auth-access = write # 認証されたユーザは write を許す password-db = passwd # 認証ユーザの情報を記したファイルのパスを指定 authz-db = authz # アクセス制限を定義したファイルのパスを指定
/var/repos/svn/.conf/passwd
[users] naoyes = password # ユーザ名 = パスワード とする。なんと平文
/var/repos/svn/.conf/authz
[groups] admin = naoyes # グループ名 = ユーザ名1, ユーザ名2, ... とする。 [/] # すべてのリポジトリのすべてのディレクトリに対する設定 * = r # どんなグループも read は出来るよ @admin = w # admin グループに属しているユーザは write も出来るよ
svnserveをデーモンモードで起動
-r でルートディレクトリを、 --config-file で先ほど設定したファイルを指定してやります。ルートはApacheなどのWebサーバで言うところのドキュメントルートみたいなものですね。クライアントからアクセスするときにルートディレクトリに対する相対パスになるので便利だしセキュアになります。
$ svnserve -d -r /var/repos/svn --config-file /var/repos/svn/.conf/svnserve.conf $ nmap localhost | grep svn 3690/tcp open svn
3690ポートで待ち受けるようになりました。
ドメイン名を付与
DNSを設定してそれっぽい名前でアクセスできるようにしてやります。名前は svn.repos.mnb とします。ちなみに当たり前ですが別名を特につける必要性がなかったらこの項は飛ばしても問題ありません。
# ゾーンファイルに設定を追加 $ echo 'svn.repos IN CNAME argyle ;' >> /etc/bind/db.mnb # BIND9の再起動 $ sudo service bind9 restart * Stopping domain name service... bind9 ...done. * Starting domain name service... bind9 ...done. # 名前が引けるか確認してみます。大丈夫そうです。 $ nslookup svn.repos.mnb Server: 127.0.0.1 Address: 127.0.0.1#53 svn.repos.mnb canonical name = argyle.mnb. Name: argyle.mnb Address: 192.168.24.93
以上でSubversionを使う準備ができました。
使ってみる
いろいろ試してみましょう。
Ubuntu上で試しても良かったのですが、せっかくなので別のマシンから試してみます。今回は同一ネットワーク内にあるMacBook Proから。Subversionクライアントはずいぶん前にインストール済みです。
# チェックアウト $ svn co svn://svn.repos.mnb/sandbox Checked out revision 0. # コミット # パスワードを聞かれるので /var/repos/svn/.conf/passwd で設定したパスワードを入力 $ cd sandbox $ mkdir trunk branches tags naoyes-mac:sandbox naoyes$ svn add trunk branches tags A trunk A branches A tags $ svn ci -m 'initial commit.' Authentication realm: <svn://svn.repos.mnb:3690> deda8c52-cbcc-4820-83b3-275dd4b45269 Password for 'naoyes': Adding branches Adding tags Adding trunk Committed revision 1. # ログの確認 $ svn log svn://svn.repos.mnb/sandbox ------------------------------------------------------------------------ r1 | naoyes | 2011-11-20 17:38:09 +0900 (日, 20 11 2011) | 1 line initial commit. ------------------------------------------------------------------------
チェックアウト、コミット、ログの参照など無事に行うことが出来ました。