2012.02.02
Majordomoをソースからインストール・・・(mail)
FreeBSD 9.0を入れてportsでMajordomoを入れようとすると、古いのでMailmanを使えと言ってくる。以前はそれでもインストールできたのだが、いよいよportsでは入れられないらしい。Mailmanを使うことも考えたが、MLの運用上色々と細かいカスタマイズを行なっているので、なかなか止められない。
そこで、久々にソースを取ってきてインストールしたのだが、だいぶやり方を忘れていたので、改めてインストール方法を書いておくことにした。
まず、下記からmajordomoのソースのgzipファイルをダウンロードしてくる。
http://www.greatcircle.com/majordomo/
そして、適当なフォルダーで解凍する。
# tar xvzf majordomo-1.94.5.tar.gz
majordomo-1.94.51のフォルダーができる。
majordomoのユーザー名、グループ名を決める必要があるので、下記を追加する。
/etc/passwdに
majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent
/etc/groupに
majordom:*:54:
ユーザーIDとグループIDはportsでインストールしたときと同じに54とした。
次にmajordomo-1.94.51に入って、Makefileの編集をする。
# cd majordomo-1.94.51 # vi Makefile PERL = /usr/bin/perl ← perlの位置の指定の修正 W_HOME = /usr/local/majordomo ← 自分のmajordomoのインストール先を指定 W_USER = 54 ← user ID W_GROUP = 54 ← group ID TMPDIR = /usr/tmp ← tmpディレクトリーの指定
次にsample.cfをmajordomo.cfとしてコピーし、編集する。
# cp sample.cf majordomo.cf # vi majordomo.cf $whereami = "host.example.com"; ← 運用するホスト名を入れる。 #if ( defined $ENV{"HOME"}) { # $homedir = $ENV{"HOME"}; #} else { # $homedir = "/usr/test/majordomo"; #} $homedir = "/usr/local/majordomo"; ← $homedirの場所を単純に指定 $sendmail_command = "/usr/sbin/sendmail"; ← sendmailの場所の指定 $TMPDIR = "/usr/tmp"; ← tmpディレクトリーの指定
ここで、/usr/tmpを作成し、パーミッションを書き込みを可能にしてMajordomoをインストール
# mkdir /usr/tmp # chmod 777 /usr/tmp # make install
そして、wrapperのインストールとテスト
# make install-wrapper # cd /usr/local/majordomo # ./wrapper test-config
エラーがでなければ、インストールは終了である。
以降の設定はportsで入れた場合と同じなので省略する。
****インストール後に散々トラブった事****
(1) wrapperの実行権限
インストールして./wrapper config-testは無事に終了したが、FreeBSD 9.0になって、メールの実行権限はrootでなくなったようで、majordomoのwrapperがPermission deniedになってしまう。
この対策として、/etc/groupのmajordomにmailnullを追加する必要があった。
# vi /etc/group majordom:*:54:mailnull ← mailnullを追加する
(2) majordomo.plの修正
lists内にtestのディレクトリーを作りowner, groupともにmajordomにして後に、majirdomoにsubscribe testとメールを出すと動作せず、majordomoディレクトリー内のLogに以下のエラーが記録されていた。
ABORT Majordomo@abc.def.jp: HOGEHOGE <hogehoge@abc.def.jp> is not a valid return address.
PackageでMajordomoを入れると正常に動作するので、色々調べたらmajordomo.plに修正が必要であった。
sub main’ParseAddrsの中の記述である。(98行付近から始まっている)
sub main'ParseAddrs { local($_) = shift; 1 while s/\([^\(\)]*\)//g; # strip comments 1 while s/"[^"]*"\s//g; # strip comments" split(/,/); → my @parts = split(/,/); # split into parts foreach (@_) { → foreach (@parts) { 1 while s/.*<(.*)>.*/$1/; s/^\s+//; s/\s+$//; } @_; → @parts; }
後に調べたら、perl 5.12.以降で修正が必要となったとのこと。マジック変数の@_を使うのが、そもそも間違いだが、以前のperlでは何とか動いていた。
参考URL: http://henrysnotes.org/?p=448
(3) Sequencer
majordomo-1.94.5-jp.patch.gzを/usr/local/majordomoに入れ、日本語化のパッチを行い、resendで動作確認してからsequencerに変えたら動かなくなった。
何のことはない、sequencerの中にもsendmailコマンドに/usr/lib/sendmailをしているところが3箇所あった。/usr/sbin/sendmailに書き直した。
# vi sequencer $sendmail_cmd = "/usr/sbin/sendmail $opt_m -f$sendmail_sender " . print MAIL ">>> /usr/sbin/sendmail -f$sendmail_sender -t\n"; local(@mailer) = split(' ',"/usr/sbin/sendmail -f$sendmail_sender -t");
なお、Majordomoを日本語化したい場合は、日本語化のパッチ(majordomo-1.94.5-jp.patch.gz → 遂にリンク先がなくなった。)をあてた後に下記のようにjsendmailをつくり、majordomo.cfの$sendmail_commandを書き換える。
# vi jsendmail #! /bin/sh /usr/local/bin/nkf -j | /usr/sbin/sendmail $*
# chmod +x jsendmail
# vi majordomo.cf # $sendmail_command = "/usr/sbin/sendmail"; $sendmail_command = "/usr/local/majordomo/jsendmail";
jsendmailに書き換えるのはmajordomo.cfのみで、sequencerなどにある/usr/sbin/sendmailは書き換えてはならない。書き換えるとSubjectのMIME変換がなされなくなる。
(4) その他
sequencerに変えたのはメールのタイトルに[Test:00123]タイトル のようにメールの件名に連番をつけたいからであるが、このためmajordomo/lists内にtest.seq(testの名のML名の場合)のファイルを作り、例えば00001のように最初の番号を入れておく。0の数は、連番の桁数合せのためで、この例の場合は5桁になる。