subversionをCentOS6環境に構築したときのメモ。
subversionの構築は、こことかここを参考に実施。
インストールはyumでインストするだけ。リポジトリはApache経由でhttpアクセスさせるため、mod_dav_svnもインストールする。
$ sudo yum -y install subversion mod_dav_svn
リポジトリのディレクトリを作成。
/var/lib/svnをリポジトリの親ディレクトリとし、testsvnリポジトリを作成。
$ cd /var/lib $ sudo mkdir svn $ sudo svnadmin create /var/lib/svn/testsvn $ sudo chown -R apache:apache ./* $ sudo chmod -R u+rw ./*
コミット時に誰が更新したのかの情報も欲しいので、ユーザ認証もすることにする。
htpasswdコマンドでユーザ認証用ファイルも作成。
初回のみ「-c」オプションを使用してファイル作成。2回目以降に指定すると、既存ファイルの内容が消えるので注意する。
$ sudo htpasswd -c /etc/httpd/.htpasswd {USERNAME1} $ sudo htpasswd /etc/httpd/.htpasswd {USERNAME2} $ sudo htpasswd /etc/httpd/.htpasswd {USERNAME3}
/etc/httpd/conf.d/subversion.confに以下を設定。
SVNParentPathは、SVNリポジトリの親ディレクトリを指定するオプション。
単一のSVNリポジトリを指定する場合は、SVNリポジトリディレクトリをSVNPathで指定する。
ユーザ認証のための設定も行う。以下設定は、リポジトリのread/write両方にユーザ認証が必要。
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so <Location /svn> DAV svn SVNParentPath /var/lib/svn AuthType Basic AuthName "Authorization" AuthUserFile /etc/httpd/.htpasswd Require valid-user </Location>
Apacheに設定ファイルを再読み込みさせる。
$ sudo service httpd reload
ブラウザからアクセスしてみても繋がらない。
パケットキャプチャ取って見てみたら、クライアントからのSYN要求に対してICMPエラーが返却されてる。
iptablesの仕業か?
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT all -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) target prot opt source destination REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) target prot opt source destination
httpアクセス許可のエントリがなさそうなので追加。
# iptables -I INPUT 5 -p tcp --dport http -j ACCEPT # iptables -L --line-number Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 2 ACCEPT icmp -- anywhere anywhere 3 ACCEPT all -- anywhere anywhere 4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 5 ACCEPT tcp -- anywhere anywhere tcp dpt:http 6 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination # /sbin/service iptables save
この後ブラウザからアクセスしたら、SVN見れた。解決。
と思ったら、TortoiseSVNからリポジトリにファイルコミットしたらエラー発生した。
原因はここに書いてあった。
以下のコマンドを実行することで解決。
chcon -R -t httpd_sys_content_rw_t /var/lib/svn/testsvn
SELinux面倒くさい。
以上で構築完了。
今後のことを考えて、リポジトリ作成、ファイル権限設定、ディレクトリ作成の手順はシェルスクリプト化した。
#!/bin/bash REP_BASE=/var/lib/svn REP_NAME=$1 if [ -z "$REP_NAME" ]; then echo "Usage: $0 Repository-name" exit 1 fi REP_PATH=$REP_BASE/$REP_NAME if [ -e $REP_PATH ]; then echo "Repository:$REP_NAME is already exists." echo "Specify another name." exit 1 fi # create new repository and set permission to Apache svnadmin create $REP_PATH && \ chown -R apache:apache $REP_PATH && \ chmod -R u+rw $REP_PATH && \ chcon -R -t httpd_sys_content_rw_t $REP_PATH if [ $? != 0 ]; then echo "Failed in create repository!!" exit 1 fi echo "Create new repository:$REP_NAME ." # create trunk,branches,tags directory svn mkdir \ file:///$REP_PATH/trunk \ file:///$REP_PATH/branches \ file:///$REP_PATH/tags \ -m "create trunk, branches, tags dirs"