プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

【EC2】 Subversion+Redmine環境の構築 (2/6) : Subversionの設定

最初に、Subversionをセットアップします。

 

【EC2】 Subversion+Redmine環境の構築 (1/6)

【EC2】 Subversion+Redmine環境の構築 (2/6) : Subversionの設定 ←ここです

【EC2】 Subversion+Redmine環境の構築 (3/6) : SSLの設定

【EC2】 Subversion+Redmine環境の構築 (4/6) : Redmine の設定

【EC2】 Subversion+Redmine環境の構築 (5/6) : バックアップの設定

【EC2】 Subversion+Redmine環境の構築 (6/6) : 雑多な設定

 

Subversionリポジトリの作成

Subversionのリポジトリを作成します。サーバーにログインして、

bitnami@ip-10-132-10-247:~$ cd /opt/bitnami/
bitnami@ip-10-132-10-247:/opt/bitnami$ sudo mkdir repositories
bitnami@ip-10-132-10-247:/opt/bitnami$ sudo chown -R daemon:daemon repositories/

として、リポジトリの格納場所を作り、

bitnami@ip-10-132-10-247:/opt/bitnami$ sudo -u daemon svnadmin create /opt/bitnami/repositories/myfirsttest
bitnami@ip-10-132-10-247:/opt/bitnami$ ls -l repositories/
合計 4
drwxr-xr-x 6 daemon daemon 4096 12月  6 08:50 myfirsttest
bitnami@ip-10-132-10-247:/opt/bitnami$ 

として、テスト用のリポジトリ、myfirsttestを作りました。

 

なお、BitnamiのRedmineスタックはapacheの実行ユーザがdaemonになってます。リポジトリには、apache経由でアクセスすることを想定しているので、所有者はdaemonユーザにしました。

 

ちなみに、apacheの実行ユーザは、/opt/bitnami/apache2/conf/httpd.conf をみると、

User daemon
Group daemon

と記載されています。もし、apacheの実行ユーザーを変えた場合やsvn://やsvn+ssh://でのアクセスなどを行う場合は、リポジトリに書き込み権限を与えるように所有者やアクセス権を設定してください。

 

このタイミングで、リポジトリに正常にアクセスできることを確認しておきます。

bitnami@ip-10-132-10-247:~$ cd
bitnami@ip-10-132-10-247:~$ svn info file:///opt/bitnami/repositories/myfirsttest/
パス: myfirsttest
URL: file:///opt/bitnami/repositories/myfirsttest
リポジトリのルート: file:///opt/bitnami/repositories/myfirsttest
リポジトリ UUID: 81701df6-3f36-11e2-93c5-b183278af287
リビジョン: 0
ノード種別: ディレクトリ
最終変更リビジョン: 0
最終変更日時: 2012-12-06 08:50:10 +0900 (木, 06 12月 2012)

bitnami@ip-10-132-10-247:~$ 

ちなみに、現時点ではチェックアウトしても、リポジトリの書き込み権限がないのでコミットで失敗します。

(参考)

Error: svn attempt to write a readonly database, commit failed

 

httpからのアクセスの設定

次は、httpでアクセスできるように設定します。Subversionの場合は、WebDAV機能を使って実現しています。/opt/bitnami/apache2/conf/httpd.conf に

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

・・・・・・

Include "/opt/bitnami/apache2/conf/extra/httpd-svn.conf"

を追加します。

Subversionに関する設定はまとめて、extra/httpd-svn.conf を新たに作成し、ここにまとめておきます。今回は次のようにしました。

# Subversion
<Location /svn>
    DAV svn
    # enable view for repositories parent directories
    #SVNPath "/opt/bitnami/repositories"
    SVNParentpath "/opt/bitnami/repositories"
    SVNListParentPath On

    # read/write accesses force Basic auth
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile /opt/bitnami/apache2/conf/.htpasswd.svn
    Require valid-user
</Location>

アクセス時は読み書きともBasic認証を行うようにしています。また、プロジェクトごとに複数のリポジトリを扱うため、リポジトリを格納しているディレクトリを表示できるようにしました。

 

Basic認証で使用するパスワードファイルを作成します。

bitnami@ip-10-132-10-247:/opt/bitnami/apache2/conf$ sudo htpasswd -c ./.htpasswd.svn hogehoge
New password: 
Re-type new password: 
Adding password for user hogehoge
bitnami@ip-10-132-10-247:/opt/bitnami/apache2/conf$ 

 

apacheを再起動します。

bitnami@ip-10-132-10-247:/opt/bitnami/apache2/conf$ cd ../../
bitnami@ip-10-132-10-247:/opt/bitnami$ sudo ./ctlscript.sh restart apache
これでブラウザからアクセス(http://サーバー名/svn)するとパスワードを聞かれるので入力すると、リポジトリが見えるはずです。

 

(参考:WebDAVの設定)

http://wiki.bitnami.org/Components/Subversion#How_to_see_the_Subversion_repository_from_the_web_browser.3f

Ubuntu 12.04 Subversion 1.6+WebDAV

Subversionのインストールと設定(Apache編)

(参考:Basic認証について)

Apacheでユーザー認証を行うには(Basic認証編)

Apache + Subversion (svn) のBASIC認証

 

WebSVN Admin のインストール

これで、リポジトリにアクセスすることはできるようになりましたが、新規にリポジトリを作る場合は、サーバーにログインして、svnadmin コマンドを実行する必要があります。これだと面倒なので、リポジトリの作成もブラウザから行えるようにします。

実は手元の環境で使っている既存のSubversionサーバー(ReadyNasDuo)にはWebSVNアドオンというのが入っており、最新のリポジトリを見るだけでなく、ログなども見ることができ、さらにリポジトリの新規作成も出来ました。

で、これをインストールしたらリポジトリの作成ができると思っていたら、元々のWebSVNはリポジトリの作成機能というのはないんですね。びっくり。どうもReadyNasDuo(NASボックス)という性質に合わせて、変更されていたようです。

 

自分で作ろうかとも考えたのですが、代わりになるものはないかと調べたら、似たような機能を公開している方がいました。

WebSVN Administrator  Subversionリポジトリ管理

バックアップなどいろいろと付加機能はついているのですが、とりあえずはリポジトリの作成機能だけあればよいので、これを使わせていただくことにします。

 

まずダウンロードします。

bitnami@ip-10-132-10-247:~$ wget 'http://sourceforge.jp/frs/redir.php?m=osdn&f=%2Fwebsvn-admin%2F50678%2Fwebsvn-admin-0.2b2.tar.gz'
--2012-12-06 14:03:19--  http://sourceforge.jp/frs/redir.php?m=osdn&f=%2Fwebsvn-admin%2F50678%2Fwebsvn-admin-0.2b2.tar.gz
sourceforge.jp (sourceforge.jp) をDNSに問いあわせています... 202.221.179.21
sourceforge.jp (sourceforge.jp)|202.221.179.21|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: http://osdn.dl.sourceforge.jp/websvn-admin/50678/websvn-admin-0.2b2.tar.gz [続く]
--2012-12-06 14:03:19--  http://osdn.dl.sourceforge.jp/websvn-admin/50678/websvn-admin-0.2b2.tar.gz
osdn.dl.sourceforge.jp (osdn.dl.sourceforge.jp) をDNSに問いあわせています... 202.221.179.23
osdn.dl.sourceforge.jp (osdn.dl.sourceforge.jp)|202.221.179.23|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 20442 (20K) [application/x-gzip]
`redir.php?m=osdn&f=%2Fwebsvn-admin%2F50678%2Fwebsvn-admin-0.2b2.tar.gz' に保存中

100%[=============================================================================>] 20,442      33.8K/s   時間 0.6s  

2012-12-06 14:03:20 (33.8 KB/s) - `redir.php?m=osdn&f=%2Fwebsvn-admin%2F50678%2Fwebsvn-admin-0.2b2.tar.gz' へ保存完了 [20442/20442]

bitnami@ip-10-132-10-247:~$ mv redir.php?m=osdn&f=%2Fwebsvn-admin%2F50678%2Fwebsvn-admin-0.2b2.tar.gz websvn-admin-0.2b2.tar.gz 
bitnami@ip-10-132-10-247:~$ 

 

Webアクセス可能な場所に配置します。

bitnami@ip-10-132-10-247:~$ cd /opt/bitnami/apps/
bitnami@ip-10-132-10-247:/opt/bitnami/apps$ 
bitnami@ip-10-132-10-247:/opt/bitnami/apps$ sudo tar zxvf ~/websvn-admin-0.2b2.tar.gz 
websvn-admin-0.2/
websvn-admin-0.2/include/
websvn-admin-0.2/data/
websvn-admin-0.2/style.css
websvn-admin-0.2/php.ini
websvn-admin-0.2/logo-svn.png
websvn-admin-0.2/index.php
websvn-admin-0.2/icon-stop.png
websvn-admin-0.2/icon-ok.png
websvn-admin-0.2/icon-info.png
websvn-admin-0.2/icon-box.png
websvn-admin-0.2/include/.htaccess
websvn-admin-0.2/include/config.php
websvn-admin-0.2/include/auth.php
websvn-admin-0.2/data/.htaccess
bitnami@ip-10-132-10-247:/opt/bitnami/apps$ sudo chown -R bitnami:daemon websvn-admin-0.2/
bitnami@ip-10-132-10-247:/opt/bitnami/apps$ 

プログラム一式は、/opt/bitnami/appsに配置し、/opt/bitnami/apache2/htdocs からシンボリックリンクを張ります。

bitnami@ip-10-132-10-247:/opt/bitnami/apps$ 
bitnami@ip-10-132-10-247:/opt/bitnami/apps$ cd ../apache2/htdocs/
bitnami@ip-10-132-10-247:/opt/bitnami/apache2/htdocs$ ln -s ../../apps/websvn-admin-0.2/ websvnadmin
bitnami@ip-10-132-10-247:/opt/bitnami/apache2/htdocs$ 

 

初期設定を行います。websvn-admin-0.2/include/config.php をviで開いて必要なパスを記入しておきます。

// $strSvnCmdPath = '/usr/bin/';
$strSvnCmdPath = '/opt/bitnami/subversion/bin/';


// ***** svn repositoy parent directory *****
// this string must end with '/'.

// $strBaseDir = '/var/svn/';
$strBaseDir = '/opt/bitnami/repositories/';


// ***** repositoy backup/trash directory *****
// this string must end with '/'.

// $strBackupDir = '/var/svn-backup/';
$strBackupDir = '/opt/bitnami/backup/repositories/';

バックアップディレクトリも指定していますが、WebSVN Adminからは利用しない予定です。

 

あと、アクセス時にパスワードファイルの書き換えが発生するので、dataディレクトリの権限を、775に変更しておきます。

bitnami@ip-10-132-10-247:/opt/bitnami/apps/websvn-admin-0.2$ chmod 775 data/

 

この状態で初回アクセスを行うと、初期ユーザーとパスワードが作成されて表示されます。

実は、この時初期ユーザー名として『user』が表示されるのですが、これが間違いで、ユーザー名『test』が正しいので注意してください。というわけで、testでログインします。

ログイン後、ユーザー名とパスワードを変更しておきます。

これで、ブラウザからリポジトリの作成ができるようになりました。一度リポジトリを作成してみてください。

 

なお、時刻表示を注意してみてみると日本時間になっていません。これは、phpのタイムゾーンが違っているためです。

/opt/bitnami/php/etc/php.ini を編集して

;date.timezone = "America/Los_Angeles"
date.timezone = "Asia/Tokyo"

のようにタイムゾーンに東京に変更後、apacheを再起動すれば表示が正しくなります。

 

あと、リポジトリを作るだけでも良いのですが、個人的にはプロジェクトで使う場合は、いつもtrunk/branches/tagsを作っているので、同時にこれらも作成するように修正しました。

index.phpに対して、

 

        exec($strSvnCmdPath."svnadmin create ".$strBaseDir.$strRepo." 2>&1", $arrStdout, $nResult);
// 2012/12/4, added by Junichi MORI, start
        exec($strSvnCmdPath."svn mkdir file://".$strBaseDir.$strRepo."/branches -m 'Created branches' 2>&1", $arrStdout, $nResult);
        exec($strSvnCmdPath."svn mkdir file://".$strBaseDir.$strRepo."/tags -m 'Created tags' 2>&1", $arrStdout, $nResult);
        exec($strSvnCmdPath."svn mkdir file://".$strBaseDir.$strRepo."/trunk -m 'Created trunk' 2>&1", $arrStdout, $nResult);
// 2012/12/4, added by Junichi MORI, end

のようにディレクトリを作成してコミットするだけです。

 

これでSubversionの設定は一通り終わりです。次は、SSHの設定を行います