ttt

getttyent

スタートレック 宇宙大作戦 デジタルリマスター版 ~ そこには懐かしい未来があった

2007-07-31 23:04:53 | テレビ番組

20070731

NHK BS2で、先々週くらいからはじまった、「スタートレック 宇宙大作戦」のデジタルリマスター版。
見ました!
毎回見なくては!!っていう番組が1つ増えました。

私は、それほど熱狂的なスタートレック・ファンじゃないので、マニアックなことを熱く語ることはできませんが、それでも、ひさしぶりに、オリジナルシリーズが見て、ああ、やっぱり、いいな、と思ってしまいます。初めてちゃんと見たのは、中学生か高校生くらいのときで、真夜中に放送してたと記憶しています。

今回放映しているのは、デジタルリマスター版ってことで、映像がデジタル処理できれいに直ってたり、宇宙船の映像などのSFXシーンがCGで作り直されているそうです。

・・・事前に見た予告CMで、それを知ってはいたのですが、本編を見ている最中は、あんまり気にしてませんでした。

そうか、きっと、うちのテレビが、ハイビジョンじゃないからいけないんだな。きっと、そうだ。ハイビジョンで見ると、すごいことになっているに違いない(笑)


小松崎茂の描いた未来社会の空想図は、未来なのになぜか懐かしく感じますが、スタートレックのオリジナルシリーズも、23世紀の未来の設定なのに、なぜか懐かしいですね。物語の中の舞台に、番組制作当時の世相や技術レベルなどがにじみでてきているためであるわけなんだと思いますが。
初回放映時はまだ生まれてませんでしたが、個人的には、大阪万博の前後数年くらいの間が、最近、とっても懐かしく感じます。どこか、あこがれます。老化現象か?!

今回のスタートレックでは、宇宙で戦艦同士で戦闘になったとき、ダメージをうけると、電気系統から派手に火花が散ったり(制御系にはそんなに電圧を高くかけなくてもいいはずなのに)、なぜか天井から土ぼこりのようなものが舞い降りたり・・・ まあ、そんなところが懐かしいです。 ・・・はぁ?

それになんといっても、宇宙大作戦という邦題。このネーミング・センスが、最高にイカしてます。私には、絶対に、このような名前はひらめきません。実際のところは、スパイ大作戦にならって、当時、「ナントカ大作戦」とつけるのが流行してた、ってだけの理由みたいですけど。そうか、missionだから作戦なのか・・・

懐かしい以外では、役者さんたちがみんな若くて、安心して見られる、ってところも、やっぱりオリジナルシリーズのよさか・・・

デジタルリマスター版は、オリジナルシリーズとは、放映順序がまったく違うそうです。

ウィキペディアには、やっぱり、スタートレック関係は、やたらと詳しくのってますね。

デジタルリマスター版の第1話を見てて、あれ?って思ったことがあったんですが、ロミュラン人とバルカン人って、元は同じ種族だったんですね。

そんなことも知らなかったのか・・・反省。


うなぎをたずねて三千米

2007-07-30 23:03:19 | 食・レシピ

土用の丑の日。

スーパーの閉店時間近くに行って、50%引きになったやつでも買って帰ろうと思ってたら、全部売り切れてました。

閉店時間間際すぎたのかもしれないですし、もしくは、店のほうで今年は中国うなぎ問題で需要減とよんで数が少なかったのかもしれません。

無いとわかると、絶対に食べなければならぬ、というへそ曲がり根性が!?

というわけで、こんな時間ですが、夜中までやってる別の店までいって、買ってきました。

200707301

これから遅い夕飯です。

自転車で行ったんですが、途中で、雨は降り出すし、雷も鳴り出すし、なんか、そこまでして、うなぎを食わねばならぬのか?!と疑問に思わなくも無かったです・・・

200707302

うひゃ~~~ でも、うなぎ!うなぎ!の図


(Windows XP) 「システム リソースが不足するため、API を終了できません」となって、と

2007-07-29 20:53:09 | デジタル・インターネット

うちのパソコンの1台、Windows XP (MCE)なんですが、ときどき、休止状態にしようとしたときに、数秒後、こんなエラーメッセージがポップアップして、休止状態にできなくなることがあります。

200707291

Windows - システム エラー
システム リソースが不足するため、APIを終了できません。

このポップアップメッセージは、しばらくたつと消えてしまいますが、「コントロールパネル」の、「管理ツール」の中にある、「イベント ビューア」を使うと、こういうのが記録されています。

200707292

なんとなく経験的にわかっていたこと。

  • RAMをトータル3GBへ増設したときから、ときどき、このエラーが発生するようになった。(DDR2 1GB 2枚を衝動買い)
  • 一度このエラーが発生すると、休止状態にするためのメニューが無くなってしまい、休止状態にできなくなる。再起動すると、再び、休止状態のメニューが復活する。
  • かわりに「スタンバイ」ならできる。スタンバイの場合は、電気が少し流れているので(たしか5V系が給電されててRAMの内容が保存されてるはず)地球にやさしくない! もっとも休止状態にしていても、やっぱり少しは電気を使ってるけど。
  • なんとなく、いろんなアプリケーションを複数起動していると、このエラーが発生しやすくなる。
  • 外出するときや、VNCでリモートからパソコンを操作しているとき、休止状態にしたつもりが、実は、このエラーがでていて、休止状態になっておらず、帰宅したとき、パソコンの電源が入りっぱなしなことに気がつき、憂鬱になることがあった。

というわけで、このエラー、すごく嫌だったんですが、いろいろと忙しくて、ずっと見なかったことにしていました。・・・ですが、そろそろ我慢できなくなり、ネット検索・・・

おぅ!これかい?! すぐ見つかりました。

Windows XP Service Pack 2、Windows XP Tablet PC Edition 2005 または Windows XP Media Center Edition 2005 を実行するコンピュータで、休止状態にならず、エラー メッセージ "システム リソースが不足するため、API を終了できません" が表示されることがある
http://support.microsoft.com/kb/909095/ja

これによると

  • この問題が発生した場合、コンピュータを再起動しない限り、コンピュータで休止状態機能を使用することはできません。
  • この問題は、一般に、1 GB 以上の RAM を搭載しているコンピュータで発生します。

ということなので、だいたいそのとおりです。

更新プログラムもちゃんと提供されているじゃないですか。はやく対策すればよかったなぁ。

Windows XP 用の更新プログラム (KB909095) パッケージ
リリース日 : 2006 年 8 月 15 日

ダウンロードは上記で示したページからどうぞ)

firefoxでアクセスしてたら、なんかうざったいメッセージが表示されたので、Internet Explorerでアクセスしたほうがいいかもしれません(どっちみち、Genuine Advantageなんとかのチェックはうけますが)。

200707293


この更新プログラムをインストールしてしばらく経過しました。何度か休止状態にしていますが、今のところ、問題は起きていません。

Windows Updateで提供していないってことは、これによって、何か副作用が起きる可能性があるかも、っていう意味がこめられているじゃないか?とかんぐってしまいますが、今のところは、とくに困ったことは起きていません。

関係ないですが、いつのころからか、休止状態にして、電源が切れるまで、ものすごく時間がかかるようになったWindows 2000マシンがあります。3倍くらい遅くなりました。なんだかなぁ


あついな・・・ NHKも

2007-07-28 20:10:05 | アニメ・コミック・ゲーム

20070728

暑い。
暑くて、何もできない。
さらに、パソコンから熱風が!
でも、今年もクーラーを使わないぞ。
今、部屋の温度は35度。

それにしても、電脳コイル、わけわかんなくておもしろいなぁ。
今日の、ヒゲ。こういうノリ、いいなあ。

NHKでは、今週の月曜7月23日から、2007 BS夏休みアニメ特選がはじまってます。

放送予定
http://www3.nhk.or.jp/anime/07summer/index.html

何度もテレビで放映してる、夏の定番「タッチ」とか、再放送とかが多いですね。

むしろ夏休みアニメ特選よりも、8月5日から8月12日までの

アニメギガ・スペシャル
とことん!押井守

が、なんかだすごいことになっていると思います。

http://www.nhk.or.jp/animegiga/oshii/

番組表
http://www.nhk.or.jp/animegiga/oshii/program.html



うぉぉ、「一発貫太くん」、見たいかも~!
おからおにぎり、食べたい~!

ほかにも、アニメ映画劇場では、明日7月29日は「APPLE SEED」(つやつやしたCGアニメのやつ)、8月26日には、劇場版の、「xxxHOLiC 真夏ノ夜ノ夢」 と「ツバサ・クロニクル 鳥カゴの国の姫君」など、NHKって、やたらアニメが多いですね。

ハードディスク・レコーダの空き容量を増やしておかないと。
今、残量が30分・・・


(FreeBSD) portsでwireshark-0.99.6がmakeできない ~ `libwi

2007-07-27 23:38:46 | デジタル・インターネット

しばらく前から、portupgradeでwiresharkをアップデートしようとしても、途中でエラーが出てアップデートできてなかったんですが、いづれportsが直るだろうと放置してました。だけど、wiresharkの0.99.5にはセキュリティアドバイザリが出てるぞと、portauditが毎日報告してくるので、やっぱりアップデートしなくちゃいけないかな、っと。

で、ふと気がつけば、いくつかあるFreeBSDマシンの中で、portupgradeで、0.99.6へアップデートできたマシンと、できなかったマシンがある。

・・・どうも、FreeBSD 5-STABLEのマシンだけ、makeの途中でエラーになっているっぽい感じがします。こんなエラーがでてます。

    then mv -f ".deps/libwireshark_la-xmlstub.Tpo" ".deps/libwireshark_la-xmlstub.Plo"; else rm -f ".deps/libwireshark_la-xmlstub.Tpo"; exit 1; fi
cc -DHAVE_CONFIG_H -I. -I. -I.. -I./.. -I./../tools/lemon -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/include -I/usr/local/lib/include -DINET6 -O -pipe -Dfreebsd5 -DAPPLLIB_EXP=/usr/local/lib/perl5/5.8.8/BSDPAN -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/local/lib/perl5/5.8.8/mach/CORE -I. -I/usr/local/include -I/usr/include -DINET6 "-D_U_=__attribute__((unused))" -O -pipe -funit-at-a-time -Wall -W -Wdeclaration-after-statement -Wendif-labels -Wpointer-arith -I/usr/local/include -D_THREAD_SAFE -D_REENTRANT -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include/freetype2 -I/usr/local/lib/include -DINET6 -O -pipe -Dfreebsd5 -DAPPLLIB_EXP=/usr/local/lib/perl5/5.8.8/BSDPAN -DHAS_FPSETMASK -DHAS_FLOATINGPOINT_H -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/local/lib/perl5/5.8.8/mach/CORE -I. -I/usr/local/include -I/usr/include -MT libwireshark_la-xmlstub.lo -MD -MP -MF .deps/libwireshark_la-xmlstub.Tpo -c xmlstub.c  -fPIC -DPIC -o .libs/libwireshark_la-xmlstub.o
gmake[3]: *** `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません.  中止.


portupgrade wiresharkが始まった最初のころ、configure実行時のメッセージにヒントが?!

--->  Upgrading 'wireshark-0.99.5_3' to 'wireshark-0.99.6' (net/wireshark)
--->  Building '/usr/ports/net/wireshark'
===>  Cleaning for wireshark-0.99.6
===>  Found saved configuration for wireshark-0.99.4
===>  Extracting for wireshark-0.99.6
=> MD5 Checksum OK for wireshark-0.99.6.tar.bz2.
=> SHA256 Checksum OK for wireshark-0.99.6.tar.bz2.

  途中省略

checking for inet_aton... yes
checking for library containing inet_pton... none required
checking for broken inet_pton... broken

  以下省略


inet_ptonがbrokenだそうです。configureでやってるテスト内容をのぞいてみると、IPv6関係かな?と思ったのですが、よくわかんないから、まあいいことにします。
brokenなら、wiresharkが自前で用意しているinet_ptonがコンパイル、リンクされるっぽいです。

なお、FreeBSD 6-STABLEや、7-CURRENTの場合は、

checking for broken inet_pton... ok

となるみたいで、そのせいかビルドも成功しているみたい。

というわけで、OSが用意してくれているinet_ptonがbrokenらしいので、自前のinet_ptonを使うみたいなんですが、

gmake[3]: *** `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません.  中止.

となるように、なんかうまくいってないみたいです。

Makefileを見ても、すぐにはよくわかんなかったのですが、なんとなく思いつきで、portsで実際にコンパイル作業を行うディレクトリへ移動し、手でgmakeコマンドをたたいてみると、うまくできちゃいました。

# cd ...SOMEWHERE.../ports/net/wireshark/work/wireshark-0.99.6/
# gmake inet_pton.o
# gmake inet_pton.lo

これでうまくいくかと思えば、やっぱりだめ。
よーくログメッセージを見てみると

gmake[3]: *** `libwireshark.la' に必要なターゲット `inet_pton.lo' を make するルールがありません.  中止.
gmake[3]: ディレクトリ `...SOMEWHERE.../ports/net/wireshark/work/wireshark-0.99.6/epan' から出ます

ああ、ディレクトリが違う。epanという1レベル違うところでエラーがでてました。

というわけで、こんな具合にシンボリックリンクをはってやったところ、正常にビルドできました。

# cd epan
# ln -s ../inet_pton.lo
# ln -s ../inet_pton.o
# cd .libs/
# ln -s ../../.libs/inet_pton.o .

なぜこういう状況になってしまうのか、時間がなくて調べられなかったんですが、まあ、うまくいってしまった、ってことで。


五色まめろんぱん

2007-07-26 23:07:05 | 食・レシピ

20070726

まめろんぱん? どこで名前を区切っていいのか・・・

五色豆(ごしきまめ)というお菓子とは関係ないっぽい。

いっそのこと、枝豆、大豆、きなこ、納豆、味噌で、五色豆ってのはどうだろう。

一色じゃないかっ! って言いたいだけなんですが・・・

さらに、豆腐や醤油も入れて、七色豆に・・・


■ 過去記事


FreeBSDをNFSサーバにしてdiskless Linuxのブート ・・・ できなかったメモ

2007-07-25 23:38:37 | デジタル・インターネット

この前、FreeBSD 5-STABLEをファイルサーバにして、CentOS 5.0をネットワークブートさせようとしてて、どうしてもダメだったメモ。

こんな感じで、お膳立てをして、玉砕した。


  • CentOSを動かしたいディスクレスクライアントは、PXEブートできる
  • DHCPサーバは、FreeBSD 6.2-STABLEで、isc-dhcpd
  • ブートローダ(pxelinux)やカーネルなどのファイルは、FreeBSD 6.2-STABLEなマシンから、tftpでダウンロード
  • ルートファイルシステムは、FreeBSD 5.5-STABLEをNFSサーバとして、NFSマウントさせる。initrdは使わない
  • FreeBSD 6.2-STABLEと5.5-STABLEと、2台使っているけど、単にディスクがあまってるマシンが、5.5-STABLEのマシンだったからという理由
  • pxelinuxは、昔、debianやFedora Core 4などをネットワークインストールしたときのがあるので、それをそのまま使う
  • とりあえず、HDDにCentOSをインストールしておいてから、ファイルをすべて、FreeBSDのファイルサーバ上へdump & restoreしてコピー。/dev/などがコピーされてなくて、実はまずかったんだけど、ディスクレスなlinuxマシンが、そこらをアクセスするようになる以前の段階でエラーになっているため、とりあえず無視
  • Linuxカーネルを再構築して、ROOT_NFSという機能が組み込んだ。また、ネットワーク(NIC)のデバイスドライバも、モジュールにせずに、カーネルに組み込んだ
  • Linuxカーネルのブート中のログを見てると、DHCPでアドレスなどの情報を取得には成功しているが、ルートファイルシステムをマウントできずpanic。
  • NFSサーバ側で、showmountしてみると、マウントした痕跡は残っていた

tcpdumpしてみた。
Linuxが、ルートファイルシステムをNFSマウントしようとしてるところ。

2007072501

MOUNTは成功している。
そのあとに、STATFSというのを実行しようとしている。

STATFSのリクエスト

2007072502

STATFSのリプライ。

2007072503

replyは、denied。AUTH_ERRORとなっている。

リクエストに入ってた、AUTH_NULLというのが(詳しい意味はわかんないけど)、FreeBSD 5.5-STABEのNFSサーバで未対応なのではないか?という感じがする。

そう思った理由というのが、ファイルサーバを、CentOS 5.0なマシンに変更したところ、STATFSも成功しているから。

MOUNTして、STATFSしているところ。

2007072504

STATFSのリクエスト

2007072505

STATFSのリプライ。

2007072506

RPC executed successfullyとなってるし、ファイルシステムの情報(Block Sizeなど)が、NFSサーバから返ってきている。

というわけで、どうやら、ディスクレスなリナックスをブートさせるためには、NFSサーバを選ぶらしい・・・と。

もしかすると、FreeBSDでも、バージョン6系列とか7系列とかだと、うまくいくかもしれない?!

また、linux kernelのバージョンによっても、挙動がかなり違うらしい。

Cent OSをファイルサーバにすれば、ネットワーク・ブートできたのか?っていうと、実は、うまくいってない。

diskless clientで、initなどの実行がはじまり、root filesystemをread write mountし、あれこれ/var/以下にファイルを書き込もうとしているときに、root権限でファイルを作成できず、nobodyにされてしまうため。

もちろん、NFSサーバ側では、no_root_squashをつけてexportしているし、別のNFSクライアントで、root権限で書き込みができることは確認済み。

以下は、diskless clientが、root権限でファイルを書き込めていない様子。

とりあえず、ムリヤリに、single userでブートさせておいてから、/tmp以下に、testという名前のファイルを作成しようとしたところ。

CREATEのリクエスト。

2007072507

CREATEするとき、なぜか、uidやgidが指定されていない。なんか、もうここからしてダメっぽい。・・・NFSプロトコルについてよく知らないので、本当にそういう意味なのかどうかはよくわかんないけど。

CREATEのリプライ。

2007072508

一応成功はしているが、uidが65534になっている。

つまり、root権限で書き込めていない。というか、NFS client側が、そもそも、rootで書き込む気がない、ってかんじ。

こういう挙動から、どうやら、kernelに組み込まれるROOT_NFSのNFS clientとしての機能は、実は、かなりウソくさい実装になっているんじゃないか?っていう感じがしてくる。

ためしに、single user modeのときに、NFS clientとして動作するのに必要なデーモン類(portmapや、rpc.nfsdかな)を、手動で実行し、NFSマウントしてみると、ちゃんとroot権限で書き込みができた。

というわけで、root filesystemを read write modeでremountする前に、NFS client用のデーモンを一通り実行して、ROOT_NFSではなく、本物のNFS clientとして動作させておかないとダメなんじゃないかな、って気がする。

そういうことをするinitrdを作っておけば、そもそもROOT_NFSなんかも使う必要がないわけで、カーネル再構築も不要。initrdでなんとかガンバル、というのが、実は正しいアプローチな気がする。


玄箱でIMAPメールサーバを構築 ~ fetchmailのインストール

2007-07-24 23:51:10 | デジタル・インターネット

fetchmailは、POPサーバやIMAPサーバから、メールをとってくるソフトウェアです。

ネットワークプロバイダなど、リモートのメールサーバ上にあるメールボックスから、fetchmailにより、POPプロトコルでメールをダウンロードして、玄箱のメールボックスに保存します。

そして、Windows上で実行するMozilla Thunderbirdなどのメールソフトで、玄箱のIMAPサーバにアクセスして、メールを読む、という使い方を想定しています。

■ いきなりつまづいた・・・

fetchmailのソースコードを展開します。

% tar zxvf fetchmail-6.3.8.tar.bz2

玄箱でコンパイルします。configureのオプションは、なんとなく直感で、「./configure --with-ssl --disable-nls --disable-dependency-tracking --enable-fallback=no」としてみました。

さて、やってみると・・・

root@KURO-BOX:/mnt/share/200707/fetchmail-6.3.8# ./configure --with-ssl --disable-nls --disable-dependency-tracking --enable-fallback=no
checking build system type... powerpc-unknown-linux-gnu
checking host system type... powerpc-unknown-linux-gnu
checking target system type... powerpc-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
configure: autobuild project... fetchmail
configure: autobuild revision... 6.3.8
configure: autobuild hostname... KURO-BOX
configure: autobuild timestamp... 20070722-055646
checking for a Python interpreter with version >= 2.0... none
configure: WARNING: Disabling fetchmailconf: python 2.0 or greater not found
checking for gawk... (cached) awk
checking for gcc... gcc

 省略

checking for inet_ntop... yes
checking if your getaddrinfo is async-signal-safe... yes
configure: Enabling OpenSSL support in /usr.
checking for additional library dependencies of SSL... (none)
checking number of arguments to gethostbyname_r... 6
./configure: sort: command not found
configure: creating ./config.status
./configure: uniq: command not found
config.status: creating Makefile
config.status: creating m4/Makefile
config.status: creating po/Makefile.in
config.status: WARNING:  po/Makefile.in.in seems to ignore the --datarootdir setting
config.status: creating genlsm.sh
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing default-1 commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
./configure: sort: command not found
./configure: sort: command not found

sortuniqというコマンドがないといてエラーがでてますね。
makeを実行してみるとエラーになるので、やっぱり、sortをuniqをインストールすることにしました。

sort、uniqは、GNUなツールの、coreutilsというやつに含まれます(昔は、fileutilsという名前だった)。

というわけで、coreutilsをインストールします。


■ coreutilsをコンパイルしようとして、また、つまづいた

ファイルを展開します。

% tar zxvf coreutils-6.9.tar.bz2

configureのオプションは、またしても直感で、「./configure --disable-nls --disable-dependency-tracking」として(笑・・・configure --helpで眺めて決めてます)、やってみますと・・・

root@KURO-BOX:/mnt/share/200707/coreutils-6.9# ./configure --disable-nls --disable-dependency-tracking
checking build system type... powerpc-unknown-linux-gnu
checking host system type... powerpc-unknown-linux-gnu
configure: autobuild project... GNU coreutils
configure: autobuild revision... 6.9
configure: autobuild hostname... KURO-BOX
configure: autobuild timestamp... 20070722-151720
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for style of include used by make... GNU
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes

 (省略)

config.status: creating tests/touch/Makefile
config.status: creating tests/tr/Makefile
config.status: creating tests/tsort/Makefile
config.status: creating tests/unexpand/Makefile
config.status: creating tests/uniq/Makefile
config.status: creating tests/wc/Makefile
config.status: creating lib/config.h
config.status: executing depfiles commands
config.status: executing po-directories commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
./configure: sort: command not found
./configure: sort: command not found
root@KURO-BOX:/mnt/share/200707/coreutils-6.9#

またですか、「sort: command not found」!!!

sortをコンパイルするのに、sortが必要みたいです?!

きっと、coreutilsのドキュメントをじっくりと読めば、正しい対処方法があるかと思いますが、もういい、とやけになって、FreeBSD上でクロスコンパイルすることにしました。

以前、FreeBSD上に、玄箱のクロス開発環境を、作りましたから・・・

参考

FreeBSDに玄箱のクロス開発環境を構築






■ coreutilsをクロスコンパイル

なんだか、大げさなことになってきました(笑)。

クロスコンパイルするので、「--host」オプションを指定します。

./configure --disable-nls --disable-dependency-tracking --host=powerpc-hardhat-linux

でよさげです。


参考

FreeBSD上で玄箱用tcshをクロスコンパイル


以下のように、FreeBSD上で実行します。

FreeBSD % ./configure --disable-nls --disable-dependency-tracking --host=powerpc-hardhat-linux
configure: WARNING: If you wanted to set the --build type, don't use --host.
    If a cross compiler is detected then cross compile mode will be used.
checking build system type... i386-unknown-freebsd6.2
checking host system type... powerpc-hardhat-linux-gnu
configure: autobuild project... GNU coreutils
configure: autobuild revision... 6.9
configure: autobuild hostname... freebsd.local
configure: autobuild timestamp... 20070722-153657
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... build-aux/install-sh -c -d
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for powerpc-hardhat-linux-strip... powerpc-hardhat-linux-strip
checking for style of include used by make... GNU
checking for powerpc-hardhat-linux-gcc... powerpc-hardhat-linux-gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... yes
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether powerpc-hardhat-linux-gcc accepts -g... yes
checking for powerpc-hardhat-linux-gcc option to accept ISO C89... none needed
checking dependency style of powerpc-hardhat-linux-gcc... none
checking for powerpc-hardhat-linux-gcc option to accept ISO C99... unsupported
checking for powerpc-hardhat-linux-gcc option to accept ISO C89... (cached) none needed

(以下略)

configureは正常に完了しました。
つづいて、gmakeを実行します。

すると・・・なんだかコンパイルエラー。

powerpc-hardhat-linux-gcc  -I. -I../lib  -I../lib   -g -O2 -c remove.c
remove.c: In function `pop_dir':
remove.c:241: parse error before `top_len'
remove.c:242: `top_len' undeclared (first use in this function)
remove.c:242: (Each undeclared identifier is reported only once
remove.c:242: for each function it appears in.)
remove.c: In function `AD_stack_pop':
remove.c:376: parse error before `struct'
remove.c:377: `top' undeclared (first use in this function)
remove.c: In function `prompt':
remove.c:835: parse error before `char'
remove.c:839: `quoted_name' undeclared (first use in this function)
remove.c: In function `rm_1':
remove.c:1490: parse error before `struct'
remove.c:1491: `st' undeclared (first use in this function)
remove.c:1512: parse error before `enum'
remove.c:1513: `status' undeclared (first use in this function)
gmake[2]: *** [remove.o] Error 1
gmake[2]: Leaving directory `/.amd_mnt/kuro/host/mnt/share/200707/X/coreutils-6.9/src'
gmake[1]: *** [all] Error 2
gmake[1]: Leaving directory `/.amd_mnt/kuro/host/mnt/share/200707/X/coreutils-6.9/src'
gmake: *** [all-recursive] エラー 1

ソースコードをのぞいてみますと・・・

static inline void
pop_dir (Dirstack_state *ds)
{
  size_t n_lengths = obstack_object_size (&ds->len_stack) / sizeof (size_t);
  size_t *length = obstack_base (&ds->len_stack);

 

assert (n_lengths > 0);
  size_t top_len = length[n_lengths - 1];
  assert (top_len >= 2);

assertを実行したあとに、top_lenという変数宣言がされています。こういう書き方は、昔のコンパイラではエラーになっちゃうんです。変数宣言は、ブロックの先頭にまとめて書かないとダメなのでした。昔のC言語の規格では・・・
以前用意したクロスコンパイラは、gcc-2.95なので、ダメみたいです。gcc-3.xだときっと大丈夫だと思います。

というわけで、ソースを書き換えて、コンパイル。すると、また似たようなエラー。
また、ソースを書き換えて、コンパイル。すると、また似たようなエラー。
う~ん、いやんなってくるな・・・

で、とりあえず一通り、ソースの修正が終わって、コンパイルが完了しました。

ようやく、そのときになって気がついたのですが、「c99-to-c89.diff」という、なんかそのものずばりな名前のパッチがcoreutilsの中にはいってました。そのパッチをあてれば、自分でソースを変更する必要なんかないようでした。あーあ、無駄骨。

なお、サブディレクトリのmanで、makeがエラーになってしまうようです。

Making all in man
gmake[1]: Entering directory `/.amd_mnt/kuro/host/mnt/share/200707/X/coreutils-6.9/man'
Updating man page rm.1
help2man: can't get `--help' info from rm.td/rm
gmake[1]: *** [rm.1] Error 2
gmake[1]: Leaving directory `/.amd_mnt/kuro/host/mnt/share/200707/X/coreutils-6.9/man'
gmake: *** [all-recursive] エラー 1

これは、どうやら、「rm --help」コマンドを実行して、その出力結果を使って、マニュアルのテキストを反映させているっぽいです。クロス開発環境ではrmコマンドを実行できないですから、これは無理。manは、無視することにしました。

最上位ディレクトリ(topdir)のMakefileを書き換えて、manをSUBDIRSから抜いてもいいでしょう。まあ、エラーを無視すればいいだけのことですけど。

sysconfdir = ${prefix}/etc
target_alias =
top_builddir = .
top_srcdir = .
#SUBDIRS = lib src doc man po tests
SUBDIRS = lib src doc po tests

coreutilsには、数多くのコマンドが含まれているのですが、今は、sortとuniqだけがあればよさそうなので、sortとuniqだけを、玄箱の/usr/binにコピーしました。

参考までに。

root@KURO-BOX:/mnt/share/200707/X/coreutils-6.9/src# ldd sort uniq
sort:
        libm.so.6 => /lib/libm.so.6 (0x0ff68000)
        libc.so.6 => /lib/libc.so.6 (0x0fe18000)
        /lib/ld.so.1 => /lib/ld.so.1 (0x30000000)
uniq:
        libc.so.6 => /lib/libc.so.6 (0x0feb0000)
        /lib/ld.so.1 => /lib/ld.so.1 (0x30000000)

暇なら、これらを使って、クロスコンパイラではなく、玄箱でcoreutilsをビルドしなおしてもいいかもしれません。


■ ようやくfetchmailをビルドできた

クロスコンパイルして作ったsortとuniqのおかげで、fetchmailのconfigureは正常に完了し、makeも正常に完了しました。

root@KURO-BOX:/mnt/share/200707/fetchmail-6.3.8# ldd fetchmail
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x0ffb3000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x0ff80000)
        libssl.so.0.9.6 => /usr/lib/libssl.so.0.9.6 (0x0ff2d000)
        libcrypto.so.0.9.6 => /usr/lib/libcrypto.so.0.9.6 (0x0fe23000)
        libc.so.6 => /lib/libc.so.6 (0x0fcd3000)
        libdl.so.2 => /lib/libdl.so.2 (0x0fcb0000)
        /lib/ld.so.1 => /lib/ld.so.1 (0x30000000)


■ そういや玄箱にはsendmailがない

fetchmailは、デフォルトでは、リモート環境のメールサーバからダウンロードしてきたメールを、SMTPプロトコルで、ローカル環境のメールサーバに流しこむみたいです。

FreeBSDの場合、sendmailが動いているので、そのsendmailを通じて、/var/mail/ユーザー名に、保存されているみたいです。メールReceivedヘッダをみると、こんなかんじになるのでわかります。

Received: from freebsd.local (localhost [127.0.0.1])
    by freebsd.local (8.14.1/8.13.4) with ESMTP id うんたら
    for <ユーザー@localhost>; Tue, 24 Jul 2007 09:21:59 +0900 (JST)
    (envelope-from なんと@かんとか)
Received: from プロバイダのPOP3メールサーバ [IPアドレス]
    by freebsd.local with POP3 (fetchmail-6.3.8)
    for <ユーザー名@localhost> (single-drop); Tue, 24 Jul 2007 09:21:59 +0900 (JST)

sendmailがないときは、ローカル配送メーラと呼ばれる類のツールで代用することができます(通常、/bin/mailなどがそうです)。

さて、玄箱では、sendmailはおろか、mail関係のツールはなにも入ってませんでした。どうしようかな、と思っていたら、imap-umのなかに、tmailというコマンドが入ってました。これが、バッチリ使えました。

先日ビルドしたimap-uwの中から、tmailコマンドを、/usr/bin/tmailとしてコピーしました。

試しているときに、なんかrootでsetuidしとけ、ってメッセージがでたので、やってみたのですが、実は、setuidはいらなさそうです(/var/mailなどのメールボックスに書き込むためだと思われる)。

root@KURO-BOX:/# chmod 4755 /usr/bin/tmail
root@KURO-BOX:/# ls -l /usr/bin/tmail
-rwsr-xr-x    1 root     root      1533452 Jul 22 17:21 /usr/bin/tmail

fetchmailの--mdaオプションで、/usr/bin/tmailを使え、と指定できます。

たとえば --mda "/usr/bin/tmail -D nhh"  となります。-Dは、デバッグ用のメッセージを表示するオプション、nhhは、配送先のユーザー名です。ユーザー名を明示指定するかわりに、置換パターンを使うこともできるみたいですが、よくわかんなかったので、やめておきました。どうせ使うのは、自分ひとりだけですから。

なお、MDAは、mail delivery agentの意味らしいです。ローカル配送メーラーとか言うやつかな(あんまり詳しいことはわかりません)。


■ 玄箱上にメールボックスを用意する

たとえば、ユーザー名nhhなら、こんなかんじ。

root@KURO-BOX:/# mkdir /var/spool/mail
root@KURO-BOX:/# touch /var/spool/mail/nhh
root@KURO-BOX:/# chown nhh /var/spool/mail/nhh
root@KURO-BOX:/# chmod 600 /var/spool/mail/nhh

tmailを実行するとき、自分がオーナーのファイルに自分の権限で書き込むので、root setuidはいらないね、ってことです。

■ fetchmailの動作テスト

fetchmailは、リモートのメールサーバからメールを読み出すときのプロトコル(POP3、IMAPなど)を自動的に選択してくれるのですが、ときどきうまくいかないときがあるので、そのときは--protocolオプションで指定したほうがいいかもしれません。

--keepオプションは、メールサーバ上にメールを残すオプションです。動作テストでメールを失ってしまわないように、念のため指定しましょう。

--fetchallオプションは、既読のメールも、もう一度ダウンロードするためのオプションです。このオプションを指定しない場合、fetchmailは、既読状態のメールはダウンロードしません。一度fetchmailでメールをダウンロードしてしまうと、既読状態になってしまいますので、動作テストの場合は、つけておいたほうがいいかもしれせん。。

こんな感じで、fetchmailを玄箱上で実行します。なお、nhhはユーザー名です。「--user nhh」は、リモートメールサーバにアクセスするときのユーザー名で、「-D nhh」は玄箱でのユーザー名です。必ずしもユーザー名が一致するわけではないので、誤解なきよう・・・

nhh@KURO-BOX:~$ fetchmail --keep --user nhh --mda "/usr/bin/tmail -D nhh" --fetchall リモートのメールサーバ
Enter password for nhh@リモートのメールサーバ: パスワードを入力
157 messages for nhh at リモートのメールサーバ.
reading message nhh@リモートのメールサーバ:1 of 157 (1191 header octets).tmail called with LF-only newlines
delivering to nhh+INBOX
Verifying safe delivery to /var/spool/mail/nhh by UID 1001
unix appending to INBOX (file /var/spool/mail/nhh)
delivered to /var/spool/mail/nhh
Verifying safe delivery to /var/spool/mail/nhh by UID 1001
all recipients delivered
(539 body octets) not flushed
reading message nhh@リモートのメールサーバ:2 of 157 (1239 header octets).tmail called with LF-only newlines
delivering to nhh+INBOX
Verifying safe delivery to /var/spool/mail/nhh by UID 1001
unix appending to INBOX (file /var/spool/mail/nhh)
delivered to /var/spool/mail/nhh
Verifying safe delivery to /var/spool/mail/nhh by UID 1001
all recipients delivered
(499 body octets) not flushed

以下省略



つづく・・・

次回の予定としては、Mozilla Thunderbirdなどメールソフトのセットアップなど。

実は、日曜日からずっと、SpamAssassinを動かそうとして、悪戦苦闘してます。CPANで、なんかうまくインストールされなくて。


■ 前回の記事


実録男前豆腐店 男の3連チャン

2007-07-23 23:01:15 | インポート

例の、「男前豆腐店」の豆腐で、新しいのを見かけました。

実録男前豆腐店
男の3連チャン

20070723


意味わかんないですが、名前、干支、星座が書かれてます。どうでもいいところまで無意味に丁寧な仕事がされてます。

  • リュウイチ  寅年 牡牛座
  • テツオ  寅年 山羊座
  • マサヒロ  丑年 蟹座

男前豆腐店のウェブサイトを見たら、やかましくて、げんなりしました。
見なきゃよかった・・・あーあ。

昨日の予定では、玄箱でfetchmailを動かす話を書こうと思ってたのですが、今日は、憑かれた、じゃなくて、疲れちゃったんで、明日にします。

疲れちゃった理由ってのが、CentOSをネットワークブートさせて動かそうとして、あれこれやってたら、けっこう時間がたってしまいました、ってことなんですけど。

FreeBSDならそこそこわかってるつもりでしたが、リナックス方面は、もうほとんどわかんなくて。

なんとなく腕試しに、FreeBSDをネットワークブートさせることは、わりとすぐできましたけど。

でも、1つ大失敗しました。

ディスクレスクライアント用のファイルシステムを用意するときに、make installworld DESTDIR=/mnt ; make installkernel DESTDIR=/mntとかやって用意したんですが、それじゃダメなんですね。make installworldしたときって、/etc内のファイルは、ごく一部しかコピーされないので、それじゃ、まともにはブートしませんでした。
よく考えれば、そりゃーあたりまえだわ・・・(笑)

昔、debianやfedora coreをネットワークインストールしたことがあったので、ディスクレスなLinuxマシンを作るのなんて、すぐできるだろうと思ってたら、意外とはまって、結局、今日は途中で断念しました。

  • CentOSを動かしたいディスクレスクライアントは、PXEブートできる
  • DHCPサーバは、FreeBSDで、isc-dhcpd
  • ファイルは、FreeBSDマシンから、tftpでダウンロードさせてやる(なんかエラそうな態度だ)
  • ルートファイルシステムは、FreeBSDをNFSサーバとして、NFSマウントさせる。initrdは使わない
  • pxelinuxとかは、昔ネットワークインストールしたときのがあるので、それをそのまま使う
  • とりあえず、HDDにCentOSをインストールしておいてから、ファイルをすべて、FreeBSDのファイルサーバ上へdump & restoreしてコピー。なんかたくさんエラーがでてたけど・・・

そうして、さっそくブートさせると、ルートファイルシステムをマウントするところでエラー。

なるほど、標準のカーネルでは、ROOT_NFSという機能が組み込まれていないためですね。FreeBSDだとGENERICカーネルで有効になってたりしますが。

というわけで、久しぶり、10年ぶり?くらいに、Linuxカーネルを構築しちゃいましたよ。あーもー、かなりわかんなくなっちゃってます。make menuconfigが懐かしかったです。

で、けっこうはまりつつも、なんとかROOT_NFSを有効にしたカーネルを作って、ブート。

やっぱり、ルートファイルシステムをマウントするところでエラー。

tcpdumpした結果や、カーネルブート時のログよく見ると、そもそも、IPアドレスも取得していない。

とゆーか、ネットワークデバイスを認識していない。

・・・ああ、なるほど、ネットワークデバイスのドライバが、モジュールになってて、カーネルに組み込まれてないんだ!

で、もういちど、カーネルを再構築。

ブートさせると、今度はDHCPでアドレスなど情報を取得しています。

でも、やっぱりルートファイルシステムをマウントできずpanic。

NFSサーバ側で、showmountしてみると、マウントした痕跡は残っていたのですが・・・

明日、もう一度、よくLinux方面を勉強しなおしてから、再挑戦しようと思います。


(2007/7/24)

FreeBSD 5-STABLEをNFSサーバしたとき、どうも、うまくいかない。マウントは成功するものの、そのあとのNFSアクセスでエラーがでて、ディスクレスマシン側で自滅。tcpdumpでながめてみて、なんとなく変。

CentOS 5をNFSサーバとしたら、うまくいったと思いきや、ディスクレスマシンのroot権限でファイルを書き込むことがでいない。nobodyにマップされてしまう。NFSサーバではもちろんno_root_squashを指定してexport。FreeBSDなNFSクライアントでマウントしてみて、root ownerでファイルを作成できることは確認済み。tcpdumpでながめてみても、ファイルをcreateするときにuidが指定されてなくて、なんとなく変なかんじ。それにAUTH_NULLってうまく動いてるの?みたいな。

というわけで、とりあえず、書き込みができないけど、single userモードではブートできた。

どうも、Root_NFSで実装されているNFSクライアントが、うさんくせー実装になっているんじゃないか?説が強くなっています。

ふと思ったのですが、ウェブで公開されている、リナックスをネットワークブートするドキュメントのいくつかで、/tftpboot以下をNFS exportしろって書いてあるのがあったのですが、セキュリティ的に、非常に気持ち悪いです。それだと、tftpを使って、ディスクレスマシン用のファイルが自由に読めるようになっちゃいますよね?!
たしかにtftpd経由のアクセスは、そこそこのアクセス制限がかかるわけですが、それでも、本来は読めないはずのファイルが、だれでも自由に読めるようになってしまうってねぇ・・・なんか勘違いしてるかなぁ

■ 過去記事


玄箱でIMAPメールサーバを構築 ~ imap-uwのインストール

2007-07-22 22:04:07 | デジタル・インターネット

昨日、自宅で24時間運用しているFreeBSDサーバをメンテしてて思ったんですが、本当に、常時動かしておく必要があるのか・・・?

このFreeBSDでやってる仕事は

  • imap-uw (IMAP)
  • SpamAssassin (迷惑メールフィルタ)
  • apache httpd + WebDAV
  • samba
  • vtund
  • NFS server

などなど。

とりあえず、ハードディスクの代わりに、CF(コンパクトフラッシュ)にしてもいいのではないかと思ってたのですが(実際に、以前、CFで動かしていたときもあった)、必要なファイルの容量と、書き換え頻度などの点で、ちょっと不安な点もあります。

そこでふと思い出したのが、買って、しばらく遊んで、すぐ飽きて、すっかり忘れていた、玄箱

こいつで、IMAPサーバなどが動けば、けっこういいんじゃないかな?と。

今日、半日くらいいろいろやってて、結論としては、一応、IMAPサーバは動きました。

■ imap-uwのコンパイル

IMAPサーバは何種類かありますが、今まで使っていたのは、imap-uwというものだったので、これをインストールすることにしました。

http://www.washington.edu/imap/

ファイルを展開

# tar zxvf /usr/ports/distfiles/imap-2004g.tar.Z

# cd imap-2004g/

makeを実行(きっとRedHat Linuxに似てるだろう、ということでlrhを指定)

# make lrh

しばらくすると、コンパイルエラーが発生。

make[2]: Entering directory `/mnt/share/200707/imap-2004g/mtest'
`cat ../c-client/CCTYPE` -I../c-client `cat ../c-client/CFLAGS`   -c -o mtest.o mtest.c
`cat ../c-client/CCTYPE` -I../c-client `cat ../c-client/CFLAGS` -o mtest mtest.o ../c-client/c-client.a `cat ../c-client/LDFLAGS`
/usr/powerpc-hardhat-linux/bin/ld: cannot find -lpam
collect2: ld returned 1 exit status
make[2]: *** [mtest] Error 1
make[2]: Leaving directory `/mnt/share/200707/imap-2004g/mtest'
make[1]: *** [bundled] Error 2
make[1]: Leaving directory `/mnt/share/200707/imap-2004g'
make: *** [lrh] Error 2

原因は、「libpam.so」がないということらしく、ファイル名が微妙に違うためのようです。

root@KURO-BOX:/mnt/share/200707/imap-2004g# ls /lib/libpam*
/lib/libpam.so.0     /lib/libpam_misc.so.0     /lib/libpamc.so.0
/lib/libpam.so.0.72  /lib/libpam_misc.so.0.72  /lib/libpamc.so.0.72

とりあえず、ってことで、ファイル名を強制的に指定しちゃいます。

上記の実行コマンドを見ると、c-client/LDFLAGSというファイルで指定されているようなので、そのファイルをムリヤリ書き換え。

root@KURO-BOX:/mnt/share/200707/imap-2004g# vi c-client/LDFLAGS

-lpam -ldl
-L/usr/lib -lssl -lcrypto

となっているので、以下のように書き換え。

/lib/libpam.so.0 -ldl
-L/usr/lib -lssl -lcrypto

これでいいかと思いきや、またエラー。

cd mtest;make
make[2]: Entering directory `/mnt/share/200707/imap-2004g/mtest'
`cat ../c-client/CCTYPE` -I../c-client `cat ../c-client/CFLAGS` -o mtest mtest.o ../c-client/c-client.a `cat ../c-client/LDFLAGS`
/usr/powerpc-hardhat-linux/bin/ld: cannot find -lssl
collect2: ld returned 1 exit status
make[2]: *** [mtest] Error 1
make[2]: Leaving directory `/mnt/share/200707/imap-2004g/mtest'
make[1]: *** [bundled] Error 2
make[1]: Leaving directory `/mnt/share/200707/imap-2004g'
make: *** [lrh] Error 2

今度は、opensslがインストールされていない、ってことらしいです。なぜかopensslのヘッダファイルだけはインストールされていたのですが、肝心のライブラリがありません。

玄箱のCD-ROMに入ってたバイナリを展開します。なぜか、opensslは2つはいってます。

% ls -l openssl*
-rwxrwxrwx  1 99  99  1682667  2  9  2004 openssl-0.9.6e.tar.gz*
-rwxrwxrwx  1 99  99  1682600  3 18  2004 openssl.tar.gz*

どっちがいいのかわかりませんが、タイムスタンプの新しいopenssl.tar.gzを展開してみました。
バージョンを見ると

root@KURO-BOX:/# openssl version
OpenSSL 0.9.6e 30 Jul 2002

どっちも同じ?

これで、imap-uwはコンパイルできるようになりました。

できあがったimapd。

root@KURO-BOX:/mnt/share/200707/imap-2004g# ls -l imapd/imapd
-rwxr-xr-x    1 root     root      1636598 Jul 22 14:21 imapd/imapd

root@KURO-BOX:/mnt/share/200707/imap-2004g# ldd imapd/imapd
        libpam.so.0 => /lib/libpam.so.0 (0x0ffd7000)
        libdl.so.2 => /lib/libdl.so.2 (0x0ffb4000)
        libssl.so.0.9.6 => /usr/lib/libssl.so.0.9.6 (0x0ff61000)
        libcrypto.so.0.9.6 => /usr/lib/libcrypto.so.0.9.6 (0x0fe57000)
        libc.so.6 => /lib/libc.so.6 (0x0fd07000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x0fcba000)
        /lib/ld.so.1 => /lib/ld.so.1 (0x30000000)

POPデーモンなどもコンパイルされますが、個人的な好みで、

IMAP以外使う気にはなれない!

ため、imapdだけ/usr/sbin/imapdとして、インストールします。

root@KURO-BOX:/mnt/share/200707/imap-2004g# cp imapd/imapd /usr/sbin/

■ imapdが起動できるようにするための設定

imapdは、inetdから起動されます。

まずは、/etc/servicesに、imapがあるか確認。

root@KURO-BOX:/mnt/share/200707/imap-2004g# grep imap /etc/services
imap2           143/tcp         imap            # Interim Mail Access Proto v2
imap2           143/udp         imap
imap3           220/tcp                         # Interactive Mail Access
imap3           220/udp                         # Protocol v3
imaps           993/tcp                         # IMAP over SSL
imaps           993/udp                         # IMAP over SSL

ポート番号143が「imap」でいけそうなので、大丈夫そうです。

/etc/inetd.confを編集して、imapとimapsを追加。

root@KURO-BOX:/mnt/share/200707/imap-2004g# vi /etc/inetd.conf

# Pop et al
#
# pop2  stream  tcp     nowait  root    /usr/sbin/tcpd  in.pop2d
# pop3  stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/popper -s
#
# Imapd - Interactive Mail Access Protocol server
# Attention:  This service is very insecure
# imap2 stream  tcp     nowait  root    /usr/sbin/tcpd  imapd
#
imap    stream  tcp     nowait  root    /usr/sbin/imapd imapd
imaps   stream  tcp     nowait  root    /usr/sbin/imapd imapd
#

inetdにシグナルをおくって、編集後のinetd.confを反映させます。

root@KURO-BOX:/# kill -HUP `cat /var/run/inetd.pid `

動作確認。telnetコマンドを使って、ポート番号143にアクセスして、imapdにアクセスできるかを試してみます。

% telnet kuro-box imap
Trying 192.168.0.41...
Connected to kuro-box.local.
Escape character is '^]'.
* OK [CAPABILITY IMAP4REV1 LITERAL+ SASL-IR LOGIN-REFERRALS STARTTLS LOGINDISABLED] KURO-BOX IMAP4rev1 2004.357 at Sun, 22 Jul 2007 14:46:00 +0900 (JST)

大丈夫そうです。

終了するには、Escape character is '^]'.と表示されているように、controlキーを押しながら「 ] 」を押すと、telnet>というプロンプトがでるので、そこでcloseと入力します。




■ 玄箱にユーザーアカウントを作成

パスワードファイルを編集します。

root@KURO-BOX:/# vi /etc/passwd

nhh:*:2001:2001:Nyo Ho Ho:/home/nhh:/bin/bash

というような行を追加します。

パスワードを設定します。

root@KURO-BOX:/# passwd nhh
Enter new UNIX password: パスワードを入力
Retype new UNIX password: もう一度入力
passwd: password updated successfully

確認。

root@KURO-BOX:/# grep nhh /etc/passwd
nhh:ハッシュされたパスワード:2001:2001:Nyo Ho Ho:/home/nhh:/bin/bash

/etc/groupファイルを編集して、グループを登録します。こんな感じ。

root@KURO-BOX:/# grep nhh /etc/group
nhh:*:2001:

ホームディレクトリを作成。

root@KURO-BOX:/# mkdir /home/nhh
root@KURO-BOX:/# chown nhh:nhh /home/nhh
root@KURO-BOX:/# ls -l /home
total 4
drwxr-xr-x    2 nhh      nhh          4096 Jul 22 14:42 nhh

一応、ログインできるか確認してみます。

% telnet -l nhh kuro
Trying 192.168.0.41...
Connected to kuro-box.local.
Escape character is '^]'.
Password: パスワード
Linux (none) 2.4.17_kuro-box #2 2004年 3月 18日 木曜日 11:39:47 JST ppc unknown
nhh@KURO-BOX:~$


■ imap-uw用のパスワードファイルを作成

CRAM-MD5という認証が使えるようにするため、/etc/cram-md5.pwdというファイルを作成します。ユーザー名(nhh)、タブ、パスワードと、1行で書きます。

こんなかんじです。

root@KURO-BOX:/# cat /etc/cram-md5.pwd
# CRAM-MD5 authentication database
# Entries are in form <user><tab><password>
# Lines starting with "#" are comments

nhh    パスワード

パスワードが書かれたファイルなので、一般ユーザーに見られないように、ファイルのパーミッションを適切に設定します。

root@KURO-BOX:/# chmod 400 /etc/cram-md5.pwd
root@KURO-BOX:/# ls -l /etc/cram-md5.pwd
-r--------    1 root     root           53 Jul 22 17:43 /etc/cram-md5.pwd


■ IMAPフォルダのファイルが$HOME/Mail以下に作成されるようにする“おまじない”

デフォルトでは、IMAPフォルダのファイルが、ホームディレクトリ($HOME)直下に作られてしまいます。個人的には、それは好きではないので、$HOME/Mail以下になるようにしています。

なんだか謎のおまじないですが、/etc/c-client.cfに、以下のようなことを書いておいてから・・・

root@KURO-BOX:/# cat /etc/c-client.cf
I accept the risk
set allow-user-config 1

ユーザーのホームディレクトリ以下に「.imaprc」というファイルを作成し、そこにもおまじないを書き込んでおきます。

root@KURO-BOX:/# cat /home/nhh/.imaprc
I accept the risk
set mail-subdirectory Mail

これで、Mozilla ThunderbirdなどのメールソフトのほうでHogeというフォルダを作成すると、それに対応する、$HOME/Mail/Hogeというファイルができるはずです。


つづく・・・

明日は、fetchmailのインストールを予定しています。

■ 過去記事