install Debian on thinkpad X200


netboot

今回も netboot でインストール。そのまえに、knoppix についてる gpartd でヰンドウヅのパーティションを詰めた。 knppix ではパーティションは作らずに、領域を詰めるだけにしてパーティションの追加はインストール時にやった。

netboot を提供するのは、X60 である。 dhcpd と tfptd をインストールし、 dhcp の返事のなかのオプションにブートイメージのファイル名を含めて tftpd が公開するディレクトリに、ブートイメージを置いて、 inetd.conf を編集して tftpd が起動するようにしたら、 家庭内LANのルータで動いているDHCPサーバを停止してから inetd を再起動。

なお、 netboot に使えるインタフェースは普通は有線LANに限定されるようで、 netboot でインストールする場合も LANケーブルは必要。

ところで boot image を保持し、 dhcpd が動作するホスト(Debian etch)は 接続が wireless なので、 dhcpd に wlan を見ていてもらう必要がある。 これは dhcpd の起動時に引数として wireless の interface 名を与えたり、 設定ファイルに INTERFACES="wlan0" などと指定すると可能になる(takuo 様情報)。

aptitude upgrade

あとは普通にインストールが進む。 最初にインストールされたカーネルでは内蔵無線LANが動かなかった。 いまやうちでは無線LANは必須なので、まずこれから解決する。 /lib/firmware/ に http://intellinuxwireless.org/?n=downloads から取得した firmware をインストールしてから apt-line に unstable を追加して /etc/apt/preferences に

Package: *
     Pin: release a=testing
     Pin-Priority: 700

Package: *
	Pin: release a=unstable
	Pin-Priority: 600

こう書いて aptitude update; してからそのとき入手可能だった 一番新しいカーネルイメージ linux-image-2.6.32 をインストールしたら きちんと動いた。

一度 NetworkManager から wlan その他全部のインタフェースが消滅したが、 これは /etc/NetworkManager/nm-system-settings.conf に managed=false になっていたのを true に書き換えて 再起動したら直った。

ホスト名は dedepo (ででぽ)である。ちなみにまえは tern (アジサシ)

browser

メールや個人の設定ファイルをまえのマシンから移動し、 次はブラウザの移行である。 X60は firefox 3.0 だが新しいホストは 3.5.x である。 最初は bookmark と password のデータだけ移行すりゃいいや、と思ったが まぁものはためしということで .mozilla をまとめてもって来てみた。 あっさり正常に引っ越しは完了した。 いろいろと導入していた extension (というのでしょうか)も 最新に更新され、 twitter などのサービスの専用クライアントも RT とかそういう機能が 使えるようになっていた。

bogofilter

さて、メールはどうするか、というところだが、 なんせインターネットにメールアドレスを晒して10年以上もたつと、 シグナル/ノイズ比が非常に低くなるのはしょうがない。

日本語をフィルタの入力として使う場合は、わかちで分割する必要があるが、 これがどうも euc でしかうまく動かないようなので、 今回もここだけは全部文字コードを euc にして対応。

spam 25772 通と普通のメール83000通で教育して テスト集合に対し識別チェックを行った。 とりあえず結果は良好。 誤検知分は修正学習をかけた。

emacs

ディスクもはげしく余っていることだし、 gnu-emacs の 23.x と xemacs21 を 両方いれることにした。 デフォルトでは input method が標準で提供されているやつを 使うのだが、 これが emacs のコマンド入力をとってしまい、 いちいち input method を切替えて直接入力にしないと コマンドが入力できず使いづらい。 これは emacs 23 で native な input method を使うことで解決できる。

aptitude install egg

してから emacs で

(set-input-method 'japanese-egg-anthy)

すればいい。(もしくは .eamcs に書いておく)。 この項、 Twitter で HHANZUBoN 氏にお世話になりました。

emacs のバッファに含まれる url 文字列などをクリックすると、 プロセス間通信でブラウザにその url が送られて閲覧できる、 という機能が一部のプログラムで利用できるが、 以前 riece という IRCクライアントで動いていたそれが、 今回動かなくなってしまった。

クリックすると browse-url-default-browser という関数が url 文字列を引数によばれている。 この関数から外部プロセスを起動し、そのプロセスが url を ブラウザに送信しているようだ。が、それが動いていない。 この関数の中身は symbol-function で見れるが、 compile されているので実際の挙動はよくわからない。 これはソースを見ないとしょうがない。

`browse-url-default-browser' is a compiled Lisp function
  -- loaded from "browse-url"

browse-url.elc に載っている関数である。 このファイルをもっているパッケージは

yuji@dedepo:~%dpkg -S browse-url.elc
xemacs21-basesupport: /usr/share/xemacs21/xemacs-packages/lisp/mail-lib/browse-url.elc

xemacs21-basesupport である。このパッケージのソース版 xemacs21-basesupport-el というものがあるので、それをインストール。関数定義をみると、 gnome とかで「デフォルトのブラウザ」に文字列を送るコマンド xdg-open を exec-path から探して、それに url 文字列を引数として start-process している。 これが動いてない。

ちゃんと exec-path に xdg-open はあるし(無ければ代替の ブラウザを探すようになっている) シェルコマンドで start-process で 実行されるものを叩くと動くのに、 これが emacs lisp から起動した時だけ動かないのである。 こういう事はサンプルコードを *scratch* バッファで書いて確認する。 なお、起動するコマンドを xdg-open ではなく mozilla とかにすると emacs からでも動く。

そこで、ちょっとキタナイけど、 変数 browse-url-default-xdg-browserw の値を xdg-open ではなく mozilla に変更しといた。 以下をカスタム変数を初期化する emacs の設定ファイル中に記述したのだ。

(defcustom browse-url-xdg-open-program "mozilla"
  "*The name by which to invoke xdg-open."
  :type 'string
  :group 'browse-url)
  

これでは gnome がわでデフォルトのブラウザを 変更したときにそれが反映されないという問題がある。 xdg-settings get default-web-browser というコマンドを実行して ブラウザ名を取得して、それを browse-url-xdg-open-program の値にセットする事もできるが、 ブラウザなんかそう変更するものでもないし、 とりあえずこれで動くので何かあったらあとで直すことにしよう。

ところで emacs といえば私にとってメールでもある。 一行以上の文章を emacs 以外で書く事は lambda 教の戎律では例外と定められている。 from の値で勝手にフォルダを際限なく作る mew の仕様に へき易していた私は、 wanderlust というのを試してみた。 しかし、使い方が全く理解できなかった。 過去のメールを見る事もできなかった。 きっと私がアホなのであろう。

しょうがない、また mewでも使うか、と思ったが、 mew の新しい版は xemacs では動かず、かといって 古い版(imとか使う10年くらいまえの凄い遅いやつ)も impath というのが無いので動かないのだが、どっちみち あれは遅いので絶対使いたくない。

さて、ここで進退きわまった。

sylpheed

なかのさんに irc できいたら「ここは sylpheed じゃないか」という。

ちょっと調べてみると、どうも外部コマンドを spam filter として使えるらしい。 コマンドの exit status を使って振り分ける方式。 これは今まで使っていたのと全く同じインタフェースなので、 すんなり移行できそうだ。 もうメールの読み書きは emacs を捨ててこっちに乗り換える事にした。 なんせ、何もせんでもインストール直後から ~/Mail 以下が普通に見えるのはありがたい。

コマンドの指定には %f とかでファイル名が入ったりするとかなんとか ドキュメントにあるので半日ほど混乱したが、 どうも何も指定せんでもコマンドの引数として メールのファイル名が渡されるらしく、 単にコマンド名を書くだけで希望の動作をさせることができた。

今回の spam filtering はMUAやMTAとのインタフェースが 変更されただけで、処理内容としては基本的に 以前のこの記事と同じだ。

メールのテキスト化がひとつのキモなので、そのためのスクリプトを あらためて公開しておきます。 仕様は、

というものです。

この出力をわかち書きプログラムに入力し、その結果を bayesian filter が 学習や判断に利用します。 フィルタはもとより、 文字コードやわかちがきはいろんなやりかた、意見があると思うので、 すきなものを標準入出力を使って組み合わせて使ってください。

ところで、以下 bogoutil -d の出力です。

head:href 5255 81 20100420
href 12525 315 20100423

ヘッダに href が出て来るメールのうちまともなもの 81通 ダメなもの 5255通。 本文に href が出て来るメールのうちダメなもの 1255 通 まともなもの 315通ですな。 このように html タグは spam とそうでないものの識別として役立つという事が判ると思います。 これが、私が html タグを残して spam 判定する理由です。

imap4 でメールを見るのが使い方がよくわからなかったので、 もう面倒だからここは一旦 fetchmail でローカルにとってきて、 それを sylpheed で inc することにした。

なお、 fetchmail はリモートからローカルにメールデータをもってくる事だけに 限定した機能をもっており、これをローカルユーザの inbox なり spool なりに 積むのは MDA すなわち Mail Delivery Agent (もしくはその機能をもっているMTA) にやってもらう、 という非常に unix 的な設計だ。 最初は、設定が面倒だったので Debian に標準でついている exim にこれをやってもらっていた。 つまり、 localhostの SMTP ポートに fetchmail がリモートから もってきたデータをローカルユーザに向けて流していた。

しかし、データが多い時は MTA の queue に一旦たまってから 配送されたりする。このような機能は無論メールサーバにおいては必須だが、 いまの、ラップトップにおいては不要なトラブルの元だ。 そこで、 maildrop という MDA 専門のプログラムにこれをやらせることにした。

このように、メールシステム全体をかなり見直したので、 移行は非常に大変だった。 現時点でのフィルタの性能には非常に満足している。 false negative は一日1通程度。 false positive は無し。signal/noise 値は 1/20 くらい。

wine

自由でオープンな Windows API 実装。

最近、仕事で時々ヰンドウヅ(で動くもの)を使うので、そのための環境をどうすべきか、 いろいろ考えていたのだが、とりあえず調べた範囲では、 必要になるツールがこれで動くらしい、という事だったので、 インストールしてみた。 いや、ヰンドウヅでないといけないものなんて、 そうそう無いのは判っているのですが、 そうはいっても、絶無というわけじゃないんですよ。

aptitude install wine wine-doc

これで必要なものは大概インストールされる。 あとは windows なバイナリファイル hoge,exe を実行するのに

wine hoge.exe

で終了である。 たとえば、ヰンドウヅ世界でコンパイルされた製品をインストールするのに、 setup.exe なんてものを実行したりしますが、それをそのままやればいい。 ヰンドウヅの C: は ~/wine/drive_c/ に割りあたる。 つまり大抵の場合は、 ~/.wine/drive_c/Programx Files/ 以下にいろんなものがインストールされる。 それどころか、 Debian の Free Desktop 実装(gnome など)を使っていれば、 メニューなんかもインストール時に勝手に更新されるのである。

そのままだと足りない DLL ファイルに関する問題は、 若干法的にアレな気もするのでここでは書きませんが、 普通に検索すれば記事がいくらでも出て来ますし、 比較的容易に回避可能です。 私はヰンドウヅ世界には全く疎いのですが、それでも余裕です。 この記事の読者のほうが多分、私よりもヰンドウヅに詳しいと思います。

使いたかった某金融系のツールは 若干不安定だが一応ちゃんと動いた。 なお、ボタンとか表示領域などの widget は Gtk である。 うっひょー。まじで?これどういう魔法?

結論

X200 は久しぶりにまじめに考えて買ったパソコンだが、 こいつは気に入ったぞ。 軽いし速いし筐体の剛性も高い。 なんとなく頑丈そうだ。

それで、このマシンを買って初めて気づいたんだけど、 ノートパソコンってけっこうあたりハズレがあるものみたいだな。 じつは、まえ使っていた X60 はよく熱暴走した。 とくに何もしなくても起動しただけで、CPUの温度が50度とかあって、 ちょっとした計算をまわすとすぐ70度を越える。 暇だからその間動画なんかを見ると80度を越え、 何かの拍子におちる。

あとでみると128度になったから終了します、みたいなメッセージが syslog に残っていて、べつに本当に CPU が熱で止まったわけでは ないらしいが、それなりの時間をかけた計算結果が失われるのは ムカつくものだ。 でも、それしか知らなければ、 まぁそんなもんだろ、と思っていたんだが、 そんなことないのな。

今のX200は何をしても50度なんて滅多に届かない。 CPU もそれなりに速いし、これならけっこう計算まわしても大丈夫そうだ。 これが一番嬉しい。


記事リストへ