なんかかきたい

プログラミングなどの個人的なメモやサークル「ゆきいろパラソル」の情報を載せてます

FreeDOSのイメージをPXEでブートする

2015年でもDOSを起動しなければならないことがあって、BIOSのアップデートとかBIOSのアップデートとかBIOSのアップデートなんだけど、2015年なのでフロッピードライブとか用意するのは簡単ではないし、何よりアップデート対象のマシンがデータセンターに置かれていたりすると、フロッピーをさすためだけにデータセンターに入館するのは正直しんどい。これはフロッピーがUSBフラッシュメモリーになっていたとしても同じだと思う。辛い。

そこでネットワークブートできないかなと色々試してみたらこれは行けそうみたいな方法を自分なりに確立したのでメモを残しておこうと思います。

技術的な話題が久しぶりな感じですが少々お付き合いください。

基礎知識

PXEについて

FreeDOS

DOSイメージを作成する

FreeDOSツールを使ってブート可能なDOSのイメージを作成します。

以下のDebian wikiを参考にしました。

必要パッケージ

FreeDOS関連ファイル

## 必要なパッケージをインストールする
aptitude install dosfstools nasm unzip
wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/sys/sys-freedos-linux/sys-freedos-linux.zip
unzip sys-freedos-linux.zip
wget http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.0/fdboot.img

## 20Mの空ファイルを作成する(必要なサイズに合わせて用意するとよい)
dd if=/dev/zero of=dos.img bs=1M count=20

## DOSファイルシステムを作る
mkfs.msdos dos.img

## dos.imgはbootableではないのでブートセクターを書き込む
./sys-freedos.pl --disk=dos.img

## FreeDOSからいくつかファイルをコピーするのでマウントする
mkdir /mnt/freedos /mnt/dos_img
sudo mount -o loop fdboot.img /mnt/freedos
sudo mount -o loop dos.img /mnt/dos_img

## COMMAND.COMとKERNEL.SYSをコピーする
sudo cp /mnt/freedos/{command.com,kernel.sys} /mnt/dos_img

## BIOSのアップデート用のファイルなど必要なファイルがあればここでコピーをする
# sudo cp /mnt/freedos/bios_files /mnt/dos_img

## アンマウントする
sudo umount /mnt/freedos
sudo umount /mnt/dos_img

これで、dos.imgはBOOT可能なイメージになる。

PXEからBOOTする

ブート可能なdos.imgが用意できたので、これをPXEでブートすればいい。

ブート用kernelにはsyslinuxのmemdiskを使う。

memdiskを使うとfloppyイメージやisoファイルなどから簡単にブートできる。(今回作ったのはフロッピーイメージ)

memdiskはkernel.orgからダウンロードできる。

syslinux-6.03.tar.gz のようなファイルをダウンロードして展開。 bios/memdisk/memdisk のような場所にファイルがある。

ファイル配置

freedos/
freedos/memdisk
freedos/dos.img

pxelinux.cfg/default の設定例

label freedos
    kernel freedos/memdisk
    append initrd=freedos/dos.img raw noedd

これで起動したら完成なので、あとはよしなに。

終わりに

最後のほうは適当な感じになりましたが、まあこれでデータセンターに行かなくてもよくなりました。

2015年ですが、まだまだDOSが必要な環境もあるのでこの記事が役に立つといいですね。