LoginSignup
4
3

More than 5 years have passed since last update.

USVN Install

Last updated at Posted at 2014-03-01

Why USVN?

Gitが不得意な点

https://help.github.com/articles/what-is-my-disk-quota
* 1リポジトリ1GB以内、1ファイル100MB以内で管理されることが推奨
* DB dump file, binaryファイル, 圧縮されたファイル,などのファイルの管理に適さない

SVNの利点

http://japan.internet.com/webtech/20130620/8.html
* リポジトリが巨大化しすぎて使えなくなったという事例がない
* 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/"

References

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3