gfxbootで日本語表示可能なブートローダを作成しようとする
GParted Live CD をWindows Vista上でUSBメモリにインストールしようとしたらUAEの仕様がアレでハマる。
GParted Live CDのUSBメモリ用配布アーカイブにはWindows用のISOLINUXインストーラが付属していて、USBメモリにファイル一式をコピー→バッチファイル実行でブータブルUSBメモリができあがるはずなのだが、VistaだとUSBメモリのブートローダ領域への書き込みには管理者権限がいるそうだ。そりゃそうだ。しかし、かといってバッチファイルを「管理者として実行」するとエラー。なぜかバッチファイルを「管理者として実行」すると、system32ディレクトリがカレントディレクトリになるのが原因。なんじゃそりゃ。
しょうがないのでバッチファイルをいじくってたらつい日本語化してしまい、ついでにじゃぁほかの部分も日本語化するか、どうせ設定ファイルいくつか書き換えればできるだろと手をつけたのがハマり始まり。そんな簡単なモンじゃなかった。
Ubuntuのインストーラとかはブート時にブートメニューが日本語で表示されるんだけど、これはgfxbootというものを使っているらしい。gfxbootはSYSLINUX/ISOLINUX/GRUBなどで利用できるプログラムで、それぞれパッチが当てられたSYSLINUX/ISOLINUX/GRUBが必要。原理としてはSYSLINUX/ISOLINUX/GRUBがgfxbootのランタイム(gfxmenu)を起動→gfxmenuがメニュースクリプトを実行、という感じ。このメニュースクリプトは独自言語で記述しておいて、あらかじめバイトコンパイルして1ファイルにまとめた上でブートローダと一緒に置いておくのだが、この独自言語がスタック志向の非常に面倒臭い言語で困る。プログラム中でメモリを動的に割り当てられたり、ファイルのリードもできるのだが、完全に独自仕様(しいて言えばPostScriptに似ているらしい)。
gfxbootを使っているUbuntuやopenSUSEのブートローダは、基本的にはスクリプト部分は手を加えずに設定ファイルで画像なりメニュー項目をいじれるようになっているんだが、さすがにGParted Live CDを起動したらUbuntuのメニューが、というのはダサいのでざくっと手をいれてみようとしたが2時間くらい格闘して一時中断。これは週末に持ち越しだな。
ちなみに gfxboot reference と Gfxboot – openSUSE あたりが参考資料。日本語の情報はほぼ皆無(笑)。