« | Home | »

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桁になる。


コメント

コメントはありません

コメントフィードを購読する

コメント投稿





コメント本文に次の(X)HTMLタグを使えます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)