Home

技術系のメモと日々の雑感

OpenWebMail を試してみた

ふとした理由で OpenWebMail を試してみたので手順をまとめておく。
環境は CentOS 5.3 だったけど、もっと新しいバージョンでも大して変わらないと思う。
まずは前提となる Perl のモジュールのインストールから。

# perl -MCPAN -e shell
cpan> install CGI
cpan> install MIME::Base64
cpan> install Text::Iconv
cpan> install HTML::Template

後で分かったことだけど、suid が立っているスクリプトがあって、そのままでは Apache から呼べない。
なのでここで suidperl を入れておく。

# yum -y install perl-suidperl

続いて OpenWebMail のソースを展開。

# mkdir -p /usr/local/src/openwebmail
# cd /usr/local/src/openwebmail
# wget http://openwebmail.org/openwebmail/download/release/openwebmail-2.53.tar.gz
# tar zxvf openwebmail*
# mv data/openwebmail /var/www/html
# mv cgi-bin/openwebmail /var/www/cgi-bin

カレントディレクトリ直下に cgi-bin と data というディレクトリができるから、他のファイルと混ざらないように、あらかじめ専用のディレクトリを作ってから展開した方がいいね。
さて、動かすための設定を入れていこう。
ログイン認証のパスワードは /etc/shadow を見にいくように /var/www/cgi-bin/openwebmail/etc/defaults/auth_unix.conf をちょこっと修正。

passwdfile_encrypted /etc/shadow
passwdmkdb none

メインの設定ファイル /var/www/cgi-bin/openwebmail/etc/openwebmail.conf は環境に合わせておく。

mailspooldir /var/spool/mail
ow_cgidir /var/www/cgi-bin/openwebmail
ow_cgiurl /cgi-bin/openwebmail
ow_htmldir /var/www/html/openwebmail
ow_htmlurl /openwebmail

で、設定を反映するおまじない。

# /var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init
Please change '/var/www/cgi-bin/openwebmail/etc/dbm.conf' from

dbm_ext .db
dbmopen_ext none
dbmopen_haslock no

to

dbm_ext .db
dbmopen_ext .db
dbmopen_haslock no

And execute '/var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init' again!

おおっと、怒られてしまった。
親切なメッセージに従って /var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf を手直ししよう。

dbmopen_ext .db

これであとは Apache の AddHandler cgi-script .cgi .pl を有効にしたらできあがり。
ログイン画面は http://[IP or host]/cgi-bin/openwebmail/openwebmail.pl だ。

Unable to read server certificate

SSL の証明書を更新したら Apache が起動しなくなったとの声が聞こえてきた。
ログを見せてもらうと

[error] Init: Unable to read server certificate from file /usr/local/apache/conf/ssl/server.crt
[error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error

とのこと。
中身が壊れてるって言っているんだね。
実はこのエラー、原因は改行コード。
元が何になっていたのか定かではないけど、LF に変えたら解決した。
覚えとこ。

stat コマンドの特定の値だけ取得する

シェルスクリプトの中でファイルのサイズを取得しようと思い、stat コマンドが使えるだろうと予想。
ところが意外なことに、巷にあるオンラインのマニュアルには特定の値だけを出力させる方法が詳しく書かれてなかった。
欲しい情報はサイズだけなのに、何も指定しないと

$ stat hoge.txt
  File: `hoge.txt'
  Size: 533             Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 205979674   Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2010-09-30 16:48:37.000000000 +0900
Modify: 2010-09-30 16:48:37.000000000 +0900
Change: 2010-09-30 16:48:37.000000000 +0900

という具合に、たっぷりと情報が表示される。
結局、やりたかったことは

$ stat -c%s hoge.txt

でいけた。
実際にやってみないと分からないことって多いね。

Mac のブラウザだけ SSL 証明書のエラーが出る

Safari ErrorWindows の IE とか Firefox では問題ないのに、Mac の Safari だと、「Safari は Web サイト xxxxx.xxx の識別情報を検証できません。この Web サイトの証明書は不明な認証機関によって署名されています」というエラーが出るパターンに遭遇。
あ、正確に言うと Mac 上の Firefox でも同様のエラーが出る。
もちろん、ちゃんとした証明書を使ってるんだけどね。
で、クライアント側の問題かと思ってひとしきり悩んだ結果、サーバ側で中間証明書が正しく設定されてないのが原因だった。
Apache の mod_ssl を使っているので、ファイルを置いてから

SSLCertificateChainFile /usr/local/apache/conf/server-ca.crt

の行を有効にすれば解決。
これって気づきにくい現象だから、いっそ全部のブラウザでエラーが出てくれる方がいいなぁ。

master and slave have equal MySQL server ids

MySQL でレプリケーションを組むときは server-id がユニークになるように十分に注意しているつもりだった。
ところが、この前うっかりマスタと同じ値をスレーブに振ってしまった。
show slave status を実行すると

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).

という丁寧なメッセージが出るので一目瞭然だね。
何か問題が発生すると思っていたので絶対にしたくないミスだったんだけど、値を修正すれば何事もなかったように動いた。
そんなにビビる必要はなかったのか・・・。