liloの起動画像変更について

先日、liloの起動画像変更について説明する機会があったのですが、確認のため軽く検索してみたところ新しいヴァージョンの変更法について書いてある日本語 のページが見当たりません(以前のliloはpcxの画像を使っていましたが、最近のlilo(22.6)は、pcx形式ではなくなっています)。という わけで僭越ながら私が書いてみたいと思います。

さて、起動画像の変更自体はさほど難しいことではなく、さしておもしろみのあるものでもないので、ここでは 酔狂として起動画像変更を何度も手早く実行する実験環境の構築を視野に入れていきます。具体的には、qemu上の仮想マシンで起動画像の変更を試行してみ ます。これにより実機を起動させるより何倍も早く変更した起動画像を確認できるようになります。

このページは、Vine Linux 3.1で検証されています。

1. 画像の下処理
2. lilo-bmp2mdk
3. qemuのインストール
4. ブートディスクイメージの作成
5. 起動実験
6. liloのインストール
7. まとめ
1. 画像の下処理

liloの起動画面に使用する画像はかなりデリケートで、lilo-bmp2mdkに処理させる画像は128色インデックスカラー非圧縮bmp形式で作成 する必要があります。GIMPを使うことを想定すると、まず使用したい画像を、画像→画像拡大縮小から自己の環境のサイズに合わせます。

その後、画像→モードを開きインデックスカラーを選択します。もともとインデックスカラーの場合はインデックスカラーを選択できませんが、この場合、一度 RGBに変換後、再度インデックスカラーを選択してください。インデックスカラーの色数は128色を指定します。たいていの場合、これで128色のイン デックスカラーになるのですが、ときどき128色以下ですんでしまうときがあります。このような場合でも128色必要ですので、ダイアログ→カラーマップ を開き、足りない色を埋めて行きます。128色は、0~127のナンバーが与えられており、このカラーマップから参照できる色とインデックスナンバーが起 動画像の色指定に使われます。

128色のインデックスカラーになったなら、.bmpの拡張子をつけ、保存して第一段階終了です。


2. lilo-bmp2mdk
次に、lilo-bmp2mdkを実行し、liloに可読なmessageファイルを作ります。Vineでは、lilo-bmp2mdkはliloに同梱されています。1.で作ったファイルをimage.bmpとすると以下のような感じで実行します。
 
$ lilo-bmp2mdk mode:0x101 timer:y,x,C1,C2 entry:y,x,c1,c2,h_size,w_size \
rogress:y,x,hight,width,color <image.bmp >lilo.msg

modeはVESAのmodeで、0x101が640x480、0x103が800x600、0x105が1024x768です。

entryは、boot時のメニュー、timerはtimerに関する指定です。y,xは単純に座標です。座標のあとに続いているのはフォントカラー、C1,c1がバックグランド、C2,c2がフォアグランドです。各々の値は、使いたい色のインデックスカラーの値に64を加算した値を指定します。h_size,w_sizeはフォントのサイズだそうですが、ちょっとやった感じでは反映しないようです。ただし、省略すると表示がダブるので適当な値を入れて下さい。

progressオプションではプログレスバーの設定ができます。progress:y,x,hight,width,colorで指定します。y,xは開始点の座標、hight,width,はプログレスバーの幅と長さ、colorは色です。使用するインデックスカラーの値に64加算した値を指定します。

具体例としては、以下のようになります。

$ lilo-bmp2mdk mode:0x101 timer:200,200,70,65 entry:100,100,70,65,36,72 \
progress:260,100,10,14,116 <image.bmp >lilo.msg

できあがったら、そのファイルをlilo.confのmessageオプションに指定して、liloを再インストールすれば起動画像の変更作業は完了になります。

3. qemuのインストール

ここからが本ページの本題です。1.と2.だけでも起動画像の変更ができるわけですが、メニューやタイマー位置の微調整のため実機の再起動を何度も繰り返 すのは無駄な時間が多くあまりスマートではありません。そこで再起動を繰り返す必要のある起動画像の微調整には仮想マシンを使用するのが合理的です。ここ では、qemuを試してみます。各ディストリビューションにrpm等が用意されている場合はそれを利用するのが良いでしょう。ここでは、とくにリビルドする意味はありません。

qemu http://fabrice.bellard.free.fr/qemu/

qemu-0.7.2.tar.gzをrpm/SOURCEにコピーし、qemu.specをrpm/SPECにコピーしてください。そしてビルドします。

$ rpmbuild -ba rpm/SPEC/qemu.spec

できあがったら、rootになってインストールします。

$ su
# rpm -Uvh  rpm/RPM/i386/qemu-0.7.2.i386.rpm

4. ブートディスクイメージの作成

起動実験は、仮想マシンqemuの仮想フロッピーディスクから起動させます。ですので、ここでは起動可能な仮想フロッピーディスクイメージを作ることにな ります。さて、最近のkernelは巨大化が著しくフロッピーには収まり切らなくなっていますが、ただし、それは1.44MBの話であって、PC/ATの BIOSでサポートされているフロッピーには2.88MBもあり、2.88MBあれば最近の肥大化したkernelでも大丈夫でしょう。私は2.88MB のフロッピーなんて現物を見たことがないのですが、現物がなくてもかまわないのが仮想マシンの良いところです。

フロッピーディスクイメージの作成は少々面倒なので、スクリプトを用意しました。ここでの実験では、とりあえずliloが起動しさえすればいいのでシステムが正しくbootするかどうかは考慮していません(もちろん、考慮すれば普通にboot可能です)。
mkbd.sh

# ./mkbd.sh -e -m /home/yoshino/lilo.msg -k /boot/vmlinuz-2.4.31-0vl3

-eが2.88MBであることを示し、-m がmessageオプション -k でkernelを指定しています。ファイルは絶対パスで指定してください。実行にはroot権限が必要です。

このスクリプトを実行すると、まずフロッピーを用意するように促されますが、フロッピーには書き込まないので無視して、なにも入力せずEnterを押して下さい。

フロッピーディスクイメージが出来上がるとそれをフロッピーに書き込むかどうか聞いて来ますので、なにか入力してEnterを押して下さい。そこで作業終 了になります。できあがったイメージは、bd.xxxx.imgというファイル名で保存されます。ちなみに何も入力せずにEnterを押すと出来上がった イメージをフロッピーディスクに書き込みます。


5. 起動実験

使用する画像image.bmpが正しく作られたならば、あとはメニュー、タイマーなどの位置や色を調整します。

$ lilo-bmp2mdk mode:0x101 timer:200,200,70,65 entry:100,100,70,65,36,72 \
   
progress:260,100,10,14,116 <image.bmp >lilo.msg

lilo-bmp2mdkで各パラメータを調整したら、その起動画像でブートディスクイメージを作ります。

# ./mkbd.sh -e -m /home/yoshino/lilo.msg -k /boot/vmlinuz-2.4.31-0vl3

mkbd.shは以下のようなメッセージを出して終了します。これにより作成されたブートディスクイメージがbd.30320.imgであることがわかります。

boot disk image is bd.30320.img.
aborted.

そして、できあがったブートディスクイメージでqemuを起動します。

# qemu -fda bd.30320.img -boot a

表示された起動画面を確認し、lilo-bmp2mdkのパラメータを再調整し、その画像でブートディスクイメージを作り直し、qemuで再度確認し…、 と気に入ったものができあがるまでこれを繰り返します。気に入ったものができたならそれを実機に導入し、liloを再インストールして完了です。

6. liloのインストール

liloの再インストールは、これまでに作った画像イメージを入れ換えるだけです。/etc/lilo.confは概ね下記のようになっていると思いますが、messageオプションで画像イメージを指定して、/sbin/liloを実行します

prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=menu
message=/boot/message

image=/boot/vmlinuz-2.4.31-0vl1.10
        label=linux
        read-only
        root=/dev/hda2
        append=" resume2=swap:/dev/hda3"
        vga=0x312



7. まとめ

実のところ、私はliloの起動画像にはあまり興味がなく、このページはqemuの遊び方の一例として紹介したものです。qemuは起動を繰り返す必要の ある実験にはすごい威力を発揮します。ブートディスクやレスキューディスクを作るときには大変重宝しました。また、ネットワークの実験などにも非常に便利 で一度使うと手放せなくなります。そのうち、「qemuで遊ぼう」を書いてみたいと思っています。


2005-09-15 よしのぶ 
yoshino@rita.karing.jp 

 index.html 飛べ!ペンギン大王