主に IT 技術を整理するためにメモ的に書き溜めています。少しだけフリーソフトもあるよ。コメントを残すには、 facebook を使ってください。

ubuntu に subversion を導入する

最終更新日 2009-04-18 14:36:12 (1年以上前の記事です)

以前 centos で構築したサーバが壊れ、新しく ubuntu サーバを導入したので、これに subversion をセットアップした。その時のメモ。
以前構築したときよりいくから良くなってると思う。前回の記事は
CentOS に Subversion を導入する

CentOS で svn+ssh 環境の構築

環境は以下の通り。


  • Ubuntu 8.10

インストール

aptitude で必要なパッケージをインストールする。

# aptitude install libapache2-svn subversion subversion-tools

apache の設定

今回は svn 用に svn.enjoitech.jp というバーチャルドメインを構成することにする。
まずは conf ファイルの作成。

# vi /etc/apache2/sites-available/svn.enjoitech.jp
<VirtualHost *:80>
        ServerAdmin webmaster@enjoitech.jp
        ServerName svn.enjoitech.jp

        <Location />
                DAV svn
                SVNParentPath /var/www/svn.enjoitech.jp
        </Location>

        ErrorLog /var/log/apache2/svn.enjoitech.jp.error.log
        LogLevel warn
        CustomLog /var/log/apache2/svn.enjoitech.jp.access.log combined

</VirtualHost>

次に、バーチャルドメインを有効にする。

# cd /etc/apache2/sites-enabled
# ln -s ../sites-available/svn.enjoitech.jp ./006-svn.enjoitech.jp
# mkdir -p /var/www/svn.enjoitech.jp

そして apache を再起動してみる。

# service apache2 restart

レポジトリを試しに作ってみる

レポジトリ名を test として。

# mkdir /var/www/svn.enjoitech.jp/test
# svnadmin create /var/www/svn.enjoitech.jp/test
# chown -R www-data:www-data /var/www/svn.enjoitech.jp/test

そしてつないでみて、レポジトリが正常に作成されたか確認してみる。

$ curl http://svn.enjoitech.jp/test/
<html><head><title>test - Revision 0: /</title></head>
<body>
 <h2>test - Revision 0: /</h2>
 <ul>
 </ul>
 <hr noshade><em>Powered by <a href="http://subversion.tigris.org/">Subversion</a> version 1.5.1 (r32289).</em>
</body></html>

きちんとできているようだ。
ただこのままでは apache 経由で誰でもレポジトリの変更が可能なので、前回同様 SSH ユーザのみに限定するように変更する。

svn+ssh の設定

ユーザとグループの作成

まず SVN ディレクトリを管理するユーザとグループを作成する。
ディレクトリの所有グループは全てそのグループに統一されるよう、 setgid する。
さらに、新規作成されたファイル、ディレクトリが 775 になるよう umask を 002 にする。

# groupadd svnusers
# useradd -g svnusers -d /var/www/svn.enjoitech.jp -s /bin/bash svn
# chown svn:svnusers /var/www/svn.enjoitech.jp
# chmod 4775 /var/www/svn.enjoitech.jp
# vi /var/www/svn.enjoitech.jp/.bash_profile
umask 002

これでとりあえず、完了。この svn ユーザがレポジトリの作成などを行うことにする。

ラッパースクリプトの作成

さて、ここで一つ問題になってくるのが、ファイルパーミッションの問題。
この svn ディレクトリは全てのユーザに使用されるため、誰がコミットした際などに新しいディレクトリを作成すると、そのユーザがそのディレクトリの所有者になってしまう。
そうなると、その後他のユーザが書き込みできない事態になる。

そこで、全てのユーザが svn アクセスを SSH 経由で行った際には、 umask を 002 に変更するようにラッパースクリプトをかませて、 svnserve を呼び出すように工夫してやる。

まずはそのラッパースクリプトの作成。ラッパー内ではさりげなくデフォルトパスの場所もしていしてやる。

# vi /var/www/svn.enjoitech.jp/svnwrapper.sh
#!/bin/sh
umask 002
exec /usr/bin/svnserve.org "$@" -r /var/www/svn.enjoitech.jp

そして、リンクを張ってうまいことごまかす。

# cd /usr/bin
# mv svnserve svnserve.org
# ln -s /var/www/svn.enjoitech.jp/svnwrapper.sh svnserve
# chmod 711 /var/www/svn.enjoitech.jp/svnwrapper.sh

Apache の変更

最後に Apache の設定を変更して、チェックインをできないように変更する。

# vi /etc/apache2/sites-available/svn.enjoitech.jp

        ServerAdmin webmaster@enjoitech.jp
        ServerName svn.enjoitech.jp

        <Location />
                DAV svn
                SVNParentPath /var/www/svn.enjoitech.jp
                <LimitExcept GET PROPFIND OPTIONS REPORT>
                        deny from all
                </LimitExcept>
        </Location>

        ErrorLog /var/log/apache2/svn.enjoitech.jp.error.log
        LogLevel warn
        CustomLog /var/log/apache2/svn.enjoitech.jp.access.log combined

</VirtualHost>

テスト

まず、コミットが HTTP 経由ではこけるテスト。

$ svn commit
svn: Commit failed (details follow):
svn: Server sent unexpected return value (403 Forbidden) in response to MKACTIVITY request for '/test/!svn/act/43dfd7e0-7d06-4f68-87c8-35985be79a32'

次に HTTP 経由で成功するテスト。
最初に svn+ssh するユーザを svnusers に追加しておく。

# usermod -G svnusers ma

で、そのユーザで実行。

$ export SVN_SSH="ssh -p 1234"
$ svn co svn+ssh://ma@svn.enjoitech.jp/test
$ cd test
$ touch abc
$ svn add abc
$ svn commit
Enter passphrase for key '/home/ma/.ssh/id_rsa': 
Adding         a
Transmitting file data .
Committed revision 1.

正常に実行されてる。

最終更新日 2009-04-18 14:36:12

コメント このエントリーをはてなブックマークに追加

フリーソフトウエア
EnjoiFLV
EnjoiPacket
EnjoiCrypto
ランキング
rank2, rank3, rank7, rank10, rank11
todo メモ
facebook 対応
ページ処理
RSS feed
検索機能
認証いる?
更新日表示
実はカテゴリ機能
多言語
実はユーザ機能
ソースその内公開
動作環境メモ
php-5.1.6 with PDO
SQLite-3.3
IE6
FireFox-1.5
RSS
非認証

検索
Google