雑対処法集:ThinkPad X23にDebian GNU/Linuxを入れる

IBMのThinkPad X23 (2662-E3J)にDebian GNU/Linux(woody, 2002年2月20日時点)を入れた時の手順です。

注意!! 以下の記事はあくまで2002年2月20日時点でのものです。 ここで挙げていた問題点は現在では改善されているため、 悪戦苦闘した部分の記述はほとんど参考にはならないでしょう。

目標

Windows XPは残したかったので、

事にした。

C:ドライブを小さくする

まずはWindows XPの領域を小さくして、Debianを入れる余地を作る。 PartitionMagicないしそれに相当するツールが手元になかったので、再インストールする事になる。 どうせ買ったばかりで何の設定もしていないので、心残りはない。

最近のThinkPadでは、WindowsをCD-ROMがなくてもインストールできるよう、 インストールに必要なファイルが全てハードディスクに残っている。これさえあれば再インストールは簡単だ。 というよりも、これを消してしまうと再インストールができない。というのも、Windows XPのCD-ROMはついてこないからだ。 しかし、パーティションを切り直したりして、このリカバリー用ファイルが使えるのだろうか?という不安が残る。

「まぁ何とかなるだろう」と思いこみ、以下の方法でパーティションを切り直した。

まず、Debianのインストール用フロッピィディスクを作る。 カーネルバージョンが2.2のものを使ったインストールディスクだと何故か起動時にこけるので、 2.4を使ったインストールディスク (Debianサイトの /debian/dists/woody/main/disks-i386/current/images-1.44/bf2.4/ 以下にある) を使用する。インストールプログラムがコケるがひとまずこれは無視し、 別のコンソールで cfdisk を起動し、/dev/hda1にNTFSのパーティションを10GB程作った。 ついでにLinux用のパーティションもこの時に設定した。 なお、``Hidden Win95 FAT32''なパーティションが見えるが、ここにXPのリカバリー用ファイルがある。

Windows XPを入れる

再起動後、起動画面でF11を押して、リカバリープログラムを起動した。 なお、リカバリープログラムの存在を認識させるためのディスクというのを、 XPを消す前にThinkPadのマニュアルの手順に従って作っておき、これを使っている。 必要があったかどうかはわからない。

その後、通常の手順に従ってWindows XPのインストールを開始。 これで先程作ったパーティションの中にWindows XPがインストールされる。

Debian GNU/Linuxを入れる

先程作ったDebianのインストールディスクを使い、今度は通常のインストールを行おうとしたのだが、 インストールプログラムがSegmentation faultで落ちてしまう。 とりあえずpotatoのインストールディスクでインストールしようとしたのだが、カーネルバージョンのせいか、 起動途中でこけてしまう。 追記: リリース版のWoodyではインストールプログラムはちゃんと動くようです。 従って以降の作業はすべて必要ない筈です。

さんざん悩んだ挙句、「手動でインストール」する事にした。こっからがイバラ道の始まりだ。

まず、インストールされる筈のファイル群をすべて入手しておく。幸い、 ウルトラベースに別のハードディスク(先日まで使っていた240Xのディスク)をマウントできていたので、 このディスクに baseimages-current/basedebs.tar を落しておく。 次に、再びインストールディスクを用いて起動し、こけたインストールプログラムはkill。

240Xのハードディスクは/dev/hdcで読めるので、これを /mnt にマウントし、読める事を確認しておく。 次に、/target 以下にインストール先のパーティションをマウントして、ファイルシステムを作成する。 /target/basedeb といった適当なディレクトリを掘り、そこにbasedebs.tarの中身を展開する。

さて、こっからが勝負だ。現時点でdpkgコマンドは使えないので、まずはdpkgコマンドが使えるまで、 基本debパッケージを手動で展開する。debパッケージの利点として、 arやtarコマンドで展開できる事を設計者が謳っていたが、今日の今日まで「それがどーした」と思っていました。 いやー、素晴しいです。って、基本イメージがtar.gzだった頃の方が良かったという気もしますが。

という訳で、busyboxにarコマンドが内蔵されている事に感謝しつつ、libcやlibncurses5など、 dpkgが必要としているパッケージを/target以下に展開する。やり方は

$ cd /target/tmp
$ ar x ../basedeb/libc6_2.2.4-7_i386.deb
$ cd ..
$ tar zxf tmp/data.tar.gz

といった感じ。時々dpkgコマンドを試して、まだ足りないパッケージを調べてみては展開していく。 dpkgコマンドを試す場合は、以下のようにする。

$ env LD_LIBRARY_PATH=/target/usr/lib:/target/lib /target/usr/bin/dpkg -i --root=/target

なお、/target/var/lib/dpkg/status といったファイルをでっちあげる必要がある。 隣にDebianマシンを置いて、その status ファイルからlibcやdpkg等の記述を拾い、書き写せば何とかなる。 dpkgが動くようになったら、ar+tarから解放され、dpkgを使ってどんどんパッケージをインストールしていけば良い。 細かいところで手作業が必要になる時があるが、適宜対処されたし。

全てのパッケージを入れ終わったら、次に設定ファイルを作っていく。 まず、/etc/fstab にパーティション情報を反映させる。 あと、timezoneやhostnameも設定しておいた方が良いだろう。これらは隣のDebianマシンを参照する。

ここまで仕上がったら、再起動だ。インストールディスクを使って起動し、 ブート時のオプションに root=/dev/hda?(?は自分の設定を反映させる)を与えてカーネルをブートさせる。 これでうまくいかない場合は、rootディスクで起動して足りない設定を追加していく。

起動がすんなりできるようになれば、後は通常のインストール手順と同じだ。と、そんなに簡単には行かず、 本来ならインストールプログラムが設定してくれている筈の設定ファイルが無いが故に困る点がぽつぽつと出てくるので、 場当たり的に対処する必要がある。普段からDebianを使い慣れていないとこの作業は無理だ。

その他のポイント

デュアルブートについて

Windows XPとDebianのデュアルブートは、GNU GRUBで問題なし。 これはいいわ。

参考までに menu.lst を。kernel-pkgが作ってくれるエントリは使っていません。

timeout 10

default 1

fallback 0

title Windows XP
unhide (hd0,0)
root (hd0,0)
chainloader +1
makeactive

title Linux-2.4.17
root (hd0,4)
kernel /boot/vmlinuz-2.4.17 root=/dev/hda5 video=radeonfb vga=0x315

X Window System

woodyのXは現時点ではXFree86-4.1.0ベースであり、X23のビデオチップATI RADEON Mobilityには対応できていない。 XFree86-4.2.0のソースを別途持ってきてインストールして使っているが、大体はうまく動いてくれている。ただ、TgifやGimpを使っている時に一部描画が怪しい部分があるのだが、原因は特定できていない。 追記: XFree86-4.3.0でこの問題は修正された。

音周り

カーネル付属のサウンドドライバ(Intel ICH audio)を試したところ、サスペンドの後に復帰するとおかしくなる。

ALSAは0.9.0beta11を試したが、insmodを二回行わないと動かないのと、 サスペンドからの復帰時にミュートの設定がおかしくなる以外は今のところ順調。 追記: Alsa-0.9.1では問題ない。しかし、復帰時のミュートの再設定は必要。

内蔵有線LAN

インテルからe100のドライバを落してきてインストール。カーネル付属のeepro100でも動くようだ。

内蔵無線LAN

linux-wlanのlinux-wlan-ngを試してはみたものの、 ネットワーク機器として動作させるところまでは行かなかったので、とりあえず放置。 追記: カーネル付属のorinoco_pciドライバで問題なく動作するようになった。

ウルトラベース

以下の記述は、hotswap コマンドを知らなかった頃のものです。 今では普通に hotswap コマンドを使う事で呆気なくドライブを認識する事ができるようになりました。 加えて、最近の2.4系列のカーネルでは、一部のIDE関連のドライバをモジュール化する事ができません。もしかしたら他の役に立つ事があるかもしれないので一応文章は残しておきますが、現時点では参考にならない事をご承知おきください。(2003/12/27追記)

いわゆる「ドッキングステーション」。hotplug(電源を入れた状態でのドッキング)では問題があるが、 warmplug(サスペンド状態でのドッキング)ならOK。

が、ディスクが認識できなければ何の意味もない。普通IDE機器はカーネル起動時に走査するので、 warmplugしたところで、追加のドライブが見える訳ではない。2.4系カーネルでは、 IDEドライバをモジュールにするしか対処法はない。しかしモジュール化すると、 通常の手順では起動時にルートパーティションを見付ける事ができない。ここはinitrdを使う必要がある。 ide-mod.o, ide-probe-mod.o 等をモジュールにして、起動できるようになればOK。

ドッキングの手順は、まず本体をapm -sでサスペンドさせ、ドッキングさせる。 その後レジュームしたら、

modprobe -r ide-probe-mod; modprobe ide-probe-mod

とすると、/dev/hdc を認識してくれる筈。こうする事で使えるようになる。

便利のために、/etc/apm/resume.d に以下の内容のスクリプトを置いおくとよい。

#!/bin/sh
/sbin/modprobe -r ide-probe-mod
/sbin/modprobe ide-probe-mod