Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール
それでは、前回の続きから始めよう。まず、ダウンロードした rescue.bin FDイメージファイルの中身を再確認。
/usr/src/debian/fd # mount -o loop rescue.bin /mnt /usr/src/debian/fd # ls -F /mnt config.gz* f2.txt* f6.txt* install.sh* readme.txt* debian.txt* f3.txt* f7.txt* ldlinux.sys* sys_map.gz* f1.txt* f4.txt* f8.txt* linux.bin* syslinux.cfg* f10.txt* f5.txt* f9.txt* rdev.sh* type.txt*
既に説明した通り、この中で大切なファイルは SYSLINUX 本体(ldlinux.sys)、SYSLINUX 設定ファイル(syslinux.cfg)、そして Linux カーネルイメージ(linux.bin)の3つである。他のファイルにほとんど意味はないが、type.txt だけは、インストール後半でカーネルイメージをルートファイルシステムにダウンロードする際に必要となる。その中身はいたって簡単であり、"rescue" というサインが書かれているだけである。
/usr/src/debian/fd # hexdump -C /mnt/type.txt 00000000 72 65 73 63 75 65 0a |rescue.| 00000007
インストーラーは、レスキューディスクを挿入するようユーザーに指示し、type.txt ファイルの中身をチェックした後に、linux.bin を読み込むため、rescue.bin においては本ファイルの存在が重要なのである。
添付されている linux.bin カーネルイメージのビルドオプションは zcat /mnt/config.gz を実行することで確認することができる。
rescue.bin において、最も注目すべきは、syslinux.cfg である。その中身は、次のようになっている。
FONT font.psf # see /usr/doc/syslinux/syslinux.doc.gz for file format description DEFAULT linux.bin APPEND vga=normal noinitrd load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=16384 root=/dev/fd0 disksize=1.44 TIMEOUT 0 DISPLAY debian.txt PROMPT 1 F1 f1.txt F2 f2.txt F3 f3.txt F4 f4.txt F5 f5.txt F6 f6.txt F7 f7.txt F8 f8.txt F9 f9.txt F0 f10.txt LABEL linux KERNEL linux.bin APPEND vga=normal noinitrd load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=16384 root=/dev/fd0 disksize=1.44 LABEL initrd KERNEL linux.bin APPEND vga=normal noinitrd load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=16384 root=/dev/fd0 disksize=1.44 LABEL ramdisk KERNEL linux.bin APPEND vga=normal noinitrd load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=16384 root=/dev/fd0 disksize=1.44 LABEL ramdisk0 KERNEL linux.bin APPEND vga=normal noinitrd load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=16384 root=/dev/fd0 disksize=1.44 LABEL ramdisk1 KERNEL linux.bin APPEND vga=normal noinitrd load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=16384 root=/dev/fd1 disksize=1.44 LABEL floppy KERNEL linux.bin APPEND vga=normal noinitrd root=/dev/fd0 disksize=1.44 LABEL floppy0 KERNEL linux.bin APPEND vga=normal noinitrd root=/dev/fd0 disksize=1.44 LABEL floppy1 KERNEL linux.bin APPEND vga=normal noinitrd root=/dev/fd1 disksize=1.44 LABEL rescue KERNEL linux.bin APPEND vga=normal noinitrd
例によって枝葉が私達の視界を邪魔している。余分な枝はバッサリ切り落とし、エッセンスをまとめると次のようになる(SYSLINUX コマンドについては、こちらを参照)。
DEFAULT linux.bin APPEND load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=16384 root=/dev/fd0
簡単ではないか。具体的には、
を意味している。
このあたりについては、Interface 2002年7月号特集 "Linux徹底詳解" や Embedded UNIX "Linux システム縮小化計画" において、詳しく解説しているので、興味のある方は参照してほしい。
これだけでは、全く面白くないので、Debian rescue.bin を Linux kernel 2.6 版に改造してしまおう。ちなみに、この改造により、最終インストールまで到達できるかどうかは、「神のみぞ知る」である。白状すると、私自身未体験ゾーンなのである。よい子は、くれぐれも真似をしないように。
それでは、SYSLINUX 起動ディスクを手作りするところから、始めよう。何事も、他人のお下がりではなく、自らの手を動かすことが大切だ。最初は、ブランクFDイメージを作成する。
/usr/src/debian/fd # dd if=/dev/zero of=fd.img bs=512 count=2880 2880+0 records in 2880+0 records out /usr/src/debian/fd # wc -c fd.img 1474560 fd.img
毎度お馴染みの dd コマンドを用いる。UNIX に初めて触れたとき、「なんやねん、これ?」という強烈な印象をもったコマンドが、この dd である。DOS の世界しか知らなかった当時の私には、しばらくこのコマンドが意味するところが理解できなかったのだが、今は一番のお気に入りと化している。
ブランクFDイメージが出来たところで、SYSLINUX をインストールするが、その前にFDイメージに対して昔懐かしの「format」を実行しておく必要がある。
Linux 上で、DOS format を実行するためには、2つの方法がある。ひとつは、mkdosfs コマンドを用いる場合(dosfstools パッケージ)、もうひとつはMTOOLS パッケージ中の mformat コマンドを用いる場合である。一般的には、後者が好んで使われているようだ。
ただし、MTOOLS コマンド群に対して、このようなファイルイメージを操作対象に指定する場合は、ちょっとしたテクニックが必要となる。具体的な方法は、4月号の GCC プログラミング工房中で述べているが、結果だけを紹介すると /usr/local/etc/mtools.conf (MTOOLS の設定ファイル)に次のような内容を用意する。
drive l: file="fd.img" cylinders=80 heads=2 sectors=18 filter
これで、MTOOLS コマンド群に、l: ドライブ(Loop の頭文字とした)を指定できるようになる。早速、その効果を体験してみよう(以下、MTOOLS がインストールされている必要がある)。
/usr/src/debian/fd # mformat -v rescue.bin l: /usr/src/debian/fd # mdir l: Volume in drive L is rescue.bin (abbr=RESCUE~BIN ) Volume Serial Number is 048C-DD87 Directory for L:/ No files 1 457 664 bytes free
まず最初に mformat コマンドで、FAT 型式の mkfs (いわゆる DOS フォーマット)を行う。-v はボリューム名を指定するためのオプションだが、mdir コマンドで確認すると、確かに RESCUE.BIN というボリューム名が付いている。
それでは、SYSLINUX を fd.img 上にインストールしてみよう。SYSLINUX もほとんどのディストリビューションにおいて、あらかじめインストールされていると思うが、見当たらない場合はソースターボールに同梱されている実行可能ファイル syslinux を使うと良いだろう(興味があれば、今月の記事をナビゲーター役として、是非そのソースリスト syslinux.c に挑戦してみて欲しい)。
/usr/src/debian/fd # syslinux fd.img /usr/src/debian/fd # mdir l: Volume in drive L is rescue.bin (abbr=RESCUE~BIN ) Volume Serial Number is 048C-DD87 Directory for L:/ ldlinux sys 8104 2004-03-03 23:28 ldlinux.sys 1 file 8 104 bytes 1 449 472 bytes free
ブランクFDイメージに SYSLINUX 本体である、ldlinux.sys が転送されていることが分かる。この時点で、dd if=fd.img of=/dev/fd0 を実行すれば、SYSLINUX 起動ディスクの一丁上がりである。