cpu二つ。うっほーい(2006/11/23)


file コマンド

ファイルの種類を当ててくれるコマンドである。

おおまかな仕組みとしては、 アンチョコを持っていて、これにしたがってファイルの種類を答えるようになっている。 ただし、一部ファイルについては、異なった処理が行われる。 たとえば、 elf バイナリでは手持ちのアンチョコ以上の情報を調べて答えてくれる場合もある。

Debianではアンチョコは /usr/share/misc/file/ に置いてあって、 中身を見れば判るが、よくあるフォーマットだ。 書き方と参照され具合の詳細は magic(5) のマニュアルに掲載されている。 ただし、実際にコマンドを使う場面では、 処理速度向上のため、まえ処理したmagic.mgcを使う場合が多いと思われる。 まえ処理済みファイルの作成は file コマンドで可能であり、 新しくこしらえたアンチョコ(コマンド起動時にオプションで指定)を読み込んで、 処理済データをファイルの形でカレントディレクトリに magic.mgc というファイル名で書き出す。

新しくファイルの種類を追加したい場合は、この magic ファイルを 充実させればよい。 最近の処理としては、ファイルの種類としてmimeタイプを欲しい、という向きも多い。 application/x-exectableみたいなアレだ。 magicに定義されたファイルの種類については、それに相当するmimeタイプを magic.mimeで定義することができ、 -i オプションでこれを参照することができる。 この場合はmimeタイプを追加するだけでなく、まずmagicに新しい種類を追加した上で、 それに相当するmimeタイプをmagic.mimeで定義してやる必要があり、 magic.mimeにだけエントリを追加してもちゃんと動かない。

magicナンバーの書き方だが、C言語風の文字列表現、 つまりバックスラッシュに続いてバイトの8進数表記を書くアレですが、 あの書き方も使えます。

ぐはー

いま、ちょっと面白いかなと自分なりに思えるアイデヤを elispで書いてるんだけど。

ぐはー。

なんなんだこの疲れ具合は? これがあれげ脳なのか?

単にナマってるだけなんだけど。 一年ぶりに自転車乗る。 しかも最近半年が佳境のデスマーチでずっと睡眠3時間、 みたいにあ感じのダメまりぐあいだ。もうダメかも。再帰不能かも。 む、これでは英語でいえばrecursively impossibleであり、 正しくは再起不能であるが、 前者でも意味は通るな。

そのご、そもそも問題が本質的に難しかったのだと判明。 当社比おおげさにいえば、 久々に数学を使ってアルゴリズムの正しさを証明する必要なども生じたほどの難しさである。 とはいえ、やはりこれだけブランクあけて証明やろうとするとさすがにアホになってるもので、 かなりひでぇ証明書いて、あとで間違ってるのが判ったりしたので、 じつはあまり難しくない説も根強い。

久々にDebianをインストール

新しいノーパソ X60s というのを買って来たので、 とりあえず、武藤さんの本のオマケで CD やろうとした。

付属のカーネル 2.6.8 ではハードディスクが見つからず、挫折。 そこで、徹底本のインストールのところの記事をじっくり読むと、 じつはネットワークブートが楽勝だという話が書いてあり、 一見トリッキーだがDebianではこれが一番素直なのかもしれないな、と思った。 web 記事を検索すると、買って来た機種はこの手口が使えるようで、 皆さん、これでインストールしておられる模様。

そこで、徹底本の80ページ付近、 2.7.3 に従って作業を進める。

今動いてるホストに dhcp3-server を入れ、 syslog に出力されるデーモンの不平不満を見ながら設定ファイルを直して、 ちゃんと起動させる。 dhcpd が動いたのを確認して、 自宅のルータで動いている dhcpd を止める。 dhcpd の設定で、出すご案内の中には、ルータやネームサーバのアドレス以外に、 起動時に読み込むファイルの所在があるわけで、 この設定を書く。 これが書けるdhcpdであれば、別になんでもいいんだが、 ルータに組み込みのdhcpdでそんなことができるのかどうか、 なんとなく無理そうなので、まじめに調べてないのでちょっと判りません。 どっちにせよ、 それができたところで tftpd が動いてるホストが無いとダメですから、 ネットワークブートを使うには、 一台は自由になるネットワークを持ったホストが必要です。

次にtftpdをインストールします。

apt-get install tftpd-hpa

tftpd のディレクトリ /var/lib/tftpboot/ に

どこかの.debian.org/debian/dists/testing/main/installer-i386/rc1/images/netboot/

に置いてある、

   netboot.tar.gz

を tar xvfz して展開した。 せっかくだから testing から持って来てみました。

tftpd は inetd からの起動なので、 inetd.conf の tftpd の行が生きているかどうかを確認し、 もし消してあったらそれを書いて inetd を再起動しておく。 つまり、 tftpd のプロセスが存在しなくても焦る必要はありません。 それから、 tftpd はインストールしただけでは起動されるようになっていないので、 /etc/default の tftpd-hpa を編集して、 起動されるようにしとておきます。

インストールする機械の起動順序の設定でネットワークを上の方に持って来て、 電源をいれれば、 bios の tftp クライアントが インストールイメージをとってきて、 それで起動してくれます。

あとはいつものインストールと全く変わらない。すげぇ!

今回はリリース間近の etch でのインストールです。 流れはいつもと大体同じです。 パーティション分割もインストールするものも、 おおむね全部お任せでGOです。 ネットワークデバイスの認識が一発でいくのはいつものことですが、 Xサーバの設定を一切せずに gdm が起動したのにはかなり驚きました。 私はこういう、チップの種類を調べたり、それに合わせて デバイスドライバを設定したりするのが苦手で(だったら なんでこんなOS使ってるんですかね)、 そんな作業を一切せずともズバっと動いたのはとても嬉しいことです。

さて、だいたいインストールが終ったところで、実際に使う環境を構築するわけですが、 今回鬼門になったのはメールでした。

ちょっと頑張って bogofilter に日本語も憶えさせるか、 と思ったわけです。 セックスフレンド募集とか電話くれとか、そんなメールはもうたくさんですからね。

意味不明な文字列ができるだけ入らないように気を付けると、 判別精度も向上するわけで、そこらへんに手を出したのが、 かなりマズかった。 結局、メールからバイナリをよけてテキストをなんとなく取り出すモノなどを 書く事になり、 これを使って取り出したテキストを、 mecab で切って bogofilter に登録する事にしたわけだが、 それにたどりつくまでの試行錯誤では、かなり疲れました。

おかげで、こういう馬鹿的文字列がヘッダに登場した場合を見分ける事ができるようになり、

head:★★★★★★★★ 10 0 20061121
head:★★★★★★★★★★ 8 0 20061121

今後の精度向上が望める気もする。

大して参考にもならないとは思いますが、 今回の bogofilter まわりの構成を一応書いておきます。

このコードがメール一通毎に標準入力からメッセージを読み込み、 そこから bogofilter に使えそうなものを標準出力に出す。 出すのはヘッダと本文とテキスト系添付ファイル。

それを mecab -O wakati する

それを bogofilter に通す。 exit0 でアウト。それ以外はセーフ。

もしくは、手持ちの正常なメールとゴミを上記の下準備したものに、 bogofilter -n とか bogofilter -s してフィルタを初期化する。

テキストを取り出すところは、 うっかりへんてこなバイナリを拾う事の無いように、 安全方向に振った仕様です。 デコードできるものはするが、 text/plain と書いてあって base64 で pack されていて unpack すると謎のバイナリというケースがよくあるので、 base64 のものからテキストを取り出すという危険を冒すのはやめました。 最初は、マルチパートとして解釈できなくても 可能な場合は本文部を再 parse してから decode するとか、 よくわかんねぇ凝った仕様だったのですが。 ここから先は、一旦ファイルに落して種類を file コマンドか何かで 調べてからどうこう、みたいな事になると思います。 だって、 spam に書いてある content-type って全然信用できないんだもんよ。 引込み思案になるのはしょうがないっす。

なんか久々にコンピュータぽい事をやりました。 しかし実はこれは全く生産的な仕事ではありません。 コンピュータで何かするための準備をしたにすぎないのです。 最近の情報通信技術ってそんなネタばっかりの気がします。 じつに不毛です。 そんなものをしかも微妙に再帰で書いて自己満足しているのは、 あまりよくない傾向ですね。

添付をファイルに落して種類をみてからどうこう、 みたいな処理自体は、それなりに実りがあると思います。 ワードのファイルなんかからテキストを引っ張り出して、 全文検索に入れておく、というような機能に直結しますからね。 そうすりゃ添付も含めて串ざしいっちょあがりです。 でも実は、ぶっちゃけそういうシステムを コネクタスという会社で作ったので、それはそれでいまさらな気がして、 萎える。

それから、 生まれて初めてグラフィカルなファイルマネージャの類を便利だと感じました。 nautilus すげぇ。まじすげぇす。


記事リストへ