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

 
  YAMAMORI Takenori ●yamamori

●CD-ROMブートシステム特有の修正

このあと,CD-ROMブートシステム特有の修正および,ログインせずに 直接アプリケーションが立ち上がるようにするための修正をなど行ないます.

○rcスクリプトの作成

このシステムは,「login:」のプロンプトなしにアプリケーションを起動するために シングルユーザモードを利用します.そこで,起動スクリプトとして /etc/rc.d/rc1.d/S99gameというファイルを作成します.(下のリスト)

このファイルの中では,まずPATHを設定し, 先ほど/lib/modules以下に直接配置したモジュールを, 依存関係にしたがってinsmodでロードするコマンドを羅列しています. そしてこのあとxinitで,目的のアプリケーションを起動します. ここではxinitの引数で直接コマンドを絶対PATHで指定し, $HOME/.xinitrcは用いていません.

なお,このS99gameは通常の起動スクリプトとは異なり, /etc/init.d以下のスクリプトへのシンボリックリンクではなく直接配置しており, また,start,stopの引数チェックも省略しています.

この状態で「/sbin/init 1」を実行してランレベル1に移行して, アプリケーションが起動されることを確認しておいてください.

●リスト /etc/rc.d/rc1.d/S99game

#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:\
/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:/root/bin
export PATH

insmod /lib/modules/agpgart.o    ← 必要なカーネルモジュールのロード
insmod /lib/modules/mga.o

insmod /lib/modules/soundcore.o
insmod /lib/modules/sound.o
insmod /lib/modules/ac97_codec.o
insmod /lib/modules/emu10k1.o

insmod /lib/modules/input.o
insmod /lib/modules/joydev.o
insmod /lib/modules/gameport.o
insmod /lib/modules/ns558.o
insmod /lib/modules/analog.o

aumix -v 50 -w 50                ← サウンドボリュームの設定

xinit /usr/bin/tuxracer &        ← ゲームの起動

PS1='S99game# '; export PS1      ← デバッグ用にシェルを起動
/bin/sh

○そのほかの細かいファイルの修正

そのほかの細かいファイルの修正点を以下に書きます.

・デフォルトのランレベルを1にする

/etc/inittabのデフォルトのランレベルを記述している行を, 「id:1:initdefault:」と修正して,ランレベル1で起動するようにします.

・swapをはずす

/etc/fstabにswapパーティションの記述がある場合は, その行を#でコメントアウトしてswapを使わないようにします.

・/etc/mtab -> /proc/mountsにする.

/etc/mtabには,mountコマンドによってマウントされたファイルシステムの マウント状況が記録されていますが,今回のようにCD-ROMやtmpfs,pivot_rootを 行なっているシステムでは,mtabの内容が実際とは異なってしまい, mountやdfコマンドの表示がおかしくなります. そこで次のように,/etc/mtabを/proc/mountsへのシンボリックリンクに変更して, この状態を回避します.

  # cd /etc; rm mtab; ln -s /proc/mounts mtab
・fsckしないようにする

このシステムではfsckは意味がないため,/の直下にfastbootというファイルを 作成して,fsckが実行されないようにします.

・depmodを実行しないようにする

このシステムでは,前述の通りmodprobeではなくinsmodコマンドで, 依存関係に頼らずにモジュールを直接ロードします. したがってrc.sysinitからdepmodを実行する必要はなく,念のため次のように depmodの実行パーミッションを落しておきます. (少しでもtmpfsの容量を稼ぎたい場合は削除してもよいでしょう)

  # chmod -x /sbin/depmod
・/mnt/tmpの作成

tmpfs用のマウントポイントとしてあとで使用するため /mnt/tmpというディレクトリを作成しておきます.


●tmpfs.tar.gzの作成

以上で,不要なファイルの削除やCD-ROMシステム用の修正は完了しました. このハードディスクの状態をtar+gzipで固めます. これは,次のように/pre-bootというディレクトリを作り, そこにtmpfs.tar.gzというファイル名で保存するようにします.

  # cd /
  # mkdir pre-boot
  # GZIP=-9 tar --exclude ./a --exclude ./pre-boot \
    -zcvlf pre-boot/tmpfs.tar.gz .

ここで,GNU tarの「--exclude」オプションを付けて/aや/pre-bootディレクトリを アーカイブ対象からはずし,また「l」オプションで単一ファイルシステムのみが 対象になる(/procなど別のファイルシステムが除かれる)ことに注意してください.


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


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