2004.12.29
メーリングリストを開設すると、MLの総合ホームページなどから加入、脱退などが出来る方が便利でかっこ良く、一般の読者にも簡便で好まれる。
このためには、登録希望者に名前とメールアドレスを入れさせて、majordomoにsubscribeメールを出すようにすれば良いので比較的簡単に作ることができる。
ところが、自前で作らなくてもMajordomoにはそのツールも同梱されているので、これを利用する。
packageで入れるとツールは無いが、portsを入れていると
/usr/ports/mail/majordomo/work/majordomo-1.94.5/md-sub/ にあるmd-sub.cgiを使う。
(1) md-sub.cgiの設定
このmd-sub.cgiを/web/cgi-binにコピーする。
また、cgi-lib.plがシステムにない場合は/usr/local/lib/perl5/site_perl/5.8.5/machにコピーしていれておく。
そして、md-sub.cgiを修正。
# cd /web/cgi-bin/
# vi md-sub.cgi
#!/usr/local/gnu/bin/perl を #!/usr/local/bin/perl に
$cgiloc = "http://hogehoge/cgi-bin/md-sub.cgi";
運用するサーバmd-sub.cgiの場所(URL)を指定します。
$listsdb = "/usr/local/mail/.md-subrc";
md-subが使用するdatabaseの位置
$logfile = "/usr/local/mail/md-sub.log";
md-subのlogの位置
#$sendmail = "|/usr/lib/sendmail -t";
$sendmail = "|/bin/cat - > /tmp/test.out";
最初は/tmp/test.outに結果を書き出させます。
(2) データーベスを作る
# mkdir /usr/local/mail
# cd /usr/local/mail
ここで .md-subrcファイルを以下を参考に作る。
musicml majordomo@greatcircle.com
info musicml http://greatcircle.com/musicml/info.html
help webmaster@greatcircle.com
default musicml
test majordomo@greatcircle.com
pcmlist majordomo@greatcircle.com
info pcmlist http://greatcircle.com/pcmlist/info.html
そして、
# /web/cgi-bin/md-sub.cgi -C /usr/local/mail/.md-subrc
とすれば、.md-subrc.dbが作られる。
あとは、Browserで http://hogehoge/cgi-bin/md-sub.cgiでアクセスすると、入力画面が現れる。 入力してボタンを押し /tmp/test.outに期待通りの出力が得られれば、
$sendmail = "|/bin/cat - > /tmp/test.out"; を
$sendmail = "|/usr/lib/sendmail -t"; に変える。
(3) 日本語化
<
blockquote>
日本語化パッチは無いので自分で訳す。
参考までに、私が作ったファイルを下に載せておく。
日本語化md-sub.cgi
日本国内でMLを開くときに、メッセージなどが日本語になっている方が便利である。
Majordomoはperlで書かれているのでmajordomoの中のメッセージ部分を自分で日本語訳しながら書き換えられるが、世の中には親切な人達がいらっしゃって、高知大学の菊地さんが作られたのを「Nobさん」が改良して日本語化パッチを公開されている。→ 遂にリンク先がなくなりました。
ダウンロード:1.94.5用パッチ → 遂にリンク先がなくなりました。
これを使って、majordomoにpatchを当てます。
$ su
# su - majordom
$ ls (majordomoのあるディレクトリーであることを確認)
$ zcat majordomo-1.94.5-jp.patch.gz | patch
これで、メッセージ文は日本語化されたが、EUCコードであるためメールすると文字が読めないので、sendmailに送り込む前にjis(ISO-2022)にする。
このために、jsendmailの名前で以下の内容のスクリプトファイルを作る。
#! /bin/sh
/usr/local/bin/nkf -j | /usr/sbin/sendmail $*
そして、chmod +x jsendmailでjsendmailに実行権限を与えて、majordomo.cfの
$sendmail_commandを以下のように書き換えます。
$sendmail_command = "/usr/sbin/sendmail"; を
$sendmail_command = "/usr/local/majordomo/jsendmail"; とします。
これで、目出度し目出度し。 応答が日本文になります。
2004.12.28
DNSサーバと言っても家庭内で1つのIPアドレスしかなく全てのサービスを1つのサーバで行うより無く、しかもどこかのプロバーダー経由の接続であるから、プロバーダーの提供しているDNSサーバを頼るだけでも事は足りる。
しかし、一応DNSサーバを立てて動作させることとしたがIPアドレスが一つでの運用であるため、専ら自宅内のローカルエリアの設定であり、外にアクセスするためのDomain Nameの解決が主目的となる。
FreeBSDも5.3になって設定ファイルの置き場のnamedbの場所が/etc/namedbより
/var/named/etc/nameddbに変わたが、/etc/namedbにリンクが貼られているので従来通り/etc/namedで作業ができる。
まず最初に./make-localhostとして設定ファイルのlocalhost.revを作る。
あれー、出来ないと思ってPROTO.localhost.revを使って自分で作ろうなどと思ってはいけない(私はやってしまった)。ちゃんとmasterというフォールダ内に出来ている。
次に正引きと逆引きの記述ファイルをつくる。
ファイルの名前は何でも良いが正引きをmyhome.zone 逆引きをmyhome.revとでもして話を進める。
さて、myhome.zoneの中身の例だが、次のように書き./slave Directoryに入れる。
--------------------------------------------
; /etc/namedb/myhome.zone
; host name --> IP address for fam.cx
;
@ IN SOA uls.fam.cx. root.fam.cx. (
1999120500 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expires
3600 ) ; TTL
;
IN NS uls.fam.cx.
IN MX 10 uls.fam.cx.
uls IN A 192.168.1.5
uls2 IN A 192.168.1.6
localhost IN A 127.0.0.1
luna IN A 192.168.1.2
soleil IN A 192.168.1.4
satoru IN A 192.168.1.10
nakamura IN A 192.168.1.11
uls.flets.cds.ne.jp IN CNAME uls.fam.cx.
----------------------------------------------
サーバのhostnameはプロバイダーから貰ったものとDynamicDNSに登録したのと2つあるのでどちらでも良いようにCNAMEにもう1つの名前を書いておいた。
逆引きのmyhome.revは次のように書き、./slave Drirctoryに入れる。
----------------------------------------------
; /etc/named/myhome.rev
; IP address --> host name for fam.cx
;
@ IN SOA uls.fam.cx. root.fam.cx. (
1999120500 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expires
3600 ) ; TTL
IN NS uls.fam.cx.
2 IN PTR luna.fam.cx.
4 IN PTR soleil.fam.cx.
5 IN PTR uls.fam.cx.
6 IN PTR uls2.fam.cx.
10 IN PTR satoru.fam.cx.
11 IN PTR nakamura.fam.cx.
---------------------------------------
最後にname.confを以下のように書く。
------------------------------------------
options {
directory "/etc/namedb";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
forwarders {
210.254.64.10;
};
};
zone "." {
type hint;
file "named.root";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "master/localhost.rev";
};
zone "fam.cx" {
type slave;
file "slave/myhome.zone";
masters {
192.168.1.5;
};
allow-transfer {192.168.1/24;
127.0.0.1;};
allow-query {192.168.1/24;
127.0.0.1;};
};
zone "1.168.192.in-addr.arpa" {
type slave;
file "slave/myhome.rev";
masters {
192.168.1.5;
};
allow-transfer {192.168.1/24;
127.0.0.1;};
allow-query {192.168.1/24;
127.0.0.1;};
};
-------------------------------------------------
ここまで、準備が出来たら/etc/rc/confにnamed_enable=”YES”を追加してサーバを
再起動すればDNSサーバが動くはずである。
nslookup www.yahoo.co.joなどとやって、IPアドレスが表示されるか試してみよう。
また、IPアドレスから名前が引けるかも同様に確認する。
2004.12.25
手動では成功するが、cronだとメールがどうしても拾えないので別手段を講じることにした。
テキストベースのブラウザのw3mの利用です。
以下はその手順
- abcblogのhome directory内に .forwardの名前でファイルを作り以下の内容とした。
¥abcblog
"| /usr/local/bin/w3m -dump http://hogehge/blog/mt/abc/mail-entry.cgi"
- 同様にxyzblogのhome ditrectoryにも作成
- そしてabcblogとxvzblogにメールを出した。
見事に成功した。
メールを受けると直ちに反映されるのもcronで10分毎に処理するよりサーバに負荷も掛からず好都合。
それに、この方法だと何人分でも簡単に作れる。
Blogに携帯電話からのメールでも投稿できるMoblogというのが流行っているそうだ。
そこで我が家のサーバにもmail-entry.cgiというのを入れてMoblogを行うことにした。
我が家のサーバではMovabletype関連ファイルを$Documentroot/blog/mtに置いている。
以下はその手順です。
(1) Blog専用にabcblogとxyzblogのアカウントを作りメールを受けられるようにする。
(2) 2人でBlogのページを設けているので、mtディレクトリー内でmkdir abcとmkdir xyzとして2つのディレクトリーを作りこの中にそれぞれmail-entry.cgi関連のファイルを入れた。
(3) そして、それぞれのmail-entry-config.cgiをBrowserから起動して環境設定を行った。
(4) メールをabcblog宛てに出し/hogehoge/blog/mt/abc/mail-entry.cgiを呼び出す。
Blogにうまく反映できた。 画像添付もちゃんと処理されて現れる。
(5) 次にmail-entry.cgiはcurrent directoryが自分自身のディレクリーでないとうまく起動しないとネットの解説記事に書かれていたので、suしてrootになりメールをabc宛てに出した後にabcディレクトリーに移りmail-entry.cgiを起動してBlogに反映されることを確認した。
ここまではうまく行ったので、いよいよcrontabに登録して自動化する。
0,10,20,30,40,50 * * * * cd /$Documentroot/blog/mt/abc ;
/$Documentroot/blog/mt/abc/mail-entry.cgi 1>/dev/null 2>/dev/null
5,15,25,35,45,55 * * * * cd /$Documentroot/blog/mt/xyz ;
/$Documentroot/blog/mt/xyz/mail-entry.cgi 1>/dev/null 2>/dev/null
あれー、メールを出してcronが動いても「メールがありません。」といわれる。
何度やっても同じだ。
調べたら、どうもmail-entry.cgiがメールを拾えていないようだ。
悪戦苦闘したが、手動なら動くがcronで動かない理由が分からない。