Why USVN?
Gitが不得意な点
- 1リポジトリ1GB以内、1ファイル100MB以内で管理されることが推奨
- DB dump file, binaryファイル, 圧縮されたファイル,などのファイルの管理に適さない
SVNの利点
- リポジトリが巨大化しすぎて使えなくなったという事例がない
- SVNはディレクトリも管理できるためGitよりも確実にファイルの移動を検出できる
Goal
* USVNをインストールする
Milestone
* Apacheがソースインストールされている前提
* mySQLがソースインストールされている前提
* PHPがソースインストールされている前提
* http://qiita.com/metheglin/items/fc3345723537ef400cb7
* PDO mySQLドライバまたはmysqliモジュールがインストールされている必要がある
* SVNがソースインストールされている前提
* http://qiita.com/metheglin/items/4193c6c0b2fe82d730e1
* apacheのmodules以下にmod_dav_svn.so, mod_authz_svn.soモジュールがインストールされている必要がある
* USVNのソースをダウンロードしてドキュメントルートに配置する
* USVNの公開ディレクトリ(usvn/public)に画面からアクセスできるように最低限のApache設定をいれる
* USVNの初期設定(install.php)時に必要なファイルの権限変更をおこなう
* それ以外の内容をinstall.phpを通さずに修正するとアプリが壊れるのでさわらないこと
* mySQL接続の問題を修正しつつinstall.phpのウィザードを完了する
* 再度Apacheの設定をいれてapache再起動
Preparation
$> uname -a
Linux *** 2.6.32-431.3.1.el6.x86_64 #1 SMP Fri Jan 3 21:39:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$> cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m
$> /usr/local/apache/bin/apachectl -V | head -n 1
Server version: Apache/2.4.7 (Unix)
$> /usr/local/php/bin/php -v
PHP 5.5.4 (cli) (built: Mar 1 2014 20:26:49)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
$> /usr/local/mysql/bin/mysql --version
/usr/local/mysql/bin/mysql Ver 14.14 Distrib 5.6.16, for linux-glibc2.5 (x86_64) using EditLine wrapper
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.16 |
+-----------+
$> ls -l /usr/local/apache/modules/mod_dav_svn.so
-rwxr-xr-x 1 root root 852576 3月 1 18:51 2014 /usr/local/apache/modules/mod_dav_svn.so
$> ls -l /usr/local/apache/modules/mod_authz_svn.so
-rwxr-xr-x 1 root root 53190 3月 1 18:51 2014 /usr/local/apache/modules/mod_authz_svn.so
Manual
Download / Deploy
cd /usr/local/src
wget "https://github.com/usvn/usvn/archive/1.0.7.tar.gz" -O usvn-1.0.7.tar.gz
tar zxvf usvn-1.0.7.tar.gz
mv -i usvn-1.0.7 /usr/local/services/
##
## Make symbolic link
##
cd /usr/local/services
ln -s usvn-1.0.7 usvn
Apache Setting
コメントアウトまたは追加
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
VirtualHost設定
<VirtualHost *:80>
ServerName {yourhost}
DocumentRoot /usr/local/services/usvn/public
Alias /usvn /usr/local/services/usvn/public
AddType application/x-httpd-php .php
DirectoryIndex index.php index.html
<Directory /usr/local/services/usvn/public>
# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews
Order Deny,Allow
Allow from all
Require all granted
</Directory>
CustomLog /var/log/httpd/usvn.access_log combined
ErrorLog /var/log/httpd/usvn.error_log
</VirtualHost>
この設定がうまくいけば、/install.phpにアクセスできるようになる
Check Permissions
cd /usr/local/services/usvn
ls -l config/config.ini
# Apacheのアクセスユーザに書き込み権限が必要
ls -ld public/
# .htaccessを作成する権限が必要
USVN Install
* http://yourhost/install.phpにアクセスして、インストールウィザードを開始する
* mySQL5.6(tarballインストール)で実施したところ途中エラーが発生するため、Fix mySQL Problemの手順で修正する
* DBはrootユーザを指定して作成する
* {USVNパス}/svnでアクセスすると、svnファイルが直接閲覧でき、
Fix mySQL Problem
##
## 外部キー制約のあとにauto incrementを指定しているため、SQLエラーになる
## これを修正するため、auto increment指定しているalter tableブロックをforeign key指定するブロックの前に配置する
##
cd /usr/local/services/usvn/
ls -l app/install/sql/mysql.sql app/install/sql/mysql.sql.backup
cp -ip app/install/sql/mysql.sql app/install/sql/mysql.sql.backup
diff app/install/sql/mysql.sql app/install/sql/mysql.sql.backup
vi app/install/sql/mysql.sql
# 以下diffを参考
diff app/install/sql/mysql.sql app/install/sql/mysql.sql.backup
127,131d126
< ALTER TABLE `usvn_groups` CHANGE `groups_id` `groups_id` INT( 11 ) NOT NULL AUTO_INCREMENT ;
< ALTER TABLE `usvn_projects` CHANGE `projects_id` `projects_id` INT( 11 ) NOT NULL AUTO_INCREMENT ;
< ALTER TABLE `usvn_users` CHANGE `users_id` `users_id` INT( 11 ) NOT NULL AUTO_INCREMENT ;
< ALTER TABLE `usvn_files_rights` CHANGE `files_rights_id` `files_rights_id` INT( 11 ) NOT NULL AUTO_INCREMENT ;
<
158a154,157
> ALTER TABLE `usvn_groups` CHANGE `groups_id` `groups_id` INT( 11 ) NOT NULL AUTO_INCREMENT ;
> ALTER TABLE `usvn_projects` CHANGE `projects_id` `projects_id` INT( 11 ) NOT NULL AUTO_INCREMENT ;
> ALTER TABLE `usvn_users` CHANGE `users_id` `users_id` INT( 11 ) NOT NULL AUTO_INCREMENT ;
> ALTER TABLE `usvn_files_rights` CHANGE `files_rights_id` `files_rights_id` INT( 11 ) NOT NULL AUTO_INCREMENT ;
##
## pdo_mysqlのデフォルトunix socketパスが整合していない場合修正する
## UnixのmySQLは、DBサーバとDB接続元サーバが同一ホストである場合、mysql.sockファイルを介して通信するらしい
## mysql.sockは/etc/my.cnfや{mysql installパス}/my.cnfなどに記載することで、mysql起動時にどこに作成するかを指定できる
##
## root user
grep 'mysql.sock' /etc/my.cnf
# socket=/var/lib/mysql/mysql.sock
# socket=/var/lib/mysql/mysql.sock
ls -l /var/lib/mysql/mysql.sock
# 存在を確認
vi /usr/local/php/lib/php.ini
# mysqlサーバがおいているmysql.sockのパスを指定するようにpdo_mysql.default_socketを変更する
# php.iniのパスは、php -i | grep 'php.ini'か、phpinfo()を画面で表示させて確認する
grep pdo_mysql.default_socket /usr/local/php/lib/php.ini
# pdo_mysql.default_socket=/var/lib/mysql/mysql.sock
/usr/local/apache/bin/apachectl graceful
Apache Setting Again
USVNの画面に表示された通りにVirtualHostにLocationディレクティブを記載する
USVNは、{USVN URL}/svnでアクセスするとリポジトリのファイルに直接アクセスできる
そのアクセス権限やルーティングを制御する設定
## VirtualHostディレクティブ内に記載
<Location /svn/>
ErrorDocument 404 default
DAV svn
Require valid-user
SVNParentPath /usr/local/services/usvn/files/svn
SVNListParentPath off
AuthType Basic
AuthName "Reivo USVN"
AuthUserFile /usr/local/services/usvn/files/htpasswd
AuthzSVNAccessFile /usr/local/services/usvn/files/authz
</Location>
/usr/local/apache/bin/apachectl graceful
Others
* USVNアプリケーションをSSLで防御する場合
* config/config.iniを以下のようにhttpsに変更する必要あり
* subversion.url = "https://yourhost.com/svn/"