[English] [Japanese]

Linux CD-ROM ゲームシステム

 
  YAMAMORI Takenori ●yamamori

●リードオンリーファイルシステムへの対応

ここまででゲームシステムの外観は見えたが、CD-ROMにした時に ファイルシステムがリードオンリーとなることにまだ対応できていない。

そこで、以下の作業を行ない、リードオンリーとなっても問題がないようにする。

○swapを外す

CD-ROMシステムではswapは当然使用できない。 そこで、/etc/fstabの内容を見て、以下のような swapを記述した行を見つけ、 それを#でコメントアウトする。

(/etc/fstabのswapをコメントアウト)
----
#/dev/hda2  swap  swap  defaults
----

この変更は、リブートすると有効になる。 swapを直接外したい場合は、 “/sbin/swapoff デバイス名”コマンドを実行するとよい。 また、“/sbin/swapon -s”で現在のswapの使用状況を表示できる。


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

HDD上でテストしている間は気がつかないが、 CD-ROMになった時、depmodを実行すると /lib/modules以下のファイルのシークのため、ブートが極端に遅くなる。 しかも、いずれmodules.depファイルはリードオンリーで更新できないため、 depmodの実行自体が無駄である。

depmodは、ブート時に/etc/rc.d/rc.sysinit内で起動されている。 ここでは、depmodの実行属性が落ちていると実行しないようになっているため、 以下のようにdepmodx属性を落して対処することにする。

(depmodを実行しないようにする)
----
# chmod a-x /sbin/depmod
----

/etc/mtabの修正

/etc/mtabもリードオンリーで書き込めなくなる。 すると、マウントポイントの表示が矛盾するようになる。 それでもたいした実害はなく、ゲームは実行できるのだが、 以下のように/proc/mountsを使うように変更しておくとうまくおさまる。

(/etc/mtabの修正)
----
# rm /etc/mtab
# ln -s /proc/mounts /etc/mtab
----

なお、/etc/mtab/tmp 以下などに単純にシンボリックリンクで飛ばせばいいと思うかも知れないが、 これはlockファイルの関係でうまく行かない。

/etc/mtabをこのように/proc/mountsへのリンクに変更した場合、 ループバックマウントのumount時に、 /dev/loop*が自動的に解放されないようになるので注意が必要だ。 今後“mount -o loop”でイメージファイルをマウントした場合は、 そのumount後に、

# /sbin/losetup -d /dev/loop0

などと、明示的に実行するのを忘れないようにしなければならない。


/var/lock, /var/run, /var/tmp をシンボリックリンクで飛ばす

/var/lock, /var/runは、rcスクリプトなどの実行により 書き込みが発生する。また、/var/tmpも当然書き込みが発生する。 そこでこれらを/tmpにシンボリックリンクで飛ばす。 /tmpは、最終的にはinitrdのRAMディスクとなるため書き込み可だ。

(/var/lock, /var/run, /var/tmp をシンボリックリンクで飛ばす)
----
# cd /var
# mv lock lock-0
# ln -s /tmp/var/lock .
# mv run run-0
# ln -s /tmp/var/run .
# mv tmp tmp-0
# ln -s /tmp .
----

次に、/tmp以下に飛ばされたこれらのディレクトリを、 ブート時に作成するように、rc.sysinitスクリプトを修正する。

/etc/rc.d/rc.sysinitの220行目付近にある、

# Remount the root filesystem read-write.
action "Remounting root filesystem in read-write mode" mount -n -o remount,rw /

という、“/”をremountしている行を見つけ、この行の直後に、

mkdir -p /tmp/var/run /tmp/var/lock/subsys /tmp/var/lock/console

というコマンドを追加する。


haltスクリプトの修正

これも、あとにならないと気づかないことだが、Vine 2.0のhalt スクリプト中でfuserを実行しているのが問題になる。

CD-ROMゲームシステムではファイルシステムのマウントの仕方が特殊なため、 システムのシャットダウン時に、fuser が実行されるとそこでハングしてしまう。

そこで、以下のように修正する。 /etc/rc.d/init.d/haltの81行目付近の、

/sbin/fuser -k -m $sig $remaining > /dev/null

という行を見つけ、この行の直前に、

break

というシェルコマンドを追加して、ここでループを抜けるようにする。

これで、CD-ROMになった時も、システムがきれいに シャットダウン・リブートできるようになる。

ここまででリードオンリーファイルシステムへの対応のための修正は完了した。 ここで一度リブートし、正常にゲームが起動することを確認しておく。


To 『Linux CD-ROM ゲームシステム』index


このページは、(株)アスキー TECH Linux Vol. 2 『CD-ROMだけですぐに遊べる! Linux ゲームシステム全解説!!』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 Home
YAMAMORI Takenori 山森丈範
yamamori