| Home | 次のページ »    [mail ]

2012.02.02

Majordomoをソースからインストール

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

2011.01.19

FreeBSDでThunderbirdの日本語化

FreeBSDでも使い慣れたThunderbirdを使うため、packageでthunderbird-3.0.5_1、thunderbird-i18n-3.0.5_1を入れた。
ところが、何処をどういじっても日本語にならない。そこで下記のことを行った。

(1) Windowsで使っているThunderbirdは、3.1.7であるが、下記のchromeフォルダーをコピーして、FreeBSDに適当なディレクトリーを作って入れる。

C:\Documents and Settings\usename\Application Data\Thunderbird\Profiles\d3hnamhc.default\extensions{xxxxxxxxx}\chrome

(2) Windowsから持ってきたchromeの中のファイルの全てをFreeBSDの下記のchromeディレクトリーにコピーする。

# cp xxxxx/chrome/* /usr/local/lib/thunderbird/chrome

(3) Thunderbirdを起動して「ツール」→「言語選択」で、日本語を選択する。
  そして、Thunderbirdを再起動すれば、日本語の表示になる。

thunder.jpg

(4) Thunderbirdのアドレス帳(住所の表示順) で書いた処理を行って、住所の表示順を日本式にする。

(5) WindowsのThunderbirdでアドレス帳をエクスポートして、FreeBSDのThunderbirdでインポートする。

以上で、処置は終了であるが、Windowsのchromeの内容は、FreeBSD用のThunderbirdでも使えるのが素晴らしい。

2011.01.06

Thunderbirdのアドレス帳(住所の表示順)

FreeBSDには、全然関係ない話である。
今までに主に使ったメーラーは、ALmail、Beckyときて、今はThunderbirdを使っている。
使い勝手は、悪くないし気に入っているのであるが、アドレス帳のカテゴリーツリーが、2段までである。これは、諦めがついているが、住所の表示順序が、番地が最初で、町、都道府県と日本での住所表記の逆であるのは、何とかならないかと思っていた。
ネットで探すと、japanese_style_address-0.1.1-tb.xpiという、Add On Softが見つかった。
しかし、現在私が使っているThunderbirdの3.1.7版では、適用出来ないと拒絶される。
そこで、下記のようにしてjapanese_style_address-0.1.1-tb.xpiを作り変えて、成功した。

1. xpiファイルの解凍

今まで、知らなかったのだが、xpiファイルは、圧縮ファイルでxxxx.xpiはxxxx.zipとファイル名を変えれば、普通に解凍できる。
解凍しすると、chromeというフォルダーと、chrome.manifest,、install.rdfの2つのファイルがあるので、この中でinstall.rdfをエディターで開くと、下記に示すようにem:targetApplicationのセクションにem:maxVersion=”3.1a1pre”の記述がみつかる。
これをem:maxVersion=”3.1.*”に修正する。

<em:targetApplication>
  <RDF:Description em:id="{3550f703-e582-4d05-9a08-453d09bdfdc6}"
                   em:minVersion="3.0"
                   em:maxVersion="3.1a1pre" /> → em:maxVersion="3.1.*" />
</em:targetApplication>

2. xpiファイルの再構築

解凍して、修正したinstall.rdfとchrome.manifestならびにchromeのフォルダーの3つを選択して、Lhacaにドラッグして出来上がったzipファイルをjapanese_style_address-3.1-tb.xpiに名前を変更する。

3. xpiファイルの適用

Thunderbirdを立ち上げ、「ツール(T)」→「アドオン(A)」を選択して、開いた「アドオン」画面で「インストール」をクリックして、先に作ったxpiファイルを選択して、アドオンを適用する。
Thunderbirdを再起動すれば、見事に日本式の住所表記順に直っている。

ubuntuで使っているThunderbirdにも用いたが、問題なく適用出来た。

address.jpg

下記に修正済みのjapanese_style_address-3.1-tb.xpiを載せておく。

japanese_style_address-3.1-tb.xpi

2010.12.07

MHonArcによるメールのhtml表示の構成

メーリングリストを運用していると、投稿されたメールを整理された形でWebからも見られるようにすることが望まれる。その用途にはMHonArcというソフトが存在するが、満足な結果を得るためには、様々な対処が必要になる。
最初に、メールのaliasesに書いている文を下に示しておく。heptaviaと名付けたmlの運用を行っていて、投稿されたメールはMajordmoで会員に配送されるとともに、このメールaliasesにも送られてくる。なお、メール表示ページのディレクトリーは/web/data/heptavia/mlである。

heptaviaml: "| /usr/local/bin/chopper | /usr/local/bin/nkf -me | /usr/local/bin/newmlist /web/data/heptavia/ml Heptavia"

1. htmlメールとbase64/quoted-printableエンコードに対する処理

メーリングリストでは、Plain textメールのみ許し、htmlメールは許さないと宣言している例は多いが、Microsoftの評判の悪いOutlookのdefaultがhtmlメールになっていることが災いしてか、htmlで送信してくるメンバーが後を絶たない。特にPC関連のliteracyに乏しい人が多いメーリングリストでは、htmlメールの根絶は無理である。
さて、outlookから送られてくるhtmlメールを見ると、メール本文は2つのパートからなり、平文のメール内容の後に、同じ内容のhtml文が付いた構造であるのが分かる。
そこで、後半のhtml部分を切り離して、mhonarcに送り込むためのプログラムを書くこととした。合わせてbase64/quoted-printableのエンコードに対する処理とメール送信者にWarningメールを送る機能も持たせた。改めて、プログラムの機能を箇条書きすると、

(1)平文の場合は、base64/quoted-printableで送られてきたときには、デコード処理のみ行い、
  その他の場合はそのままで送り出す。
(2) htmlメールのhtml文部分の切り離し、平文部分のみを取り出したメールを再構築
(3) base64/quoted-printableのデコード
(4) メール送信者にプレーンメールとするよう警告メールを発信

chopperの名前のプログラムで、やっつけ仕事であり、あまり綺麗な作りでなくて恥ずかしいが、ここに上げておく。==> chopper
また、この中で使っている送信者への警告文は下記のようなものです。
————————————————————————–
メーリングシステムの自動発信メールです。

html形式でMLにメール送信されました。
今後は、テキスト形式で投稿されるようお願いします。

 一般的にhtml形式の方がウイルスの混入に脆弱であるため、メーリング
 リストのような、大勢の人に同時に送られる用途では使用しないのが正しいとさ
 れています。
————————————————————————–
chopperを通ったメールは、nkfでEUCコードに変換(nkf -me)され、次の月別分割処理プログラムに送られる。

2. メールの月別分割

mhonarcは月別の分割機能はないので、Nobさん(→リンク先がなくなった)のmlist2htmlを使わせていただいていたが、以下の変更を加えて名前をnewmlistとしている。

(1) 時差の影響の処理

メーリングリストの会員に海外在住者がいると、月の変わり目でメールのやり取り上、今月に分類されるべきメールが前月に入ってしまうことがある。例えば、5月1日の真夜中の0時過ぎに送られたメールに対するレスが4月30日になることが起こり得るのである。大概の国は日本より時刻が遅れているからである。この修正のため、メールの送信された時の日本時刻で、分類するようにした。

(2) ファイルの書き出しの回避

オリジナルのmlist2htmlでは、/tmp/tmp_$$のファイルに処理結果を書き出し、最後に読み出しながらmhonarcにメール文を渡している。これを修正して、ファイル書き出し不要とし、全てメモリー上のデータとして扱うようにした。

ファイルは、ここに上げておく。==> newmlist

3. mhonarcの対処

(1) 文字化け問題

以前に、iso2022jp.plの不備で、文の頭に”(B “のようなものが付くので、その対処を書いた
この対処でも良いのだが、http://www.mhonarc.jp/のページのKnown Problemsで新しいiso2022jp.plが提供されていた。本家にも報告済みのようだが、FreeBSD 8.1のportsでは、まだ直っていない。新ファイルを提供されているページからダウンロードすれば良いのだが、念の為にここにも、置いておく。

iso2022jp.pl

なお、iso2022jp.plの保存場所は、portsで入れると最近は、
/usr/local/lib/perl5/site_perl/5.10.1になっている。

(2) 長い行への対処

mhonarcでは、メールの本文の文頭と末尾を<pre>と</pre>で挟むので、たまたま1行が長い文を送って来られると、Browserの表示にはなはだ不都合である。
それで、改行コードを使い<pre>と</pre>で挟むのをやめる方法を以前に書いたが、これは、やはり必要である。

#           $$data = '<pre>' . $$data . '</pre>';
            $$data =~ s/\n/<br>\n/g;
            $$data = '<p>' . $$data . '</p>';

 なお、入っている場所は、iso2022jp.plと同じ/usr/local/lib/perl5/site_perl/5.10.1である。

(3) mhonarcの設定ファイル(rcファイル)について

mhonarcでhtml表示する内容の設定ファイルは、どこに設置してもよく、newmlistの中でパスを指定する。ここに掲げたnewmlistでは、/usr/local/lib/MHonArcに置くようになっている。
書き方の詳細はmhonarcのhome pageに詳しく書かれているが、私が使っているものをサンプルとして掲げておく。

Heptavia.rc

2010.04.17

Clamav-0.96版へのupdate (はまってしまった)

最近、FreeBSDのサーバーは、安定に稼動してしていることもあり、放置状態である。
ところが、メールのウイルスチェックに使っているClamavの版数が、古くなって稼動していないことが分かったので、0.96版にアップデートした。
(1) Portsを最新版にする

Portsのupdateは以前にも書いたが、updateが出来る準備が既に出来ていれば、

# cvsup -g -L2 /etc/ports-supfile

 で同期が始まる。
(2) Clamavの最新版のインストール
  Portsが最新版になったら、

# cd /usr/ports/security/clamav
# make WITH_MILTER=yes clean
# make deinstall
# make WITH_MILTER=yes install

(3) はまり込んだこと

これでclamavが最新版になるので、再起動すれば良い積りであった。

# cd /usr/local/etc/rc.d
# ./clamav-clamd restart
# ./clamav-freshclam restart
# ./clamav-milter restart

ところが、自分宛のメールを出して確認しても、下記がメールヘッダーに表示されない

X-Virus-Scanned: clamav-milter 0.96 at uls.fam.cx
X-Virus-Status: Clean

clamavの再インストールから、終にはsendmailの設定ファイルのsendmail.cfまで作って再起動したが、メールにX-Virus-・・・・ が入らない。

(4) やっと解決

全く分からず2日ほど手こずった。 しかし、色々調べて行くと、Clamavの0.95版?以降では、/usr/local/etcにmilterのコンフィグファイルが、clamav-milter.confとして独立しているのが判明。ここで設定したコンフィグファイルの内容を以下に示す。

MilterSocket /var/run/clamav/clmilter.sock
MilterSocketMode 660
FixStaleSocket yes
User clamav
AllowSupplementaryGroups yes
PidFile /var/run/clamav/clamav-milter.pid
TemporaryDirectory /tmp
ClamdSocket unix:/var/run/clamav/clamd.sock
AddHeader YES

修正したのは、”MilterSocketMode 660″, “TemporaryDirectory /tmp”と “AddHeader YES”だけであった。
AddHeader YESがないと、メールにX-Virus-・・・が入らないのである。
もちろん、”AddHeader YES”がなくてもメールチェックの動作に問題はないが、メールヘッダーに入らないと、メールを見ただけではclamavが利いているかどうか分からない。
また、ClamdSocket unix:/var/run/clamav/clamd.sockもsendmailの設定内容とファイル名が一致することは注意を要する。

(5) その他

今まではディレクトリーの/var/db/clamav内にサブディレクトリーがあり、データベースを構成していたが、今回の版数のclamavではDBは単なるファイルになったので、再起動の前に、古いDBは削除しておいた方が良いようだ。

# cd /var/db/clamav
# rm -fr *

そして、DBファイルを創生するため初回は次の順序で起動する。

# cd /usr/local/etc/rc.d
# ./clamav-freshclam restart
# ./clamav-clamd restart
# ./clamav-milter restart

これで、再起動して無事起動でき、メールにもX-Virus-・・・が入るようになった。

Next »