2004年7月 7日アーカイブ

なんとか、apache2.0が動くようになったみたいです。
今回は、めっちゃはまった~(汗)

まずは、動機から。
subversionと言うバージョン管理ツールがあります。こいつをリモートから使うには、sshを使うか、svnservを使うか、davを使うかのどれかになるのですが、折角なのでdavを使おうと思ったのが事の始まりです。
今までは、apache1.3+modsslでしたが、davを使うためにはapache2系でないとなりません。
そこで、apache2を入れようと思って調べたところ、mod_perl2がperl5.8以上を要求してきました。
以前システムのperl5.0から5.6にしたときには、単にperl5.6をインストールしてからp5-*をportupgrade -f すれば良かったのですが、5.6から5.8はそう簡単に行きません。(行くのかも知れないけど、portupgradeの使い方がわからない)
で、まずはapache1.3やperl5.6のアンインストールです。
apacheに依存しているmod_php4や、perlに依存しているamavisd, spamassassinなどもすべてアンインストールになるため、一度postfixも止めました。
で、泣きながらperl5.8.4をインストールし、perl関係のライブラリをインストールし、apache2.0.50をインストールしました。
モジュール系は、mod_perl2やmod_jk2-apache2など、apache2用のものを選んで入れました。apache2用がわかれていないものでも、makeのオプションにWITH_APACHE2やWITH_MODPERL2などを指定する必要があるものもありました。
全てのインストールが終わったら、httpd.confを1.3用のものから2.0用に書き換えなくてはなりません。
とりあえず、DocumentRootなどのパスを指定する系を書き換えて、apacheを起動してみました。
・・・が、エラーが出て起動しません。

VirtualHostの設定が変わっている

うちの場合は、VirtualHostを使って、http用に二つのホスト名、https用に一つのホスト名を使っているのですが、* port と non-* port を混ぜて使えないよ!みたいなエラーが出てapacheが起動しません。
どうも、2.0になってこの辺の解釈が厳しくなったみたいです。
NameVirtualHost www.example.com
<VirtualHost www.example.com:80>
</VirtualHost>
<VirtualHost www.other.com:80>
</VirtualHost>
<VirtualHost www.example.com:443>
</VirtualHost>
のような構成だったのですが、
NameVirtualHost www.example.com:80
<VirtualHost www.example.com:80>
</VirtualHost>
<VirtualHost www.other.com:80>
</VirtualHost>
NameVirtualHost www.example.com:443
<VirtualHost www.example.com:443>
</VirtualHost>
のように直すことで起動するようになりました。

ページが表示されない!

apacheが起動したので、早速ブラウザからアクセスしてみます。
・・・が、ファイルのダウンロードのダイアログが出て、ページが表示されません。
なんで~?と思っていろいろ調べたのですが、どうも content-typeをtext/htmlとして送ってくれていないようです。
さんざん悩んだ挙句、httpd.confではなくて、.htaccessの方に書いてあったSSIの設定のせいでした。
Options +Includes
AddType text/x-server-parsed-html .html
AddType text/x-server-parsed-html .htm
のように書いてあったのですが、apache2ではSSIを使うためには以下のように書くのでした。
Options +Includes
AddOutputFilter INCLUDES .html
AddOutputFilter INCLUDES .htm
SSIが、OutputFilterで実現されるようになったみたいです。

日本語が化ける!

これで、いよいよページが表示されるようになりました!が、文字が化けています。
ページには、ちゃんとmetaタグでcharsetが指定してあるのですが、関係なく iso-8859-1として認識されてしまうようです。
これについては、httpd.confのAddDefaultCharsetをデフォルトのISO-885-1から以下のように変更しました。
AddDefaultCharset Off

mod_gzipからmod_deflateへ

今までは、apache1.3にmod_gzipを追加して使っていたのですが、apache2.0からはmod_deflateがデフォルトで付いてきます。
マニュアルのとおりに、
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
のように書くことで有効になりました。ログに圧縮率を出したかったので、
DeflateFilterNote ratio
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{ratio}n%%" combined
の記述も追加しておきました。
ちなみに、proxy経由でアクセスする場合、ブラウザ(IE)の設定で、「プロキシ接続でHTTP 1.1を使用する」にチェックをしていないと、圧縮が有効になりませんでした。

最後の難関mod_perl2

MovableTypeを高速化するmod_perl。是非、今まで通り動いて欲しいところですが、動かないんだな、これが。
mod_perlとmod_perl2の違いを解説しているページなどを見ながら、一生懸命ためした結果、
PerlSetEnv PERL5LIB /var/www/docs/cgi-bin/mt/lib:/var/www/docs/cgi-bin/mt/extlib
PerlModule Apache::Registry
<Directory "/var/www/docs/cgi-bin/mt">
  SetHandler perl-script
  PerlHandler Apache::Registry
  PerlModule Apache::DBI
  Options +ExecCGI
  PerlSendHeader Off
</Directory>
と言う設定だったものを、
PerlSetEnv PERL5LIB /var/www/docs/cgi-bin/mt/lib:/var/www/docs/cgi-bin/mt/extlib
PerlModule Apache2
PerlModule ModPerl::Registry
PerlModule Apache::DBI
<Directory "/var/www/docs/cgi-bin/mt">
  SetHandler perl-script
  PerlResponseHandler ModPerl::Registry
  Options +ExecCGI
  PerlOptions -ParseHeaders
</Directory>
と書き換えて、さらにスクリプトの実行ディレクトリがmod_perlのときとは変わってしまうので、mtのスクリプトを書き換えたりしましたが、結局うまく行きませんでした。
どうも、mod_perlのAPI自体が変わってしまったために、MT自身を書き換えないといけないようです。(最後に出てたエラーは、Apache::Cookie関連でした)
と、言うわけで、とりあえずmod_perl2でMTを動かすのは諦めることにしました。

さて、長くなったので、DAVとsubversionは別のエントリーにすることにします。

DAV

| | コメント(0) | トラックバック(0)| Edit
apache2.0にしたので、DAVを使ってみることにします。
httpd.confの、SSLの部分に、以下を追加します。
DAVLockDB /var/www/DAVLock
Alias /dav "/var/www/dav"
<Location /dav>
    DAV On
    AuthType Digest
    AuthName DAV
    AuthDigestFile /usr/local/etc/apache2/digest.pw
    Require valid-user
</Location>
で、上の設定では/var/www/davを使うので、/var/www/davディレクトリを作成し、オーナーをwwwにしておきます。
ロックファイルは/var/www/に作るようにしたので、このディレクトリもwwwが書ける必要があります。
davに書ける人を制限したかったので、/usr/local/etc/apache2/digest.pwにパスワードエントリーを作成します。
# htdigest -c /usr/local/etc/apache2/digest.pw hogehoge
などのようにすると、hogehogeと言うユーザを作成できます。
後は、apacheを再起動して、WindowsからWEBフォルダの追加で、URLを指定してやると、無事にアクセスできます。
いろいろなサイトで、mod_encodingのことを書いてありますが、私の場合は特に設定しなくても、サーバ上にはutf-8で置かれているようです。
CVSに取って代わるバージョン管理システム!と言うふれこみの、subversionを入れてみました。
# ちなみに、このサイトのblogやwikiでない部分は、cvsで管理されています。
portsからdevel/subversionをインストール。makeオプションは、WITH_MOD_DAV_SVN=yes
このオプションを付けると、apache2にmod_dav_svnがインストールされます。さらに、svnが使用するapr-utilと言うライブラリが、apache2に付属のものになります。
apache2に付属のものを使わない場合は、portsのaprが使われます。
別の場所で一度インストールしたのですが、そのときはapacheのバージョンが2.0.49で、apache2に含まれるapr-utilがlibiconvをリンクしてくれませんでした。
おかげで、subversionで日本語が使えないと言う問題が発生したのですが、apache2.0.50のapr-utilはデフォルトでiconvを使ってくれるようです。

subversionのインストールが終わったら、httpd.confに以下の設定を追加します。
<Location /svn>
    DAV svn
    SVNParentPath /var/svn
    SVNIndexXSLT "/svnindex.xsl"
    AuthzSVNAccessFile /usr/local/etc/apache2/svnauth
    Satysfy Any
    Require valid-user
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile /usr/local/etc/apache2/svnpasswd
</Location>
subversionのリポジトリを置くディレクトリとして、/var/svnを指定していますので、このディレクトリを作成してオーナーをwwwにしておきます。
さらに、xslとして/svnindex.xslを指定していますので、subversionのソースのtools/xsltにある二つのファイルを、documentrootにコピーします。(documentroot以外にするときは、svnindex.xslの中のcssのパスを書き換える必要があります)
続いて、/usr/local/etc/apache2/svnauthファイルを作成します。このファイルには、リポジトリ毎のアクセス権を記述します。
とりあえず、私は以下のようにしました。
[/]
false = rw
[/]は、全てのリポジトリと言う意味です。この設定で、falseと言うユーザは全てのリポジトリに読み書きの権限をもちます。
/usr/local/etc/apache2/svnpasswdにユーザを登録します。
# htpasswd -c -m /usr/local/etc/apache2/svnpasswd false
とやると、ユーザfalseが追加できます。
続いて、リポジトリを作ってみます。
# cd /var/svn
# svnadmin create rep
# chown -R www:www rep
これで、repと言う名前のリポジトリができました。
クライアントからのアクセスは、https://www.wizard-limit.net/svn/rep/プロジェクト名 などのURLで行います。
proxy経由で、FreeBSDのsvnコマンドやWindowsのTortoiseSVNでアクセスできることを確認しました。
2004年7月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

このアーカイブについて

このページには、2004年7月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2004年7月 6日です。

次のアーカイブは2004年7月 8日です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.1.1