Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

2004-05-13 [長年日記]

[SVN] Subversion w/ DAV over HTTPS on woody

今は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側で保存してくれるので、次回からは何も聞かれなくなります。

SSH越しにルータの設定

家のルータはブラウザから設定するようになっているのですが、当然外からはアクセスできません。JavaScriptを使っているのでテキストブラウザではうまくいきませんし、それだけのために内側のPCにリモートデスクトップを入れるのもあれだなと思っていたのですが、良く考えたらSSHのPortFowardingをすればOKですね。

ssh -L 8080:ルータの内側のIPアドレス:80 内側のSSHサーバ名

のようにして、ブラウザでhttp://localhost:8080/にアクセスすればOKでした。POP3やIMAP4のトンネルはすぐに思いつくのですが、HTTPはなぜか思いつきませんでした。

[Q3] RSS関係で細かいところ

忘れないようにメモしておきます。

  • 最小リクエスト間隔の設定

    今はメールの自動チェックと同時にRSSのチェックをしようとするとやたら頻繁にリクエストを投げてしまうので(If-Modified-Sinceは付けますが)、一定時間リクエストをしなくする設定があったほうが良さそうです。

  • リファラの設定

    リファラはやっぱりRSSのURLを入れておくのが筋な気がします。

  • User-Agentの設定

    これもした方が良いですね。

  • robots.txtを読む?

    ロボットじゃないですが、読んだほうが良いんでしょうか?余計負荷が上がってしまう可能性があるので読まない方が良い気もします。