Subversion1.9をCentOS7にInstallして設定(svnserve)
ドキュメント管理はSubversion + TortoiseSVNが便利なので、新しいサーバーにSubversionインストールしてリポジトリを移行したときの覚書。
環境: CentOS 7.2.1511, Subversion 1.9.4
これだけのためにApacheを使いたくないので、nginxからsvnserveへフォワーディングする方法を試してみた。
目次
- Subversionをインストール
- svnserveをサービスとして登録
- テストプロジェクトを作ってコミット確認
- 共通の設定ファイルを使うように変更
- Nginxからフォワーディング設定(失敗)
- Subversion 1.8のリポジトリを1.9に移行
- Repository Formatをアップデート
1.Subversionをインストール
YUM経由で管理したいので、下記からダウンロードする。登録が必要。
ダウンロードしたスクリプトをサーバーに転送して実行。
# cd /opt/software/
# chmod +x subversion_installer_1.9.4-1.sh
# ./subversion_installer_1.9.4-1.sh
whichコマンドが必要だった。
# yum install which
再度実行
# ./subversion_installer_1.9.4-1.sh
mod_dav_svnはインストールしない。
2.svnserveをサービスとして登録
サービスとして起動しようとしてもエラー。
# systemctl status svnserve
YUMのBaseリポジトリからインストールするとサービス登録までしてくれるので、こちらのスクリプトを参考に登録する。
Baseリポジトリ版は/usr/lib/systemd/system/svnserve.serviceに配置されている。このディレクトリは編集するべきではないらしい(参考:「Systemd」を理解する ーシステム管理編ー | ギークを目指して)。
# vi /etc/systemd/system/svnserve.service
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/svnserve
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve.pid $OPTIONS[Install]
WantedBy=multi-user.target
実行権限を付ける
# chmod +x /etc/systemd/system/svnserve.service
確認
# systemctl status svnserve
設定ファイルを用意
# vi /etc/sysconfig/svnserve
# OPTIONS is used to pass command-line arguments to svnserve.
#
# Specify the repository location in -r parameter:
OPTIONS="-r /home/svn"
設定したデフォルトリポジトリの場所を作る
# mkdir /home/svn
pidの置き場所を作る。再起動するとsvnserveフォルダがなくなっているため/run/直下にpidファイルを置くようにした。# mkdir /run/svnserve/
サービススタート、確認、自動起動登録
# systemctl start svnserve
# systemctl status svnserve
# systemctl enable svnserve
エラーが出たらログを確認する。
# journalctl
ポートが開いてるか確認。デフォルトで3690
# ss -natu
iptablesに追記
# less /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
再読み込み
# systemctl reload iptables
3.テストプロジェクトを作ってコミット確認
新規リポジトリを作る
# cd /home/svn/
# svnadmin create testproject
TortoiseSVNでチェックアウトしてみる。
svn://111.222.333.444/testproject
デフォルトではコミットできないので、ユーザーを追加する。
passwdファイルを有効化
# less testproject/conf/svnserve.conf
password-db = passwd
ユーザー追加
# less testproject/conf/passwd
[users]
suganuma = password
これでTortoiseSVNでコミットしようとするとユーザー名を聞かれる。
4.共通の設定ファイルを使うように変更
レポジトリを作るごとに設定ファイルを編集したくないので、共通の設定ファイルを参照するようにする。
サービスの起動オプションを変更
# less /etc/sysconfig/svnserve
# OPTIONS is used to pass command-line arguments to svnserve.
#
# Specify the repository location in -r parameter:
OPTIONS="-r /home/svn --config-file /etc/svnserve.conf"
設定ファイルをコピーして編集
# cp testproject/conf/svnserve.conf /etc/
# less /etc/svnserve.conf
anon-access = none
auth-access = write
password-db = /etc/svnserve.d/passwd
authz-db = /etc/svnserve.d/authz
passwdとauthzもコピーして編集
# mkdir mkdir /etc/svnserve.d
# cp testproject/conf/passwd /etc/svnserve.d/
# cp testproject/conf/authz /etc/svnserve.d/
# less /etc/svnserve.d/authz
[groups]
admin = suganuma[/]
@admin = rw
サービス再起動
# systemctl stop svnserve
# systemctl start svnserve
リポジトリを作って試してみる。
5.Nginxからフォワーディング設定(失敗)
ポートを開けたくないので、http://svn.hoge.jp/のURL指定でチェックアウトできるようにNginxの設定をする。
まずは開けたポートを閉じる。
# less /etc/sysconfig/iptables
# systemctl reload iptables
TortoiseSVNからコミット出来ないのを確認。
Nginxの設定追加
# cd /etc/nginx/conf.d/
# vi 03_svnserve.conf
server {
listen 80;
server_name svn.*;client_max_body_size 300M;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Destination $http_destination;proxy_pass http://127.0.0.1:3690;
}
}
configtestして再読み込み
# nginx -t
# systemctl reload nginx
TortoiseSVNでチェックアウトしてみるとエラー。ログを確認。
# less /var/log/nginx/error.log
2016/07/12 19:48:15 [error] 29022#29022: *1272 upstream sent no valid HTTP/1.0 header while reading response header from upstream, client: 124.44.155.20, server: svn.*, request: "OPTIONS /test2project HTTP/1.1", upstream: "http://127.0.0.1:3690/test2project", host: "svn.hoge.jp"
httpプロトコル経由では出来ないみたい。http経由なら素直にApacheを使った方がいい。
svn+sshを使うと別ポートを開けずに暗号化通信できて良さそう。
今のところ「svn://」で運用することにした。
6.Subversion 1.8のリポジトリを1.9に移行
移行元でtar圧縮して移行先で展開するだけ。
7.Repository Formatをアップデート
まずは今のリポジトリフォーマットを確認
# svnadmin info /home/svn/hoge_project
パス: /home/svn/hoge_project
UUID: 41fa554a-04d3-4b21-a394-f259fe7b8181
Repository Format: 5
Compatible With Version: 1.8.0
Repository Capability: mergeinfo
Filesystem Type: fsfs
Filesystem Format: 6
FSFS Sharded: yes
FSFS Shard Size: 1000
FSFS Shards Packed: 0/0
FSFS Logical Addressing: no
アップデートコマンド実行
# svnadmin upgrade /home/svn/hoge_project/
確認
# svnadmin info /home/svn/hoge_project
パス: /home/svn/hoge_project
UUID: 41fa554a-04d3-4b21-a394-f259fe7b8181
Repository Format: 5
Compatible With Version: 1.9.0
Repository Capability: mergeinfo
Filesystem Type: fsfs
Filesystem Format: 7
FSFS Sharded: yes
FSFS Shard Size: 1000
FSFS Shards Packed: 0/0
FSFS Logical Addressing: no
大きいファイル(600MB)をコミットしようとすると下記エラー
Error: Commit failed (details follow):
Error: Unexpected HTTP status 413 'Request Entity Too Large' on
svnserveにファイルサイズの設定はなさそうなのに。分かったら追記予定。
と思ったらRelocateしたときにURL間違えてて、移行元をターゲットに一生懸命コミットしようとしてた。
移行先の「svn://」に変更したら無事完了。
< Related Posts >