やっぱりDebian GNU/Linux sid (unstable)はリスキーだった

http://d.hatena.ne.jp/Ubuntu/20081204に触発されてしばらくsidを使っていたのだが、地雷を踏んでしまった。
sidに上げてからX Window Systemが頻繁にクラッシュするようになり、にっちもさっちもいかなくなってしまった。クラッシュに怯えながら使うのは精神衛生上よくない。 どうしてもエンバグする可能性はある、とくに巨大なソフトウェアでは。
なんといっても一番困ったのは、以前の時点に戻す機能がなかったことだ。もしDebianパッケージレベルのバージョン管理システムさえあれば、バグを踏んでしまったら、以前のバージョンに戻せばいいことである。この機能がない時点で、sidは常用できない。dpkgでcacheから戻せないことはないが、依存関係は解決してくれない。

そこで、数日前からstable(lenny)に戻すことにした。戻す方法はapt-pinning機能を使って 「sudo apt-get -t lenny dist-upgrade」 でダウングレードすればいいのだが、これがまた苦労をした。sidとlennyではパッケージ構成が異なるため、他のパッケージにあるファイルを上書きしようとしたらエラーがでてしまう。そのたびに「sudo dpkg -i --force-overwrite hoge.deb」で無理矢理戻して、「sudo apt-get -f install」する羽目に。
この作業でほぼstableに戻せたら、「apt-show-versions -a|grep /unstable」で残ったunstabeなパッケージを調べ、stableに戻した。ダウングレードだけで丸一日時間を無駄にした。

apt-pinning機能とは、 /etc/apt/preferencesを指定して、どのパッケージがどの版を使うかを決定する機能。特定のパッケージのバージョンを固定することもできる。現在の俺設定。これでunstableなパッケージはupgrade対象から外れる。以前はapt-pinningを使わずにsidからパッケージを借りてきたため、いろいろなパッケージがsidに汚染されてきたが、apt-pinningがあれば汚染は最小限で済む。現時点ではemacs22関係、youtube-dl、dbskkd-cdb、flashplugin-nonfreeだけ。

Package: *
Pin: release o=Unofficial Multimedia Packages
Pin-Priority: 450

Package: *
Pin: release a=stable
Pin-Priority: 1000

Package: *
Pin: release a=lenny
Pin-Priority: 1000

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

Package: *
Pin: release a=sid
Pin-Priority: 50

最新パッケージを使いたい要求は俺にもあるが、apt-pinningで適宜sidから借りてくるなり、リポジトリから/usr/localにインストールすればいいかと。最も気になるソフトウェアはcvs/svn/gitリポジトリからとってくるよね。「sudo apt-get -t unstable hoge」などと明示的にインストールすればsidからパッケージを借りてこれる。

やっぱり「不安定版」は「not 『安定版』」ではなくて「『不安定』版」なんだと思い知った。デスクトップや開発マシンだからこそ安定版を使うべきなんだなと感じた。セキュリティサポートがあるから安心できる。testingにも非公式ながらもセキュリティサポートがあるらしいけど、sidから機械的に取り込まれるらしく、依存関係か崩れやすいとのこと。他のソフトウェアが安定しているからこそ安心して作業ができる。sidからlennyに戻したきっかけは、動いていて当たり前のソフトウェアであるX Window Systemがおかしかったからなんだし。「動いていて当たり前のソフトウェアのバグに付き合わされるコスト>>(超えられない壁)>>安定版のパッケージが古いために起こる問題」だろう。

現時点ではlennyに戻してトラブルには遭遇していない。X Window Systemも全然クラッシュしない。安定版 + apt-pinning万歳〜!

追記

数日前から http://snapshot.debian.net/ より xserver-xorg-video-intel 2:2.1.1-4 を取ってきて使っている。lenny版だとこのパッケージ、エンバグされているようなので。バージョン2.1に戻すとバグらないという情報があった。現に戻してからバグらなくなった。