今はsvnserve over SSHで使っているのですが、以前から試してみようと思っていたDAVを使った設定をしてみました。目標は、DAVを使ってHTTPS上で使えるようにすることです。
SubversionをDAVで使うための設定方法は、subversion 1.0.0 on woodyが参考になります。
まず、apache2とmod_dav_svnをインストールします。/etc/apt/sources.listに以下を追加します。
deb http://www.backports.org/debian woody subversion
そしてapt-getします。
# apt-get install libapache2-svn
apache2は、apache2-mpm-perchildが入るようです。/etc/apache2/apache2.confを見ると、DocumentRootが/var/wwwになっているので、/var/www/apache2-default/に変更しておきます。
それからSSLを有効にします。サーバ証明書は、以下のようにすると/etc/apache2/ssl以下に生成されます。
# /usr/sbin/apache2-ssl-certificate
その他のSSLの設定を簡単にやる方法はなさそうなので、手でやる必要があります。まずは、/etc/apache2/ports.confに以下の行を追加します。
Listen 443
SSLの設定ファイルは、/usr/share/apache2/config/default-443にあるのでこれを/etc/apache2/sites-availableにコピーします。
# cp /usr/share/apache2/config/default-443 /etc/apache2/sites-available
そして、このファイルを編集してサーバ名などを設定します。それから、usr/sbin/a2enmodを使ってmod_sslを有効にします。
# /usr/sbin/a2enmod ssl
ようやくmod_dav_svnの設定です。HTTPでもサービスする場合には、/etc/apache2/mods-available/dav_svn.confを編集すれば良いのですが、HTTPSだけにしたいので、先ほど作った/etc/apache2/sites-available/default-443の中に書きこむ事にします。
最終的にできたファイルはこんな感じです。ドキュメントルートはHTTPと共通にしてあります。
<IfModule mod_ssl.c> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/apache2/ssl/apache.pem SSLCertificateKeyFile /etc/apache2/ssl/apache.pem BrowserMatch "MSIE [1-4]" nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [5-9]" ssl-unclean-shutdown SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP ServerAdmin webmaster@yourdomain ServerName yourhost.yourdomain DocumentRoot /var/www/apache2-default <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/apache2-default> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-local/ /var/www/apache2-default/cgi-bin/ ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/var/www/apache2-default/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> <Directory "/usr/lib/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log-443 LogLevel warn CustomLog /var/log/apache2/access.log-443 combined ServerSignature On Alias /icons/ "/usr/share/apache2/icons/" Alias /manual/ "/usr/share/doc/apache2-doc/manual/" <Directory "/usr/share/apache2/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> <Location /svn> DAV svn SVNParentPath /var/lib/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/dav_svn.passwd AuthzSVNAccessFile /etc/apache2/dav_svn.authz Require valid-user </Location> </VirtualHost> </IfModule>
mod_dav_svn関係の設定は一番下のところです。今回は匿名アクセスは全て不許可にして必ずBasic認証するようにしてあります。/etc/apache2/dav_svn.passwdは/usr/sbin/htpasswd2で作成します。/etc/apache2/dav_svn.authzはこんな感じです。
[groups] committer = foo read-only = bar [test:/] @committer = rw @read-only = r
committerグループの人には全て読み書き可能で、read-onlyグループの人には読み取りのみ可能にしてあります。このファイルの詳しい説明は、ここにあります。
後はクライアント側から、
$ svn co https://yourhost.yourdomain/svn/test
とするとチェックアウトできます。SSLのサーバ証明書が自己署名なので、初回に受け入れるかどうかをたずねてきます。FingerPrintを確認して大丈夫だったら受け入れます。その後、Basic認証のユーザ名とパスワードを聞かれます。これらの設定は、Subversion側で保存してくれるので、次回からは何も聞かれなくなります。
家のルータはブラウザから設定するようになっているのですが、当然外からはアクセスできません。JavaScriptを使っているのでテキストブラウザではうまくいきませんし、それだけのために内側のPCにリモートデスクトップを入れるのもあれだなと思っていたのですが、良く考えたらSSHのPortFowardingをすればOKですね。
ssh -L 8080:ルータの内側のIPアドレス:80 内側のSSHサーバ名
のようにして、ブラウザでhttp://localhost:8080/にアクセスすればOKでした。POP3やIMAP4のトンネルはすぐに思いつくのですが、HTTPはなぜか思いつきませんでした。
忘れないようにメモしておきます。
最小リクエスト間隔の設定
今はメールの自動チェックと同時にRSSのチェックをしようとするとやたら頻繁にリクエストを投げてしまうので(If-Modified-Sinceは付けますが)、一定時間リクエストをしなくする設定があったほうが良さそうです。
リファラの設定
リファラはやっぱりRSSのURLを入れておくのが筋な気がします。
User-Agentの設定
これもした方が良いですね。
robots.txtを読む?
ロボットじゃないですが、読んだほうが良いんでしょうか?余計負荷が上がってしまう可能性があるので読まない方が良い気もします。