«前の日記(2007-02-12) 最新 次の日記(2007-03-17)» 編集

おこたの国


2007-03-10

_ [COMP] iTunes 7.1 壊れてんぞ

Vista 対応が不完全で接続した iPod を壊すとか、あれこれ言われてる iTunes 7.1。ネット上で見かけなかった不具合がひとつ。daapd 経由での音楽の再生がむちゃくちゃになってます。ちょっと複雑な波形の処理が追っ付かなくて音が壊れてしまう。

うちは、書庫兼マシン室に Mac mini を置き、Firewire 接続の miniStack 上に iTunes ライブラリを構築してる。書庫兼マシン室にいるときは直に聴いていて、この普通の使い方ではもちろん何の問題も無い。リビングで聴くためには ThinkPad X31 上に Win版 iTunes を入れ、共有機能を使って、AVアンプに USB 経由で接続して再生、ってな環境を構築してる。それが、火曜のアップデート以降まともに再生できなくなってしまったのだ。かなり悲しい。この不具合に今日まで気づかなかったのもなんか悲しい。

しかしまぁ、こんな使い方してるのって少数なんだろうな。X31 使わず AirExpress を AVアンプにつなぐって手もあるわけだが、それだと、iTunes の操作をするのに、わざわざ書庫兼マシン室まで足を運ばんといかん。VNC でアクセスつうー手もあるんだけど、それもなぁ…

_ [COMP] メールボックスの移行

今年の始めから着実に進めていた(根性がなくて遅々として進まなかったとも言う)マシンの更新も完了した。中でも一番苦心したのがメール環境だったりする。これまでメールボックスを含めた自環境のあった poe は廃止することに決めてたので、メール環境をマシンを跨いで移行させないといけなかった。

つうことで作業メモ。

次々届くメールを読みこぼすと実生活にいろいろ支障が出るので、メールボックスの移動はとても面倒だっつーのに、今回は imapd の移行まで一緒にやった。Mac からでも、Windows マシンからも、もちろんメールボックスのあるマシン上の Gnus on emacs からも読み書きできるようにするってのは、なんつうか、こう、悲願だったわけで、今回のマシン更新上の作業の目玉でもあったのだ。しかし、この作業は無茶苦茶面倒だった。さらには、メールボックスのあるマシンの MTA を qmail から sendmail に移行できんかとジタバタまでした。これに関しては今回は断念したんだけど、それ以外の作業量を考えると賢明な判断だったと今は思う。spam 対策でいずれ qmail は止めようと思ってんだけどね。

さて。これまでも imapd 動かして、Mac と Windows からはそれを使ってた。ただし、Gnus は imapd を使わず、直にメールボックスを読ませていたので、imapd 用と Gnus 用で、メールボックスを分けるなんてことをしてた。~/Maildir/ は Gnus 用、~/Maildir.imapd/ は imapd 用って感じで。しかも ~/Maildir.imapd/ 下には、新しいメールしか入ってない。つーことはなんだ、Spotlight で過去メールが検索できないんだよ。これはとっても悲しい。もう、検索できないデータなんて持ってても仕方ないじゃないか。Spotlight でメールも検索。これもまた悲願のひとつだった。

さらに、imapd 使う上でのフォルダ分けは Mail.app に依存してた。Windows Mail は imapd 経由の場合にルールに従ってフォルダ分けすることができないからだ。いや、できたとしても話が面倒になるので、やらせなかったろうけど。ともかくも、Mail.app が分けてくれないと主メールボックスに皆溜ったままになる。帰ってきてこたつに入り ThinkPad X31 でメールを読もうとすると、あらゆるものが主メールボックスにゴチャっと混ざり込んでるわけだ。これが耐えられなかった。つか、クライアント側でフォルダ分けしちゃいかんだろう。やっぱサーバー側でやらないと。

つうことで方針を考えた。

  • とりあえず今回は qmail のまま。根性なし。
  • 過去のメールも含めてメールボックスを統一する。
  • メールボックスへのアクセスは imapd 経由で。Gnus ももちろん imapd で。
  • フォルダ分けはサーバー側で行なう。
  • gamba -> kamui は QMTP で

こんなところか。

今回は qmail のまま

ついに今回の移行で qmail は自前ではなく、ports を使った。つか、qmail だけでなく、これまで自前で make してたものはすべて ports に移行した。もう、あらゆるこだわりは捨てました。おかげで、mfcheck patch を取りこぼしてしまい、移行後 spam をかなり多量に喰ってしまいました。

poe にもひとつ Maildir を作り、そこにもメールを落しておく。その後、ホームディレクトリを新 kamui に rsync する。移行には時間がかかる。移行中に届いたメールは手を触れずにそこに溜めておくのだ。で、作業が完了したら、蓄えた分を再度移してやることにする。

メールボックスの統一

とにもかくにも、抱えてるメールをすべて拾いあげないと。Gnus 上で作り上げたメールデータのツリーからメールを吸い出し、imapd 用の Maildir 下にコピーするスクリプトを用意した。コピーされたファイル名には、epochtime.pid.fqdn なファイル名を付ける。epochtime.pid は ヘッダ読んで適切にでっち上げるわけだが、これが結構大変だった。この部分がいいかげんだと、imapd から見た「受信日時」が妙なことになってしまうので、あれこれ調整に時間がかかった。

フォルダ構成は、Gnus のメールデータツリーを整理して再構成。courier imapd では、Fordername に対し、~/Maildir/.Fordername/{cur,new,tmp} というディレクトリを作る。INBOX がどこにも出てこないのがちょっと妙。フォルダの階層が増えてもディレクトリは掘らず、~/Maildir/.1stforler.2ndforler/{cur,new,tmp} となるところに特徴があると思う。

Gnus のメールデータの各ディレクトリを回り、先に作ったスクリプトで、適切なフォルダにコピーしていく。epochtime の抽出に失敗したりなんてこともあったので、この作業だけで数週間かかってしまった。ちょっと数えてみたところ、16bit整数では数えられんほどのメールがあった。一番古いのは、1995年1月14日の某 ed 氏からのだ。たぶん初代 gamba にログオンしてもらってメールのやりとりをしてるんだと思う。どやって接続してた頃のだろう? もうこの頃って ISDN だったんだっけ?

フォルダ分け

mailsplit なるフォルダ分けスクリプトを作り、.qmail に

| bin/mailsplit

と書く。ln .qmail .qmail-default しておく。

最初は dropmail という courier な MDA を使うつもりだったんだけど、せっかく qmail-local があるんだら、これを使いたかった。振り分けルールをあまり複雑にできそうにないというのもひっかかった。要は、自前のスクリプトで振り分けたかったのだ。

qmail-local は recipient に合った dot-qmail を見つけてそれを読む。どこにメールを落とすのかはその中に指定する。こちらがやりたいのは、指定した Maildir にメールを落して欲しいだけだ。振り分けした後、指定したディレクトリを含んだ dot-qmail を用意するなんてナンセンスだ。dot-qmail なんぞ読まなくっていい。

そこで、recipient が空の dot-qmail を指すようにしむけてやる。空の場合は、緊急処置として引数の最後に指定しておく default-delivery が実行されるのだ。dot-qmail に書かなくっていい。空の .qmail-trash を用意する。

my $rc = system {'/var/qmail/bin/qmail-local'} 'qmail-local',
    $local, $homedir, $user, '-', 'trash',
    $host, $send, $dir;

.qmail-trash が空になっているので、$dir に指定されたディレクトリにメールを作るようになる。$local, $host, $send はそれぞれ LOCAL, HOST, SENDER 環境変数から。dot-qmail の中なので、これらの環境変数は必ずセットされている。$homedir と $user は、uid から引っ張ってくる。

$local と $user, '-', 'trash' が一致してなくてかまわないということと、空の .qmail-trash で default-delivery を実施させるというところが、ここのステップのミソになる。かなりトリッキーだけど、MDA を別途用意するよりかはいいな。

本当に ${user}-trash 宛に来たメールはどうなるか? ~/Mailbox に入りますな。捨て置かれてしまいます。まぁ、ゴミ箱宛のメールなんだから、そんな扱いで充分かと。

Mail.app

qmtpd を止め、poe に残ってた移行期間中のを再度 rsync して振り分けて作業完了。この状態でバックアップを取り、imapd を動かして、Mac mini で Mail.app を動かしてみる。

1万通近くあるフォルダーをアクセスすると、延々と待たされる。そのうち、spotlight のインデックス作るデーモンやらが動き始めるのでさらに遅くなる。しばらくは使いものにならんかった。今でも、大きなフォルダへのアクセスはかなりモタつく。やっぱりもっと速い Mac が欲しいなぁ。

アクセスできることを確認したら qmtpd を動かす。各ログを tail させながら、あっちゃこっちゃからメールが来るのを眺める。うまくいってるログを眺めるのは楽しい(ちょっと倒錯はいってるかも)。

おまけ

環境設定で、それまでいじってなかった、IMAP パスの接頭辞に INBOX を入れみた。

20070310.mailapp.png

すると、これまで、受信メールボックスの配下に並んでいたフォルダー群が最上位に移ってきた。なかなかいい感じある。

20070310.mailfolder.png

本日のツッコミ(全3件) [ツッコミを入れる]
_ ed (2007-03-11 00:39)

性能よく知らないで言ってみるけど、mt-daapd を試してみては?<br>http://www.mt-daapd.org/

_ (2007-03-11 00:49)

いや、サーバー側じゃなくって、クライアント側だと思うです。<br>あ、でも根拠レスだな。

_ ed (2007-03-11 09:04)

ものすごくいまさらな気がしなくもないけど、IMAP の同期ツール使えば少しは楽できたのかも…。<br>http://www.linux-france.org/prj/imapsync/


2002|10|
2003|10|12|
2004|01|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|05|07|08|09|10|11|12|
2009|02|06|08|09|
2010|02|08|
2011|08|
2012|07|
2013|01|06|09|10|
2019|07|10|
2020|07|
2022|08|