CD-ROMだけで動作するオリジナルLinuxを作ろう

 
  YAMAMORI Takenori ●yamamori

●不要ファイルの削除

この時点では,ハードディスクの使用量はまだ多いはずです. 筆者の環境では約524Mバイトが使用されていました. そこで,ファイルシステムがtmpfsに収まるように, 目的のアプリケーションの動作には不要なファイルを削除して行きます.

○パッケージレベルでの削除

まずは,rpmコマンドを使って,パッケージ単位で削除を行ないます. 「rpm -qa」でインストールされている全パッケージを確認しながら, 「rpm -e パッケージ名」で不要なパッケージを削除して行ってください. なお,この段階ではパッケージの依存関係は無視せずに, あくまでパッケージ管理を保ったままでの削除とします. 筆者の環境では,最初にインストールされていた291パッケージを 109パッケージにまで削減し,ディスク使用量を約245Mバイトに減らしました.

○不要ファイルの個別削除

パッケージレベルでの削除を十分に行なったあと, さらに不要なファイルやディレクトリを,個別に手作業で削除します. この作業では,ファイルは実際には削除せず,/aというディレクトリを作って, その下に不要なファイルやディレクトリを移動する方法で行ないます. /a以下に移動したファイルやディレクトリは,このあと作成するtmpfsの ファイルシステムからは除外されます.

個別のファイル削除は少々込み入った作業です. 以下に各種ディレクトリごとの削除方法を書きます.

・/usr/X11R6

/usr/X11R6以下は,binとlibの一部のみが必要です. man,share,includeは必要ないため,すべて/a以下に移動します. binとlibも,いったんすべて/a以下に移動したあと, 必要なファイルやサブディレクトリのみをもとの位置にコピーするようにします.

/usr/X11R6/binの下には,XサーバのXFree86と,それへのXという名前の シンボリックリンクと,xinitコマンドが最低限必要です.筆者はさらに, デバッグ用にxtermとtwmも含めて,計5つのファイルを配置しました.

/usr/X11R6/lib以下は少々複雑です.まず,/usr/X11R6/lib/X11以下ですが, ここには最低限のフォント2種類と,/usr/X11R6/lib/X11/rgb.txtのみを配置します. 今回の場合,目的のゲームではXのフォントを使用していませんが, Xサーバが起動するために最低限,fixedとcursorフォントが必要です. そこで,/usr/X11R6/lib/X11/fonts/miscの下に,7x14.pcf.gzとcursor.pcf.gzのみ コピーし,mkfontdirを実行してfonts.dirを作成し,さらにfonts.aliasを作成して, 「fixed -misc-fixed-medium-r-normal--14-130-75-75-c-70-iso10646-1」 という1行を書きます.(正確なフォント名は実際の環境に合わせてください) このとき,同時に/etc/X11/XF86Config-4の「FontPath "unix/:7100"」という行を 「FontPath "/usr/X11R6/lib/X11/fonts/misc"」と修正し, フォントサーバ(xfs)を使わずに,上記の2つのフォントのみを使うように変更します.

次に/usr/X11R6/lib/modules以下ですが,ここは基本的にはすべてのファイルを もと通りに配置しておきます.ただし,サブディレクトリのdriとdriversについては 使用しているビデオカード以外のモジュールは削除可能です.筆者はMatrox G200を 使用しているため,driの下はmga_dri.soのみ,driversの下はmga_drv.oのみ としました.

最後に/usr/X11R6/lib直下のlibX11.so.*などの共有ライブラリですが, アプリケーションが実際にリンクしているライブラリをlddコマンドで確認しながら 不要なものを削除することができます.ただし,これらはXの基本的なライブラリ であるため,よくわからなければすべて配置しておいてもよいでしょう.

・/usr/share

/usr/share以下もほとんど必要ありません.zoneinfo,terminfoやi18nなどの すべてのディレクトリを/a以下に移動します.zoneinfoがなくても/etc/localtime というファイルがあるため,時刻表示に影響はありません. terminfoについては,念のため,xtermとlinux(コンソール用)のみ, /usr/share/terminfoの下にx/xtermとl/linuxとしてファイルを配置します. また,今回のゲームは/usr/share/tuxracer以下にデータを持っているため, このディレクトリはすべてもと通りに配置します.

・/usr/lib

/usr/libも同様に,いったんまるごと/a/usr/libに移動し,そのあとlddコマンドで 確認しながら必要なライブラリのみを/usr/libにコピーするようにします. Xやゲームが動作するために,libz.so.*, libSDL*.so.*, libGL.so.* ほかの ライブラリが必要なはずです.

なお,この作業のあたりでpam関係の問題で,Xが一般ユーザでは起動できなくなる と思います.通常,rootでXを起動することは推奨されませんが, CD-ROMのシステムにおいてはそのポリシーは無意味ですので, 以降はrootでXを起動するようにしてください.

・/lib

/libの下にはlibc.so.*ほか,OSの動作に不可欠なライブラリがあります. これらは安易に手を加えると危険なので,そのままにしておきます. ただし,/lib/modules以下については次のようにファイル移動を行ないます.

・/lib/modules

/lib/modules以下のツリーには,カーネルの各種モジュールがありますが, 目的のアプリケーションの動作には,これらのモジュールのうちの一部しか 必要ありません.そこで,あらかじめアプリケーションの実行中に lsmodコマンドを実行し,どのモジュールが必要か調べておいてください. 実際に必要なモジュールは,カーネルのコンフィギュレーション,ハードウェア環境, 目的のアプリケーションによって異なります.(※注) なお,この時点で,アプリケーション起動時のモジュールとは別に, CD-ROMをマウントする際にロードされるモジュールも調べておいてください. これはあとでinitrdの中に入れて使います.

必要なモジュールを確認したら,/lib/modulesをディレクトリごと /a/lib/modulesに移動し,/a/lib/modules以下からアプリケーションの起動に必要な モジュールのみを集めて,/lib/modulesの下に直接コピーします. ここでは,モジュールはもとのツリーではなく,/lib/modules直下にベタで 配置することに注意してください.この場合,モジュール間の依存関係は depmodによっては解決されず,各モジュールはmodprobeではなくinsmodで 直接ロードしなければならないことになります.

※注
筆者の環境の場合はagpgart.o, mga.o, soundcore.o, sound.o, ac97_codec.o, emu10k1.o, input.o, joydev.o, gameport.o, ns558.o, analog.oが必要でした. サウンドカードは2枚挿しで,Sound Blaster Live! をサウンド出力に, SB16PnPをゲームポート用に使っているのでモジュール構成が変則的かも知れません.
・/var/lib/rpm

/var以下にも不要なファイルがありますが,容量を消費しているのはおもに /var/lib/rpm以下の,パッケージ管理ファイルです. これらはもちろん必要ありませんので,まるごと/a/var/lib/rpmに移動します.

・/boot

/bootには,vmlinuzなどのファイルが置かれていますが, CD-ROMシステムでは起動ディスクイメージからカーネルやinitrdを読み込むため /bootは必要なく,同様に/a/bootに移動してはずします. ただし,この作業を行なうと,このハードディスクのファイルシステム自体で ブートする場合に,LILOなどのブートローダで指定する カーネルのPATHが変わってしまうため,一応注意してください.


○ファイル削除後の動作確認

以上のファイルの削除を行なっても,目的のアプリケーションが正常に起動する ことを確認してください. ちなみに筆者の環境では,この時点で/a以外のディスクの使用量は合計約66Mバイト (Linux本体が38Mバイト,Xが16Mバイト,ゲームが12Mバイト)となりました.


To『CD-ROMだけで動作するオリジナルLinuxを作ろう』[index]


このページは、技術評論社 Software Design 2002年12月号、『CD-ROMだけで動作するオリジナルLinuxを作ろう』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 [Home]
yamamori