Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール
Hello, world! 物語も無事終了したことであるし、しばらく備忘録を兼ねて「Debian インストール」の技術背景を解析しておこうと思う。事の発端は、先日も書いたように Red Hat 9 で稼働中のサーバーシステムを Debian にエイヤッと切り替えてしまいたいことにある。
Debian のインストール本や解説資料は数多いが、このような不埒な行動を起こすためのノウハウは、世界広しと言えどもなかなか見つかりはしない。世の中、そんなものである。道がなければ、自力で切り開くしかないのだ。
ということで、stable 版のレスキューディスク(いわゆるブートディスク)の解析から、順を追って進めていきたいと思う。
Debian stable 版のFDディスクイメージはこちらに用意されている。この中の rescue.bin が目指すブートディスク・イメージファイルである。早速、ダウンロードしてみよう。
/usr/src/debian/fd # wget http://ftp.jp.debian.org/debian/dists/stable/main/disks-i386/current/images-1.44/rescue.bin /usr/src/debian/fd # wc -c rescue.bin 1474560 rescue.bin /usr/src/debian/fd # file rescue.bin rescue.bin: x86 boot sector, system SYSLINUX, FAT (12 bit)
最近の file コマンドは大層賢くなっており、このように rescue.bin が「12bit FAT 型式でフォーマットされた SYSLINUX ブートディスク」であることを教えてくれる。ちなみに、私が使っている file コマンドのバージョンは 3.37 である(Debian では同コマンドは file パッケージに含まれている)。
/usr/src/debian/fd # file -v file-3.37-3.1 magic data from /etc/magic:/usr/share/misc/magic /usr/src/debian/fd # which file /usr/bin/file
確かに、書籍やオンライン上の文書には rescue.bin の入手方法や、レスキューディスクの作り方が懇切丁寧に書かれてはいる。しかし、一歩踏み込んで「rescue.bin の中身はどうなってんのよ?」という問いを発するとどうだろうか?私の経験上、ほとんどの場合は、虚しく自分の問いかけがこだまするだけである。
他力本願では生きてはいけぬ。ここからが、腕の見せ所だ。まずは、rescue.bin の中身を確認してみよう。このためには、Linux お得意の「ループバック型ブロックデバイス」を活用する。make menuconfig 中では、同デバイスを「ループバックデバイス」と呼称しているが、これではユーザーがネットワークデバイスのループバックと混同してしまう恐れがある。よって、私は「ループバック型ブロックデバイス」と記述するようにしている。
/usr/src/debian/fd # mount -o loop rescue.bin /mnt /usr/src/debian/fd # mount ... /usr/src/debian/fd/rescue.bin on /mnt type msdos (rw,loop=/dev/loop1) /usr/src/debian/fd # df /mnt Filesystem 1k-blocks Used Available Use% Mounted on /usr/src/debian/hd-media/initrd 1423 1093 330 77% /mnt /usr/src/debian/fd # ls -l /mnt total 1093 -rwxrwxr-x 1 root root 3952 May 15 2002 config.gz -rwxrwxr-x 1 root root 1139 May 15 2002 debian.txt -rwxrwxr-x 1 root root 804 May 15 2002 f1.txt -rwxrwxr-x 1 root root 763 May 15 2002 f10.txt -rwxrwxr-x 1 root root 752 May 15 2002 f2.txt -rwxrwxr-x 1 root root 1071 May 15 2002 f3.txt -rwxrwxr-x 1 root root 1209 May 15 2002 f4.txt -rwxrwxr-x 1 root root 1214 May 15 2002 f5.txt -rwxrwxr-x 1 root root 1337 May 15 2002 f6.txt -rwxrwxr-x 1 root root 899 May 15 2002 f7.txt -rwxrwxr-x 1 root root 1348 May 15 2002 f8.txt -rwxrwxr-x 1 root root 1269 May 15 2002 f9.txt -rwxrwxr-x 1 root root 1520 May 15 2002 install.sh -r-xr-xr-x 1 root root 7060 May 15 2002 ldlinux.sys -rwxrwxr-x 1 root root 1005181 May 15 2002 linux.bin -rwxrwxr-x 1 root root 650 May 15 2002 rdev.sh -rwxrwxr-x 1 root root 902 May 15 2002 readme.txt -rwxrwxr-x 1 root root 81847 May 15 2002 sys_map.gz -rwxrwxr-x 1 root root 1402 May 15 2002 syslinux.cfg -rwxrwxr-x 1 root root 7 May 15 2002 type.txt
一般ファイルをループバック型ブロックデバイスとしてマウントするためには、-o loop オプションを忘れないように。
マウント結果を見ると、確かに SYSLINUX がインストールされた FAT ディレクトリであることが分かる。本ディレクトリ中、SYSLINUX の本体は ldlinux.sys という名前のファイルである。その詳細については、今月発売の GCC プログラミング工房で解析しているので、興味のある方は参照して欲しい。
Linux 上で SYSLINUX のインストールを行うためには、syslinux /dev/fd0 のように実行するが、ldlinux.sys やブートセクタープログラムは一体どこからやって来るのか?その謎をソースレベルから解析してみた。SYSLINUX の作者である Peter Anvin 氏は、シビレルようなテクニックを使い、このマジックを実現しており、ソースは一見の価値がある。
さて、ズラズラと並ぶファイルの中で、重要なものは数えるほどしかない。それは、linux.bin と syslinux.cfg のふたつである。その他のファイルについても、次回チェックしてみよう。