Linux日記3


L−Cardで作った、メール転送サーバー、早く箱に入れねば(笑)


2002.10.4

USBのPCカードアダプタがLinuxでも使えるようになったらしく、久々にLinuxをインストールすることにした。ターゲットは、L-CARDのメールサーバー化(1年越しだが、まだできていない)と、Palm向けプログラム開発です。ディストリビューションには、慣れたTurboLinuxを選択するつもりだったけど、バージョン8にはFTP版は無く、テスト用のプロモーション版しかありません。小細工すればFTP版もどきにもなるらしいけど面倒なのでパス(^^;) RedHatは、何故かFTPサーバーに繋がらないので断念、そこで、LinuxMagazineに付録(4月号)で付いていたLASER5 7.2を入れてみることにしました。L-CARDとも相性良さそうだし、未だに現行版だし(^^;)、結局RedHat系なので同じだし・・・ インストールしてみると、PS2マウスを認識しない、104キーボードは嫌いみたい、などの問題点が有るようですが、なんとか入りました。

2002.10.5

毎度の事ながら、Linuxの使いこなしには苦労する(^^;) ディストリビューションで細かい部分の環境が違うせいもあるかもしれない。今度の、LASER5 7.2は、TurboLinux6と比べて、随分良いようです。ごちゃごちゃと色々入っていて、何が入っているか分からないのだけど、USB−CFアダプタも自動的に認識して、あとはマウントするだけで使えてしまうし、なんと、USBカメラまで勝手に認識して、おまけに、xawtvというビュアー(本来はTV+キャプチャ向け)で表示できてしまいます。ちなみに、xawtvはメニューに出てこなくて、rpmをインストールしようとしたら、既にインストール済みだった事に気づいた始末(^^;) どっちにしても、やりたいことが、デフォルトで結構できてしまって気分が良いです(笑)

2002.10.26

しばらくさぼっていたが、また、Linuxで遊んでみた。今回は、デスクトップ上で、fetchmail + procmail + sendmail でのメール転送システムの実験。LASER5には、これら全部がインストール済みなので、定義ファイルを作るだけ、sendmailに至っては、デフォルトのsendmail.cfを使っています。どんな設定になっているのかも分かりません(笑)
とりあえず覚え書きで、fetchmailrcとprocmailrcの内容を残しておきます。

.fetchmailrcの内容
poll プロバイダのpopサーバーアドレス
protocol pop3
user 'ユーザーID'
password 'パスワード'
no mimedecode
keep
mda "/usr/bin/procmail"

.procmailrcの内容
PATH=/usr/bin:/usr/sbin:/usr/ucb:/usr/local/bin:/pub/bin:.
MAILDIR=$HOME/mm
DEFAULT=$HOME/mm
LOGFILE=$MAILDIR/.procmail.log
:0:
* ^From.*転送したいメールアドレス
! /usr/sbin/sendmail 転送先のメールアドレス

注意点
※ ./mm というディレクトリ名は何でもいいです。でも、自分でmkdirしておいてください。
※PATHもsendmailをフルパスで読んで居るので無意味です。
※これらのファイルは、chmod 600 .fetchmailrc .procmailrc で属性変更しておく必要有り。
※sendmailは、送信だけだと、デフォルトのsendmail.cfで常駐させる必要もありません。
※起動はfetchmailを.fetchmailrcのあるディレクトリでします。fetchmail -vv とやると、プロバイダとのやりとりも全部見えます。
※procmailは、./mmの中に.procmail.logというファイルができるので、デバッグに活用できます。

さて、これをL−CARDに移植したいのだけど、fetchmail以外のクロスコンパイルには成功していない。だいたい、sendmailなんて入るのだろうか? そうそう、sendmailで送信すると、直接メールアドレスのサーバーに対してsmtpするんですね。ちなみに、自分のマシンの名前デフォルトになるので、root localhost なんてのがヘッダの中に入ります。笑ってしまうが、どうせ自分用の転送にしか使わないので、これで十分・・・ ちなみに、転送に使うと、見える部分のヘッダには転送されるメールの物が入ります。(当然か・・・)

2002.10.31

今日は、fetchmailをL-CARDに入れて動かしてみた。つまらない処で悩んでしまったが、なんとか動かすことが出来た。ただ、L-CARDはDNSができない。とりあえず、.fetchmailrcにIPアドレスを書いてしのぐ。あと、L-CARDはDHCPにも対応していないはずなので、ルーターからIPアドレスを貰えないはずだが、実は勝手に貰っていたりする、ちょっと謎・・・ /sbin/etherupを書き換えて好きなIPにすることができる。gatewayの設定もここ。

覚え書き、DNSを有効にする手段
/etc/nsswitch.conf の中に
hosts: files という記述があるので、これを、
hosts: files dns と書き直す。そして、
/etc/resolv.conf というファイルを作り、以下のような内容を書き込む。
nameserver 202.224.32.1
nameserver 202.224.32.2
search localdomain
最後の行は、どうでもいいか・・・ 単にデスクトップのコピーです。
ちなみに、これはasahi-netのDNSサーバーなんで、他のプロバイダを使っている人は、自分のDNSサーバーのアドレスを書いてください。

2002.11.1

procmailをコンパイルしようと励んでみた。しかし、なぜか上手く行かない。どこを、どういじればよいのか??? CC=mipsel-linux-gcc、LIBS指定しても、x86のコードができてしまう感じ。あげくに、何故だかLILOが飛んでしまいlinuxが起動しなくなった(^^;) 仕方がないのでFDから起動している。でも、この方がキーボードで切り替えなくて良いので便利かも(笑)

今度は、コンパイル済みのrpmを入れてみようと思いつく。だが、L-Cardにrpmが入らない。適当なmips用のrpmを入れてみるが、どうも動かない。それに、rpmでインストールしようとすると、CFの容量を喰うので嫌い。確か、これは、去年もやって失敗した記憶がある(笑)

んで、今度は、デスクトップでrpmを解凍し、必要なバイナリだけL-Cardに転送してみることにした。rpmをcpioに変換し、その中から必要な物を抜けばよいらしい。「rpm2cpio rpmファイル.rpm | cpio -i ファイル名」 でOKらしい。ただし、ディレクトリ構造ごと解凍されるのと、現在のカレントを元に相対パスで解凍される。オプションナシではディレクトリを自分で作らないので、ディレクトリの無いファイルは解凍できない。これを利用し、mkdir usr/bin とバイナリファイルの入るディレクトリだけを作っておき「・・・・・ cpio -i」で全部解凍させ、バイナリだけ取り出せた。さあ、いよいよL-Cardにインストールしてみるが、結局動かない。なんでも、ライブラリが無いそうだ。うーん、カーネルのバージョンが違うのか、結局振り出しにもどる。でも、rpmから必要なファイルだけ取りだして使うのは良い方法かもしれない。

さらに続く、procmailをバージョン 3.14〜3.22まで色々と入れてみた。うまくいったのは、ここの「http://www.peanuts.gr.jp/~kei/Linux-MC/Incoming/Vine-2.1/RPMS/mipsel/」、バージョン3.14だった。やっぱり、カーネルの違いの問題で、古いバージョンでないと動かないらしい。逆に言えば、ここのプログラムは、みんな動く可能性があるということなのかな? sendmailも期待できそう。

sendmailも、この方法で入れてみようとした。しかし、sendmailは、自身以外の色々な環境ファイルが必要で、単体でも動かない。やっぱ、rpmを入れないと駄目そう・・・rpmも単体では動かないんだよね。ああ、めんどくさそう。128MのCF買って、バシバシrpmでインストールできたら、どんなりラクチンかなあ。

2002.11.2

良いことを思いついた! rpmをインストールしなくても、デスクトップにCFをマウントして書き込むなら、マウントしたディレクトリをカレントとして、「rpm2cpio rpmファイル.rpm | cpio -id」とすることで、rpmのファイルが全部書き込まれます。rpmが無くても簡単にインストールできます。これで、sendmailをインストールしてみました。バッチリのようです。

というわけで、1年越しの携帯へのメール転送システムが完成しました! fetchmail+procmail+sendmail でのデリバリ・システムです。お出かけの時だけL-Cardに電源を入れれば、メール転送システムが動きだし、仕事関連と、親しい知人のメールのみ転送する予定です。できれば、寝ている時間帯の転送は止めたいのですが、cronは入っていないし、fetchmailのデーモン機能は定間隔でしか動かないのでできません。

また、sendmail.cfの設定が悪いのか、転送されたメールの送信者のドメインが表示されません。デスクトップに入っているsendmailだと上手く行くのだけど、このsendmailとはバージョンが違うので使えません。といって、sendmail.cfを書き換える根性もないし・・・ それに、/var/spool/mqueueに転送したメールが溜まります。これもよくないです。

fetchmailの自動起動は、/etc/init.d/rcのスクリプトを以下のように書き換える。ちなみに、fetchmailと.fetchmailrcはテストのため/rootに入っている(^^;)
・・・前略・・・
case "$1" in
 *0)
   message="The system is halted."
   command="halt -p"
   ;;
 *6)
   message="Rebooting."
   command="reboot"
   ;;
 *)
   /usr/sbin/ntpdate ntp.asahi-net.or.jp ←これは、asahi-netのNTPサーバー
   /root/fetchmail -f /root/.fetchmailrc -d 1800 ←この部分 30分毎にメールチェック
   exit 0
   ;;
esac
・・・後略・・・

DOCOMOの携帯メールは、直接smtpで送れないらしい。プロバイダ経由で送れば大丈夫なので、RELAY指定しなくてはならない。まず、以下のファイルを作る。
/etc/mail/mailertavle
docomo.ne.jp smtp:mail.asahi-net.or.jp
.docomo.ne.jp smtp:mail.asahi-net.or.jp
次にデータベースに変換する。
makemap hash mailertable.db < mailertable
これで、プロバイダ(asahi-net)を中継してメールが送られる。ただし、このドメインはasahi-netのAPを使った場合に限られる。
そういや、access のデータベースも必要らしいが、詳細は不明。

2002.11.3

NTPクライアントを入れてみる。もう、コンパイルするのは止めてrpmから入れる(^^;) 使ったファイルは・・・
http://www.peanuts.gr.jp/~kei/Linux-MC/Incoming/Vine-2.1.5/RPMS/mipsel/xntp3-5.93-13vl2.mipsel.rpm
これにした。例によって、デスクトップで解凍して、ntpdateだけ取り出す。/usr/sbinに入れればOK、起動時に自動的に時間校正してくれるように、/etc/init.d/rcの中(上記11/2参照)に入れておく。これだけで、起動時に勝手にL-CARDの時間を合わせてくれる。ただ、timezoneがGMTになっている模様、/etc/localtimeを作らねばならない。これは、デスクトップから持ってきてコピーするだけでOK。数バイトの文字が入ったファイルなんだけど、バイナリコードが混じっているので作り難い。
L-Card+16Mの場合

昨日はテストのため、1日中、転送サーバーを動かして置いたのだけど、転送されるようなメールは一通も来なかった(^^;) 条件が厳しすぎるのかなあ・・・ テスト終了後はポーリング時間を60分に設定する予定。

入れる箱について色々考える。当初、電源もケース内に納めようと計画していた。その理由は、電源ON/OFFで転送のON/OFFを切り替えるつもりだったのだけど、よくよく考えてみると、スイッチを入れ忘れたら、もう転送不可能になってしまう(当然だ)。忘れたら、それでオシマイになってしまう。ということで、リモートメールで転送ON/OFFを切り替えた方がよさそう。となると、L-Cardは動かしっぱなしの方が良い。そして、リモート可能、スイッチ操作も可能な方法で、なおかつ深夜の転送をやらないタイマ付きコントロールソフトを作ったほうが良さそう。となると、ACアダプタで、電源いれっぱなしでも全く問題は無い。ON/OFF制御のスイッチや、他の機械のリモート用リレーを入れる箱があれば良いわけで、本体は今の箱でも十分だったりする。とりあえず、コントロール用のプログラムでも書くかな・・・

2002.11.4

NTPは1日1度、fetchmailは9〜24時まで1時間に1度動かすプログラムを作り始めた。最初はスクリプトだけでできそうだったので、色々やってみたが、どうもスクリプトで使える機能が分からない。L-Cardはshとtshを積んでいるのだけど、どっちも、汎用向けの文法とは微妙に違う感じ・・・ どうも方言が多すぎるので諦めてしまった。昔は、unixプログラミング=スクリプトみたいな言われかたをしていた時代が有ったように思うが、今は、javaやPerilの方へ行ってしまったということなのかな?

プログラムの方は、Cで書いたので、数時間で動くようなプログラムができてしまった。そういや、Cを使うのも1年ぶりかも? unixの作法は相変わらず分からない(^^;) まあ、適当に書けば、とりあえず動くのはCの良いところだろう(笑) まだ、ntpとfetchmailを時間起動させられるだけなので、手動スイッチや、メールでON/OFFさせる機能を作らねばならない。

2002.11.5

メールで4つのLEDを、別々にON/OFFする機能を製作。リターンメールでLEDの現状も知ることができる。このLEDのうち、1つを、メール転送のON/OFF用に割り当てることで、転送機能をON/OFFすることができるようになった(つもり)。あとは、メカニカル・スイッチを付けて、それでもコントロールできるようにすればベストだけど、それをやるには、L-Cardから配線を引き出さなくてはならない。それやるなら、ケースにも入れたいし・・・ となって、ちと面倒(^^;) 箱に入ったら考えよう(笑)

残った3ののLEDにリレーを付ければ、外部装置のコントロールにも使える。でも、思いつくのはデジピータくらいかなあ? これも、よほどの事が無い限りOFFにすることも無いのだけど・・・ ビデオリモコンにするのも可能だけど(去年作ったし)、実はほとんどTVを見ないので必要ない(^^;) それより、来客関知とか、ドアの開閉とか、車のセキュリティーとかの方が実用性があるのだけど、これらは、逆に、みんな入力ポートを使うし、センサが面倒だし・・・ とりあえずは、目的の最低限の機能はできました!

2002.11.6

転送OFF時も、転送ON/OFFメールを確認するために、メールサーバーにポーリングに行かねばならない。というわけで、OFF時も30分に1度、専用.procmaialrcを用意して、こっちに切り替えて動作させることにした。windowsマシンはメールのポーリングを10分に1度やってるので、これとのコンフリクトが少し心配・・・ あとは、的確に動作している感じ。メカスイッチによるON/OFF切り替えはできていない。まだ、箱に入れてないので、作業が進まない(^^;)

転送状況を見るために、.procmail.logを見るのだけど、メールの日本語タイトルが=ISO-2022-JPとかになってしまい理解不能。そこで、nkfを入れてみることに・・・ 例によってバイナリだけ抽出し、/usr/binに入れ、パイプを通してnkfで表示させてみたところ、バッチリ日本語タイトルも表示できるようになりました。メーラーによっては、半角英文字でも、このコードを使うものが有るようです。迷惑な奴だなあ・・・ (このページもそうかもしれない(笑))

2002.11.8

転送OFF時にメールが来たら、LEDを点滅させる機能を付けてみた。.procmailrcが2種類必要で、内容もかなり変わってしまうので、フィルタリングを手直しするたびに変更箇所が増えてしまう。ちょっとやっかいだなあ・・・ あと、何故だかロックファイルが作れないというエラーがでるようになってしまった。転送ON用のファイルはそんなに変更していないのだけどヘンだ。面倒なので、ロックファイルは作らないことにした。なにしろ、ファイルは作らず、全部転送して外にだしてしまうわけだから、ロックファイルは要らない。

早く箱に入れて、手動ON/OFFスイッチを付ければ良いのに、そのままで使っている(^^;) ケース加工って、面倒臭くって(笑) だから、切り替えは、telnetで接続して操作している。それより、ナビトラ機能を付けようなどと考えてしまう・・・

2002.11.10

1枚のCDROMだけで、HDDを一切使わず起動からオペレートまで全部できるという Linux KNOPPIX 3.1日本語版 をさわってみた。前からフロッピーディスク1枚で動くルーターが有るくらいだから、CDROMでも出来そうなのは予想が付くが・・・ しかし、結構スゴイ!アプリが一杯入ってる!これみんなHDD無しで動くのだろうか? OpenOfficeでEXECLやWORDもどきもあるようだ。日本語化も結構進んでいるし、Laser5の7.2より遙かにスゴイ。
で、少し触ってみたが、デフォルトではサウンドが使えない、何処を触れば音が出るのか不明(^^;) DOSのHDDもマウントするのだが、書き込みは禁止されているらしい。あと、読めないパーティションが多くあったが何故だろうか?見えてたMPEGを表示できないかやってみたが駄目だった。当然なのか、PcPCI(キャプチャーカード)も認識されない。WINもインストールされているので、WINアプリを動かそうとしたが動かなかった。デスクトップなどの状態変更をFDに残せるようだが、今回はFDを使わなかった。あと、アプリの起動が遅い!やっぱCDROMは遅いようだ。これでも一応、40倍速なのだが・・・
システムがCDROMに入っていると、絶対にクラッシュしないわけだから、結構安定して良さそうにも思う。ただ、不要なアプリとかがデスクトップに一杯張り付いているのは、どうもうっとしい(^^;) 自分用にカスタマイズして、CDRに焼き直して使えるとベストかもしれないなあ・・・ ただ、ユーザーデータ用にHDDは欲しい。でも、HDD使うとクラッシュする(笑) あと、CDROMは遅い(^^;) ところで、KNOPPIXって売り物版もあるんだろうか???

2003.4.30 kanetaさんからご教授頂いた情報
L-Card+では問題ないのだけど、L-Card+16Mでは、デフォルトで lib のダイナミックリンクがされず
ntpdate が動かないらしい、以下のようにダイナミックリンクを有効にすると動くらしいので参考にしてください。

L-card+ 2M はダイナミックリンクに対応しているが、L-card+ 16M
は、default では対応していない。必要なライブラリーを

lc02_v02/useland/boot_laser5_20010302.tar.gz (付属 CDROM)

からコピーして使用する。これらを /lib にコピーすればよいが
L-card+ 16M では普通、ルートファイルシステムにその余裕が
ない。幸いなことに、私は CF を /mnt/cf にmount していました
から、120M そっくり余っていました。ここに /lib を作り、CDROMの
必要と思われる lib 類(何が必要で、何が必要でないかよく解かって
いないのですが。一応全部で 8.4M前後)をコピーしました。
本来の /lib を /lib_backup に変更し ln -s /mnt/cf/lib lib で
シンボリックリンクをはりました。 よく解からないので、/etc/lib
も /mnt/cf/lib にシンボリックリンクをはりましたが、ntpdate は
こっちのほうは関係ありませんでした。

L-Card+を使った、携帯メール向けメール転送サーバーの製作

プロバイダに来たメールで大事な物だけを選別して携帯に転送する


Laser5のワンボードLinuxマシン、L-Card+ 詳細はこちら

ドコモのメールヘッダチェックが厳しくなったので挫折中(笑)

2002.11.10

何故、メール転送サーバーなのか?

私の場合、メールはデスクトップにインストールされたメーラーで処理しています。ほとんどの人は同じ様な使い方をしているでしょう。移動先からメール確認するには、プロバイダの転送機能で転送するか、Webメールで確認するかが普通ですが、某プロバイダの転送機能は有料?で貧弱なので、ちょっと使う気にはなりません。それに、自宅に居るときは転送してほしくありませんし、転送しても、デスクトップのメーラーに残して置かないと、後々不便です。Webメールなら、プロバイダのメールボックスからメールを消さずに読めますが、わざわざメールが来ているか確認にゆくのは面倒ですし通信コストも掛かります。

そこで、簡単に転送のON/OFFが切り替えられ、転送したいメールを細かく選別しできるメール転送サーバーを作ってみました。転送サーバーは自宅に置き、30分の1度の間隔で自動的にメールを読みに行きます。転送ON時には、気に入ったメールだけ携帯電話に自動転送するしくみで、自宅サーバーなので、ON/OFFは簡単です。

サーバー製作はLinuxが簡単

この種のネットワークサーバーは、Linuxを使うと出来合のプログラムを組み合わすだけで簡単に構築できます。最近のLinuxのディストリビューションは、色々なアプリケーションがインストールされていて、さながら、メーカーのプレインストールモデルの様です。見た目のアプリケーションだけでなく、ネットワークサーバー系ソフトもインストール済みで、ほとんど何もしなくてもメール転送サーバーが作れる程です。ただ、なんでも出来る分、高性能なパソコンが必要になってきます。パソコンを、たまにしか使わないサーバー専用にするのはもったいないです。できれば、場所と電気を喰わないマシンでやりたいものです。そこで、去年入手した、ワンボートLinuxマシンであるL-Cardにインストールすることにしました。

メール転送サーバーに必要なプログラム

メール転送に必要なプログラムをリストアップしておきましょう。まず、プロバイダからPOP3でメールを取ってくる fetchmail 。取ってきたメールを選別する procmail 。選別されたメールをSMTPで再発信する sendmail です。

fetchmailは苦労して再コンパイルして作りました。必要なファイルは、実行ファイルである fetchmail だけです。コンパイル方法に関してはLinux日記3をご覧ください。下記のようにrpmからfetchmailだけを取り出せば、もっと簡単にインストールできます。

procmail はrpmから取りました。転送に最低必要なプログラムは、実行ファイルである procmail だけですが、他にもメール処理の用プログラムが幾つか用意されていますが、使いこなしは、それなりに難しいです。自分は使っていません(^^;)

sendmailは、色々と環境設定が必要です。プログラムだけ取り出してインストールするには、それなりの知識が必要です。これは、面倒なので、rpmを使わずフルインストールする方法でインストールしました。

L-Card+にインストールするためには?

L-Card+はx86系(IA32)のCPUではなく、VR4181というmips系のCPUを使っています。世にあるPC向けのディストリビューションはx86系なので、そのままでは使えません。mips用に再コンパイルするか、コンパイル済みのバイナリーを使うかどちらかです。コンパイルもPC上でのクロスコンパイルとなり色々と面倒です。コンパイル済みのバイナリも、カーネルのバージョンや、ディレクトリなどの環境ですんなり動かない場合が多く面倒です。しかし、L-Cardで使えるバイナリさえ見つけてしまえば、いとも簡単に使えるようになります。

ここ「http://www.peanuts.gr.jp/~kei/Linux-MC/Incoming/Vine-2.1/RPMS/mipsel/」のバイナリは、L-Card+と相性が良いようで動きました。Vine向けのバイナリの様ですが、バージョン2.5用は使えないようです。2.0〜2.1の物ならOKなようです。

バイナリのインストールには、rpm を使ったインストールが一般化されています。rpm という汎用インストーラプログラムを使うため、まず最初に、rpm自体をインストールしなくてはなりません。また、rpmはドキュメントなどの実行に関係ないファイルもインストールするので、HDD(L-CARDの場合はCF)の容量が沢山あれば問題ないのですが、容量が少ない場合は問題です。そこで、デスクトップ上で、rpmから必要なファイルだけ取りだし、それをL-CARDに転送する方法でインストールを行いました。

mips用のrpmを、PC用のrpmで解凍してしまうと、デスクトップにmipsのプログラムをインストールすることになります。それでは、システムを壊しかねないので(もっともエラーが出て実行出来ませんが)、cpio というrpmに似たインストール用ツールを使って、任意のディレクトリに解凍することで解決します。実行は以下のように行います。

rpm2cpio ファイル名.rpm | cpio -id

これで、カレントディレクトリを先頭に、rpmファイルの指定通りのディレクトリ構造を再現しつつ解凍します。たとえば、/homeで解凍したばあい、本来/sbinに入る実行ファイルは、/home/sbinに入ることになります。システムファイルに上書きしてしまうこともなく、ファイルコピー後は、まとめて消してしまえるので便利です。なを、cpio のオプションを「-i」だけにすると、ディレクトリを自分で作りません。/home/bin /home/sbin home/usr/bin /home/sbin なんかを作って置いて、このオプションで解凍すれば、不要なファイルを作らずに済み便利です。

fetchmail の設定

インストール:fetchmailはコンパイルして作ってしまったので、rpmに付いては触れませんが、rpmで作った方が良いでしょう。必要なファイルは実行ファイルの「fetchmail」と設定ファイルの「.fetchmailrc」です。
fetchmail .fetchmailrc .fetchmailrc.idolは/rootに入れておきます。

.fetchmailrcの設定:プロバイダのPOPメールサーバー、アカウント、パスワードを設定します。

.fetchmailrc の内容
poll POPサーバー名
protocol pop3
user 'アカウント'
password 'パスワード'
no mimedecode
keep
mda /root/procmai ← procmail がテストのため/rootにあるので、そう指定してあります。

fetchmail -f .fetchmailrc.idol などと、設定ファイル名を指定すると、そのファイルを元に動作します。procmailrcを切り替えるために、全く同じ内容ですが、.fetchmailrc.idolを作りました。

.fetchmailrc.idol の内容
poll POPサーバー名
protocol pop3
user 'アカウント'
password 'パスワード'
no mimedecode
keep
mda "/root/procmail /root/.procmailrc.idol" ← procmail がテストのため/rootにあるので、そう指定してあります。

procmail の設定

インストール:rpmファイルから、procmailだけ、cpioを使い抜き出しました。必要なファイルは「procmail」と「.procmailrc」です。
procmailと.procmailrc .procmailrc.idolは/rootに、あと、/root/mailをいうディレクトリを作って置いてください。

.procmailrcの設定:転送ルールをどうするかで内容は全く異なります。詳細については、他の解説サイト(検索すれば沢山あります)に譲るとして、転送ON/OFF切り替えに関する部分を中心に載せておきます。

.procmailrcの内容
MAILDIR=/root/mail
DEFAULT=/root/mail
LOGFILE=$MAILDIR/.procmail.log
SENDMAIL=/usr/sbin/sendmail
SEND=転送したいメールアドレス

:0
* ^To.*MLなどの転送しないアドレス
/dev/null

:0
* ^From.*転送したい相手のアドレス
! $SEND

# for CONTROL
:0 H
* ^From.*転送したいメールアドレス ←制御する側のメールアドレス
{
:0 B
* ^SWOFF ←制御コマンドの例(OFF)
| led 4 0 | led 0 0 | gled | $SENDMAIL -F LCARD $SEND ←led gled はLED操作用の自作のコマンド

:0 B
* ^SWON ←制御コマンドの例(ON)
| led 4 0 | led 0 1 | gled | $SENDMAIL -F LCARD $SEND ←led gled はLED操作用の自作のコマンド
}

:0
/dev/null

以下は、転送OFF用の設定ファイルです。

.procmailrc.idolの内容
MAILDIR=/root/mail
DEFAULT=/root/mail
LOGFILE=$MAILDIR/.procmail.log
SENDMAIL=/usr/sbin/sendmail
SEND=転送したいメールアドレス

:0
* ^To.*MLなどの転送しないアドレス
/dev/null

:0
* ^From.*転送したい相手のアドレス
| led 4 2 ←ledを点滅させるコマンド

# for CONTROL
:0 H
* ^From.*転送したいメールアドレス ←制御する側のメールアドレス
{
:0 B
* ^SWOFF ←制御コマンドの例(OFF)
| led 0 0 | gled | $SENDMAIL $SEND ←led gled はLED操作用の自作のコマンド

:0 B
* ^SWON ←制御コマンドの例(ON)
| led 0 1 | gled | $SENDMAIL $SEND ←led gled はLED操作用の自作のコマンド
}

:0
/dev/null

sendmail の設定

インストール:これもrpmから作りますが、sendmailには色々な設定ファイルが必要です。何が必要だか分からなかったので、これは全部インストールしてしまいました。インストールは、CFをデスクトップにマウントし、そこで、cpioを実行します。CFが/mnt/cfに有るなら、以下のようになります。

cd /mnt/cf
rpm2cpio ファイル名.rpm | cpio -id

環境ファイルの設定:実は、未だによく分かっていません。なんとなく動いているが、やっぱり不完全といった感じです(^^;) とりあえず、やったことだけ書いておきます。日記も参照ください。

以下、工事中

...う、まだ、ここ工事中になってる。実は、あれからL-CARD触ってません(^^;) 箱にも入れず、下の写真の様な状態で机の上に転がっています。sendmailの設定ってどうやったっけなあ、忘れてしまったぞ(笑) 結構使える転送サーバーになっています。でも、何時更新できるか、全く持って未定です・・・ 2002.12.19

docomo.ne.jpのチェックが厳しくなって、いい加減なヘッダでは送れなくなったので、fromドメイン名の強制書き換えに再トライしてみました。上手くいったので覚え書きを残しておきます。(2003.3.24)

access
calhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
access → access.db
makemap hash /etc/mail/access < /etc/mail/access

mailertable
docomo.ne.jp smtp:mail.asahi-net.or.jp
mailertable → mailertable.db
makemap hash /etc/mail/mailertable < /etc/mail/mailertable

../aliases → aliases.db
ln -s ../aliases aliases
sendmail -v -bi

sendmail.cf fromドメイン名強制書き換え(@MTS.LCARD)
# local domain name (defined automatically)
DmLCARD
# local host name without domain (defined automatically)
DwMTS

ドコモへのメール送信

メール転送サーバー製作にあたって、目下苦慮しているのが、ドコモへのメールの送信です。
このところ、迷惑メール排除のため、かなりメールのチェックが厳しくなっているようです。
おまけに、サーバーが沢山あるのか、処理が毎回異なり、転送できたりできなかったり。
接続できなかったり、できても途中で止まったり(笑) なんか、ドコモのサーバー相手に
するのは嫌になってくる・・・

とりあえず、気づいたことだけ書いておきます。

Return-Path:と、From:は同じアドレスであること。
From:が変なアドレス(localhostなど)ではだめ。

リモート操作できるデスクトップを仕立てたので、IE付属のメーラーでメール転送をやらせてみた。同じことをするのに数分あれば設定できてしまう。うーん、LCARDだと酷く苦労すると言うのに・・・ といって、デスクトップを24時間動かすのは嫌だし、1時間毎に起動/停止させるのも嫌だし、ファンレス省エネパソコンを新調するのが一番かな? もっとも、Windowsが安定して動くかどうかは、かなり疑問だし、転送条件の切り替えもできないし・・・

自動起動させるために

一連のプログラムを動かすには「fetchmail」を起動します。ます、プロバイダのメールサーバーにPOP3で接続しメールを読み出します。procmailとsendmailは必要に応じて、プログラムの中から呼ばれます。でも、実行が終了すればオシマイです。以下は、fetchmailを定期的に動作させるオプションです。これで、1800秒(30分)毎に、自動的にメールを読みに行きます。24時間フル転送するなら、これで十分です。

fetchmail -d 1800

転送ON/OFF機能と、指定時間休止機能のためのプログラム

私の目標は、深夜の転送はしないこと、自宅に居る時は転送しないこと、が条件です。時間帯を区分けして転送するには、cronというプログラムなどをスケジュールに従い自動実行してくれるソフトがありますが、L-Cardにはインストールされていません。また、ON/OFFさせるには、また別のプログラムが必要になります。これらの制御を行うのに、スクリプトを使っても良かったのですが、L-Cardのスクリプトが、どうなっているか分からなかったので、自動起動プログラムをCで作ってしまいました。

深夜1時〜早朝8時まではメールを読みに行きません。また、毎朝8時にタイムサーバーに時間校正にゆきます。転送は9時から30分間隔で行いますが、転送ONになっていないと転送はされません。転送のON/OFFは、L-Card実装のLEDを使います。正確にはLEDを点灯させているパラレルポートの内容でON/OFFします。これだと、外から見ても、LEDの状態でON/OFFが分かり便利です。このため、LEDをON/OFFするプログラムも用意しました。ON/OFF可能なLEDは全部で4個あるので、残りの3個を別の機器の制御に使うことも可能です。例えば、エアコンやら、自分用のファイルサーバーなんかの制御に良いかもしれません。

机の片隅の置いてあるL−Card、これ1つで、プロバイダのPOPサーバーからメールを取得し、条件に合ったメールだけを携帯へ転送する機能を持っている。外出するときだけ、電源を入れて動作させメール転送させる。帰ってきたら、いきなり電源を切ってしまっても、とりあえずは大丈夫。ちなみに、この転送サーバーを動かしていても、プロバイダ内のメールボックスのメールは消えないので、パソコンからメールを読みに行っても、転送されたメールが消えることはない。

今後の課題は、ケースに入れること(^^;) 今はACアダプタなので、電源のON/OFFがめんどくさい。あとは、メールを使ったコントロールシステムの構築、たとえば、24時間稼働のデジピータの電源をON/OFFするとか、自宅のメインパソコンの電源を入れ、外からファイルサーバーとして使うとか・・・
逆に、ナビトラで特定局の位置を携帯メールで調べられるとか、車のセキュリティ用に使うとか、デジピータの発振周波数を調べるとか、自宅の鍵の状態を調べるとか、PPP接続している現在のIPアドレスを知らせるとか、色々できそう。