LinuxOnXl366

2004-02-19 07:49:24 +0900 (1748d); rev 1

digital Alpha XL366 に Linux を入れる

AlphaLinux, AlphaXl366

PC に Linux を入れるなんて記事は今の時代いくらでも転がってるので、 できるだけ Alpha 固有の話を中心に書くことにする。

まずファームウェア。 XL366 は NT 用なので、ARC only マシンである。 NetBSD を入れようと思って買ってきたのに、 入れられないことがわかってがっかりである。 しかし買ってしまったものはしかたないので Linux を入れることにした。 ディストリビューションは Debian。 理由は、Alpha 向けのパッケージが一番多いから。

とりあえず起動しよう。……おかしい。画面が写りませんよ? こないだは写ってたのに。モニタが古いからか? モニタ切替器 通してるからか? それともキーボードに「インターネットボタン」 とかいうウザいのがついてるのがまずかったのだろうか? まずこれを 別のキーボードに換えてみたが、変わらない……。やっぱモニタ まわりだな。切替器を外してみたが、やっぱり映らない。うむむ、 モニタが古いからかなあー。なにしろ 486 時代のブツだし。 しかたがないのでメインマシンのモニタを一時つぶしてつなぎ、 情報収集はノートパソコンでやることにする。これを書くのも たいへんだ。

その後 AlphaStation600 でもモニタが映らない現象に出くわしたので 検索をかけてみた。どうも、Alpha では ARC とモニタの相性がよく ないと画面が映らなくなることがあるようだ。 そういうときはビデオカードを変えるとか、 シリアルコンソールを使うといい。 → SerialConsole

というところで AlphaStation600 を買ってしまったのでとりあえず いまのところそっちばっかし構ってます。XL はいずれまた……。

ブート

2003-03-19 追記

1 年ほど放置して、ようやくインストールする気になったので追記する。

まず、ARC (AlphaBIOS) のマシンでは、 ブートするのに MILO というツールを使う。 ただしこれは単なるブートローダではない。 MILO は Alpha のマイクロコード (PalCode のことか?) を自分で用意していて、 Linux カーネルもこれを使う。 つまり実際に動作するときには「MILO + カーネル」で動く。

だからまず MILO は Alpha のシステムごとに違う。 さらに、カーネルの一部も使うので Linux カーネルのバージョンでもまた違う。 従って Alpha システムとカーネルバージョンの両方に一致する MILO でないと動かない。

XL366 は XLT (XL Tarbo) というタイプなので、まずは XLT 用の、 2.2.19 なりなんなりのバージョンの MILO を用意しなければならない。

それから、MILO は ARC から直接はブートできず、 linload.exe という極小ローダを使ってロードする。 こちらにはバージョン云々はない。 用意されているものを適当に MILO といっしょにコピーすればいい。 たぶん両方入ったイメージが用意されているはずだ。

その他にカーネル本体とルートファイルシステムを用意する。 これをそれぞれフロッピーに焼いて準備 OK。 必要なフロッピーは以下の 3 枚。

それぞれに形式が違うのがややこしい。 カーネルを圧縮した場合は必ずファイル名に .gz を付けなければいけない。

フロッピーを用意したら、フロッピーからブートする環境を整える。 Alpha はパソコンではないので、勝手にフロッピーからブートしたりはしないのだ。 ARC メニューの「OS Setup (だったかな)」を使って臨時のブートエントリを 作らないといけない。ARC のセットアップメニューに入って、 「Boot Path」を A: の \linload.exe、 「OS Path」を Disk 0 Partition 0 の \milo にする。 ただし OS Path のほうのドライブ・パーティションは実は関係ないので何を指定してもよい。

また C:\milo はまだ存在していないので、 ARC がそれを察知して文句を言ってくる。 が、これは無視してよい。

で、MILO のフロッピーでブートしたらフロッピーをカーネルディスクに換えて、 MILO のプロンプトで

MILO> boot fd0:vmlinux.gz root=/dev/fd0 load_ramdisk=1

とする。 この意味は、fd0 (フロッピー) の /vmlinux.gz をカーネルとしてブートする、 ルートファイルシステムは /dev/fd0 から読む、 ramdisk を (フロッピーから読んで) 使う、ということ。 load_ramdisk=1 のときはカーネルを読み終わった後にフロッピーを換える時間をくれる。

問題が起こりそうなのはだいたいここまでだ。カーネルのファイル名が違ってるとか、 .gz が付いてないとか、MILO が止まるとか。 カーネルまでちゃんと動いてしまえばあとはパソコンとほとんど違いがない。

ハードディスクからのブート

前述したように、ARC には「デフォルトのブートデバイス」なんてものは 存在しないので、ハードディスクからブートするにもちゃんと設定しなければ ならない。つまり、フロッピーから読んでいた

をそれぞれハードディスクに配置し、 それを適切な相手に伝えられるようにしなければならない。

まずルートファイルシステムは 普通に Linux をインストールすれば用意されるはずだ。 ルートファイルシステムがあるパーティションを /dev/sda1 としよう。 これは、MILO に教えなければならない。

カーネルの位置もやはり MILO が知っている必要がある。 MILO はこの二つを先程のような boot コマンドの引数から得るが、 いちいち打つのは面倒だ。そこで ARC の「boot option」のところに コマンドを書いておくと自動的にそれを使ってくれるようになっている (SRM で言うと $boot_osflags に相当すると思われる)。 だから先程の MILO プロンプトと同じような内容をそっくりそのまま 「boot option」に書いておけばいい。たとえば

boot sda1:vmlinuz root=/dev/sda1

のように。

一番注意が必要なのは MILO と linload.exe だ。 これを読むのは ARC なので、 FAT ファイルシステムのパーティションに書かないといけない。 必要な大きさは 5MB くらいなので、ARC からごく小さい (物理) パーティションを ディスク末尾のほうに作っておく。ARC に「推奨」とかなんとかの フォーマットをやらせれば勝手にそうなるはずだ。これをパーティション 3 としよう。

それから、Linux の fdisk だと本当の FAT はうまく作れないので、 元々用意されていたはずの MILO のファイルシステムイメージを そっくりそのまま使わなければならない。 MILO のディスクをフロッピーに入れて、

# dd if=/dev/fd0 of=/dev/sda3

とする。 これでフロッピーの中身を完全にそのままハードディスクのパーティションに流しこめる。 これはもちろん、用意した 5MB のパーティションが /dev/sda3 (パーティション 3) の場合である。 イメージを流しこむパーティションを間違えると再インストール直行なので注意すること。

最後に、MILO と linload.exe の位置を ARC に教える。 「Load Path」を Disk 0 Partition 3 の \linload.exe に、 「OS Path」を Disk 0 Partition 3 の \milo にする。 どうも「OS Path」の Partition をうまく選べないことがあるようだが、 Partition 2 とかにしておいても問題はなかった。 どうも、常に linload.exe があるのと同じパーティションから探すようだ。 ただしそんなことを知らない ARC がやっぱり警告してくるので、それは無視する。

以上でインストール及びブートの設定は完了だ。 あとは一般的な Linux の設定と大差ない。

かなりむかついてます。

何がムカつくって、こいつキーボード挿さないと起動しないのね。 正確には、キーボードを抜くとシリアルコンソールになり、 シリアルコンソールだとキーボードから Enter を入れないと ブートしなくなる (ARC からだと自動ブートするくせに!)。 モニタキーボードなしの ssh only で使おうと思ってたのにぶち壊しだ。 これじゃまるでパソコン並じゃん。所詮 NT 機か……けっ。

それから Debian がデフォルトだとシリアルコンソールを上げてくれないこと。 シリアルコンソールで設定しようと思ってたのに、 いつまでたってもプロンプトが上がってこなくてかなり萎え。 しかたがないのでモニタとキーボードをつないで手動で getty を起動した。

追記: これは Debian と言うより Linux の仕様。 キーボードだけではなくビデオカードも抜かないとグラフィックコンソールになる。 あるいは、カーネルに console=ttyS0 というパラメータを渡せば シリアルコンソールを用意してくれる。

SerialConsole 参照


system revision 1.162