Subversionのウェブ管理ツールUSVNをインストール

Subversionをウェブで管理できるPHP製のUSVNをインストールしたときの覚書。
USVNを使うとリポジトリ作成、ユーザー/グループ管理、フォルダごとの権限設定をウェブ管理画面から行うことができる。

環境: CentOS 8.1, Apache 2.4.37, PHP 7.3.5, USVN 1.0.9

1. PHP7をインストール

phpのモジュール一覧
# dnf module list php

php7.3をインストール
# dnf module install php:7.3/common

その他のPHPモジュールをインストール
# dnf install php-mysqlnd php-gd

CentOS8からはApacheのモジュールではなくphp-fpmをデフォルトで使用するようになった。

起動、自動起動ON、確認
# systemctl start php-fpm
# systemctl enable php-fpm
# systemctl list-unit-files -t service | grep php-fpm
# php --version

実行ユーザーがapacheになっているか確認
# less /etc/php-fpm.d/www.conf

php.confを確認
# less /etc/httpd/conf.d/php.conf

Apacheの再読み込み
# apachectl configtest
# systemctl reload httpd

確認用phpファイルを作成
# vi /var/www/html/index.php
<?php
phpinfo();

ブラウザでIPアドレスを入力して表示されるか確認。
ポートを開けるのを忘れずに。


2.MariaDBとphpMyAdminをインストール

前とほぼ一緒なので省略


3.USVNをインストール

USVN(User-friendly SVN)を使うとsvnadminコマンドを使わずにリポジトリ作成やユーザー管理などが行える。
GitHub上のドキュメントを参考にインストールする。
各種apacheモジュールがインストール済みか確認
# cd /etc/httpd/conf.modules.d/
# grep dav ./*
# grep rewrite ./*
# grep authz ./*

git cloneする。
# cd /home/svn/
# git clone https://github.com/usvn/usvn.git
# cd usvn/
# git tag
# git checkout 1.0.9

Apacheの設定
# less /etc/httpd/conf.d/01_svn.conf
<VirtualHost *:80>
  ServerName svn.hoge.co.jp
  DocumentRoot /home/svn/repo

  <Location /.well-known/>
    Require all granted
  </Location>

  #USVN
  Alias /usvn /opt/software/usvn/src/public
  <Location /usvn>
    Options +SymLinksIfOwnerMatch
    AllowOverride All
    ## For Apache HTTP 2.2
    #Order allow,deny
    #Allow from all
    ## For Apache HTTP 2.4
    Require all granted
  </Location>
</VirtualHost>

再読み込み
# apachectl configtest
# systemctl reload httpd

ブラウザで表示してみる。
インストールのチュートリアルが開始するので、指示通りにやっていく。
アクセス権限の設定
# cd /home/svn/usvn/src/
# chown apache. public/
# chown apache. config/

エラー。
PHP7ではphp_flogが使えない。
.user.iniに変更
# less public/.htaccess
#php_flag short_open_tag on
#php_flag magic_quotes_gpc off

# vi public/.user.ini
short_open_tag = on
magic_quotes_gpc = off

STEP3でも.htaccessが上書きされるので、.htaccessを編集する必要があった。
Basic認証用の権限を設定
# chown apache. files/

その他、Apacheの設定が久しぶりだったのでいろいろ試行錯誤しながらインストール完了。


4.試しにプロジェクト作成

管理画面からプロジェクトを作成してみる。
subversion.path + '/svn/'に「svnadmin create」される。
ソースコードに直書きだったので、これは諦めるしかない。


5.既存svnプロジェクトをインポート

スクリプトがあるのを見つけたので使ってみる。
# cd src/library/tools/
# chmod +x usvn-import-svn-repositories.php

ヘルプ表示のために引数なしで実行。
# ./usvn-import-svn-repositories.php

インポート実行、権限付与
# ./usvn-import-svn-repositories.php ../../config/config.ini /home/old/project/
# chown apache. -R /home/svn/repo/svn/project/

管理画面で見てもコミットログが表示されない。
svnadmin upgradeした後にインポートしても同じ。

ディレクトリごと移動するとうまくいった。
# cd /home/svn/repo/
# svnadmin upgrade /home/old/project/
# rm -rf svn/project/
# mv /home/old/project/ svn/
# chown apache. -R svn/project/

管理画面で書き込み権限(write permission)を設定。
adminだと書き込み権限が設定できない。
他の管理者を追加すると設定できた。


SSLも設定した。

USVNのドキュメントが少ないのでサーバー周りに詳しくないとハマると思う。
USVNの管理画面UIが分かりにくいので作り込みたい衝動に駆られたけども、リポジトリを作成するときだけしか使わないので、まぁいいかな。


【関連記事】