ReactOSの日本語フォントの追加と設定をソースビルドをすることなく行ってISOイメージを作り直す(Cabinet更新とCDイメージ作成)
Cabinetの更新
幾つかの注意点がある。全て重要項目。- cabmanは、Cabinet作成時、ReactOSのソースツリーに含まれるreactos.dffというファイルの情報を使用するが、これはソースツリーから取ってくるしかない*1。
- コピーしてきたreactos.dffには、ソースツリーにおけるパス情報(ディレクトリ名を含む)が含まれているが、1つの一時ディレクトリに全て展開されるため、ファイル名部分のみにする必要がある
- cabmanは、一度reactos.infを作成するだけのために-Iオプション付きで実行した後、予約領域にこのreactos.infを含めるように-RCオプションで指定する
一時ディレクトリ作成と、既存のCabinetファイルからの展開
$ pwd /tmp/work $ ls autorun.inf icon.ico image1.bin loader reactos readme.txt $ mkdir tmp; cd tmp/ $ cabextract ../reactos/reactos.cab $ sed -e 's/^[a-z].*\\\(.*\)/\1/' [ReactOSのソースツリー]/boot/bootdata/packages/reactos.dff > reactos.dff
最後のsedで、Cabinetファイルに入れるファイルのリストの中でディレクトリ名部分を消している。
Cabinetファイルに含めるファイルリストを編集
日本語フォントをCabinetファイルに含めるように、リスト(reactos.dff)に追加する。$ sed -i 's/\(; Media\)/\1\r\nipag-mona.ttf 3\r\nipagp-mona.ttf 3\r\nipagui-mona.ttf 3\r\nipam-mona.ttf 3\r\nipamp-mona.ttf 3/' reactos.dff
差分形式*2で表記すると
--- reactos.dff +++ reactos.dff.new @@ -330,6 +330,11 @@ wmilib.sys 2 ; Media +ipag-mona.ttf 3 +ipagp-mona.ttf 3 +ipagui-mona.ttf 3 +ipam-mona.ttf 3 +ipamp-mona.ttf 3 DejaVuSans.ttf 3 DejaVuSans-Bold.ttf 3 DejaVuSans-BoldOblique.ttf 3
となる。
フォントのコピー
該当する日本語フォントファイルをコピーする。コピー元は環境によって異なるので参考として。$ cp /usr/share/fonts/ipamonafont/*.ttf .
cabmanによるCabinetの作成
下の流れで作成し、既存のCabinetファイルを上書きする。$ cabman -C reactos.dff -I > /dev/null $ cabman -C reactos.dff -RC reactos.inf ReactOS Cabinet Manager - Version 0.9 (中略) Adding winver.exe Adding write.exe Adding lake.bmp Done. $ mv reactos.cab ../reactos/ -f
一時ディレクトリの削除
$ cd ../ $ rm tmp/ -fr
ISOイメージの作成
最後にmkisofsでイメージを作成。このCDイメージを使用して日本語ロケールでインストールを行うことで、日本語フォントが表示されることを確認済み。$ mkisofs -b image1.bin -V 'ReactOS Foundation' -hide image1.bin -no-emul-boot -o ReactOS.iso .
image1.binの部分はブートイメージファイルの名前に合わせる。
終わりに
ソースをビルドすることなくCDイメージの(特にCabinetファイルの)中身を変更するのは面倒で、ビルドするわけでもないのにソースツリーの中のファイルを使用する部分などは、改善の余地がある(cabmanは必要なので仕方ない)。日本語フォントを欧文フォントのファイル名で上書きしてしまうほうが手っ取り早い気もするが...
使用したバージョン:
- ReactOS 0.3.3, 0.3.4 / cabman 0.9
- cabextract 1.2
- mkisofs 2.01.01a34 (cdrtools 2.01.01_alpha34)