VIA C3 SamuelのマシンにCentOSをインストールする試み

Debianに嫌気がさしてきたというか、カーネルアップデートを行ったところ、ネットに繋がらなくなってしまい、さらに、なぜか、grubで古いカーネルを選択してもネットワークに繋がらなくなると言う憂き目に遭った。

という理由はさておき、会社でCentOSをばんばん使っているせいか、最近、DebianよりもCentOSの方が魅力的になってきたような気がするので(yumが劇遅なことはこの際、無視)、CentOS 4.4をインストールしてみようと思ったのですが、VIA C3 Samuelなマシンは、i686互換ではないので、デフォルトのCentOSのインストーラではインストールできないというか、Anacondaがマシンをリセットしてしまうという状況。

仕方がないので、久しぶりにisolinuxなんぞと格闘してみることに。

mkisofs

僕は、Windowsユーザーなので、あえて、茨の道を歩むことにして、Win32版のmkisofsを探す旅に。そうしたところ、Win32 版 MKISOFS 2.xというところで、バイナリを発見。本当は、cygwinでcdrtoolsをビルドすればいいのだろうけど、個人的に、数年前にcygwinとお別れしたので、あえて、軟派にバイナリで良いことにする。ちなみに、このページには、cygwin1.dllに依存しないmingw版のバイナリへのリンクもある。

ISOイメージの作成

まずは、CD/DVDにすべきファイル群を揃える。これをどこか適当な場所に置く。僕の場合は、CentOS 4.4をIIJから取ってくることにしたので、http://ftp.iij.ad.jp/pub/linux/centos/4.4/os/i386/isolinux/下のファイルを取ってきて、同じディレクトリにまとめる。
ただし、今回は、i586の起動ディスクを作成することがメインなので、それに必要なファイル以外は敢えて取ってこない。そうすると、本当に必要そうなのは、

程度か。splash.lssは本当に必要かどうかは不明。なくてもスプラッシュスクリーンが出ないだけのはなし。*.msg系は、必要なら使えば良いし、要らないと思うなら、なくても大丈夫だと思われる。で、ファイルを取捨選択したので、isolinux.cfgはカスタマイズが必要。

default i586
prompt 1
timeout 600
label i586 
  kernel vmlzi586
  append initrd=initi586.img ramdisk_size=8192

ここまですると、起動時には、

ISOLINUX 2.11 2004-08-16 Copyright (C) 1994-2004 H. Peter Anvin
boot: _

としか出なくなって、既にCentOS 4.4であることが分からなくなるけど、機能上は特に問題ない。
と前置きはここまで。mkisofsを使って、ISOイメージを作成してみる。下のコマンドラインは、centos_filesというサブディレクトリの中に上記のファイル群を配置した場合のものなので、そこは適宜読み替えてください。

C:\somewhere>mkisofs.exe -no-emul-boot -boot-load-size 4 -o image.iso -b isolinux.bin -c boot.cat centos_files

ちなみに、-b(起動用プログラム)に指定しているisolinux.binや-c(起動カタログ)のboot.catの指定は、centos_filesディレクトリからの相対パス。また、CentOS5では、ブートカタログのファイルが配布されていない。この場合、

C:\somewhere>mkisofs.exe -no-emul-boot -boot-load-size 4 -o image.iso -b isolinux.bin -boot-info-table centos_files

とすれば良い。

そうすると、次のような表示がされる。

Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 0
Total directory bytes: 570
Path table size(bytes): 10
Max brk space used 4000
2667 extents written (5 MB)

そして、image.isoが出来ているはず。このimage.isoが正しく機能するかどうかについては、VMwareやVirtualPCで検証すればいい。
実マシン用には、このISOファイルを適当なソフトで焼く。個人的には、ImgBurnがお勧め。

インストール

さてさて、ここで起動ディスクを使って、実マシンでのインストールを開始します。
さっきも書きましたが、起動直後は、

ISOLINUX 2.11 2004-08-16 Copyright (C) 1994-2004 H. Peter Anvin
boot: _

というそっけない画面が出ますが、何も気にせず、[Enter]を押してください。
そうすると、最初の画面は、言語の選択です。英語で良いのならそのまま。日本語とかを選びたければどうぞ。

f:id:espresso3389:20070327040512j:image

次にキーボード配列。これもお好きにどうぞ。

f:id:espresso3389:20070327040551j:image

そうすると、インストール元のメディアの選択に。さっき焼いたCD以外にも既にCentOS 4.4のCD/DVDがあるならそれを選んでも結構ですが、FTPやHTTPを選択すると、メディアなしで、ネットワークインストールできます。

f:id:espresso3389:20070327040605j:image

とりあえず、インストール中はDHCPでIPを取得するので良ければ、このままで。

f:id:espresso3389:20070327040627j:image

で、次の画面では、ダウンロード元のURLを指定します。今回は、これもIIJを選択しました。

Web site name: ftp.iij.ad.jp
CentOS-4 i386 directory: /pub/linux/centos/4.4/os/i386

f:id:espresso3389:20070327040705j:image

ここまでやると、めでたく、anacondaが起動してくれます。後はいつも通り。ご自由にどうぞ。

USBメモリ

せっかくなので、USBメモリの場合についても言及しておきます。と、その前に、前のファイル群について説明しておいた方が混乱がないので、説明しておきます。

  • isolinux.bin ISOLINUXというCD/DVD用の汎用ブートローダ。名前に反して、LINUXじゃなくともブートできる。
  • boot.cat ブートカタログといわれる物。おそらく、ISOLINUXのいろいろなオフセットとかが記録されているんじゃないのか。詳しくは知りません。一応、CD/DVDの場合には必須です。
  • vmlzi586 いわゆるカーネルと言われているもの。Linuxの本体とも言えるでしょう。インストーラの場合は、インストーラ専用にカスタマイズされたカーネル。普通は、vmlinuzという名前で、さらに最後のzは一般的に圧縮されたイメージであることを示す。
  • initi586.img 一般的にinitrdと言われるもの。カーネルが起動するときに、初期RAMディスク(/にマウントされる)として利用されるファイル群を圧縮した物。展開すれば、ファイルシステムのイメージになる。

USBメモリに展開する場合には、ISOLINUXではなく、SYSLINUXというものを使う。そのため、基本的には、上記のうち、isolinux.binとboot.catは必要なくなる。

SYSLINUX

SYSLINUXは、フロッピーやUSBメモリからの起動時に使うもの。プロジェクト概要によれば、ISOLINUXもこのプロジェクトの一部らしい。

プロジェクトのページからたどれるリンクからダウンロードすると、Windows用のバイナリもwin32/の下に同梱されている。基本的には、システム転送ツールなので、FATやFAT32でフォーマットされたメディアに対して、MS-DOSのsysコマンドの様に適用するだけ。USBメモリの場合でも同じ。MBRの設定や、パーティションのアクティブ化も同時にした方が手っ取り早いので、普通の使い方だと、

syslinux -ma F:

のようになる。ここで、F:は、USBメモリのドライブレター。
そうしたら、あとは、起動に必要なファイル群をコピーするだけ。vmlzi586とiniti586.imgをコピーする。そして、isolinux.cfgをsyslinux.cfgと名前を変えてコピーする。文法はisolinux/syslinuxで同じ。

たったこれだけで、USBメモリからLinuxのインストーラが起動するようになる。問題は、フォーマットの仕方や、パーティションの設定によってはうまく起動しないことがあること。誰がどうやってフォーマットしたか分からないディスクの場合にはパーティションの切り直しから行った方が良いかもしれない。