openBVEの実行方法とMandriva Linux向けRPMパッケージ(2009/1/14現在)
ディレクトリ構造
openBVEを実行する際のディレクトリ構造は下のようになっている。幾つかはWindows用の配布ファイルにのみ含まれていて、ソースの配布ファイルにはない。[トップ]-+-[Data] 付属データ +-[Settings] 設定保存 +-[Railway]-+-[Route]-[路線名] 路線データ | +-[Object]-[路線名] 路線用オブジェクト | +-[Sound]-[路線名] 路線用サウンド +-[Train]-[車両名] 車両データ +-OpenBve.exe アセンブリ
(2009/3/18)バージョン0.9.6系からディレクトリのレイアウトが変わっている。
(2009/3/24)バージョン1.0.0.0でもこれと同じ。下はバージョン0.9.5系までのレイアウト。
[トップ]-+-[Compatibility] 付属データ +-[Controls] 付属データ +-[Graphics] 付属データ +-[Interface] 付属データ + 設定保存 +-[Railway]-+-[Route]-[路線名] 路線データ | +-[Object]-[路線名] 路線用オブジェクト | +-[Sound]-[路線名] 路線用サウンド +-[Train]-[車両名] 車両データ +-OpenBve.exe アセンブリ
実行
monoコマンドでopenBVE本体のアセンブリ(.exeファイル)の場所を指定する。$ mono [OpenBve.exeの場所]
もしTao Frameworkがインストールされているにも関わらず見つからずに起動しない(System.IO.FileNotFoundException)場合、環境変数MONO_PATHにTao Frameworkのアセンブリ(.dllファイル)のディレクトリを指定する。
$ MONO_PATH=/usr/lib/mono/tao-opengl:/usr/lib/mono/tao-openal:/usr/lib/mono/tao-sdl mono [OpenBve.exeの場所]
Debianの「libtaoframework-*」パッケージでは
$ MONO_PATH=/usr/lib/cli/tao-opengl-2.1:/usr/lib/cli/tao-openal-1.1:/usr/lib/cli/tao-sdl-1.2 mono [OpenBve.exeの場所]
のようになる。
ディストリのパッケージとしてのディレクトリ配置と実行方法
以下はMandriva Linux向けのパッケージを作成した際のメモとなる。(2009/3/24)ここの記述はバージョン0.9.3系の時点のものなので、1.0とは異なる部分がある。
一般ユーザが書き込める専用ディレクトリを用意することについての問題点
ディストリのパッケージとしてシステムにインストールする場合、/usr/share/games/openbve/などに各種ファイルを配置することになり、書き込み権限の都合により、一般ユーザが使用する際には本記事の上に記述したディレクトリ構成をホームディレクトリの下に再現することになる。本体と付属データに関しては読み込むことしかしないため、そのディレクトリ以下のCompatibilityなどの各ディレクトリと本体(.exeファイル)に対するシンボリックリンクを作成するようなラッパースクリプトを作成すればよいと考えていたのだが、実際に試したところ
- 設定はInterface/settings.cfgに書き込まれるため、シンボリックリンクをたどって/usr/share/games/openbve/の下にあるディレクトリ内に書き込みを試みて失敗(書き込みエラーが発生)し、設定は保存されない
- シミュレータモードに入って「メインメニュー」を選択してメインウィンドウに戻ったときに、路線や車両の選択項目が前回選択した路線ではなくアセンブリのあるディレクトリに飛んでしまう
という問題が発生した
問題の回避
設定保存に関してはInterfaceディレクトリに対してリンクを張るのではなく、ホーム以下の専用ディレクトリ側に普通のディレクトリInterfaceを作成して、ディレクトリ内の各ファイルへのリンクを張る形にしてトラブルを回避することにした。シミュレータモードから「メインメニュー」で戻った後で路線/車両のディレクトリが飛んでしまう件については、アセンブリの存在する実際のディレクトリを基準にしていてシンボリックリンクではごまかせないため、データディレクトリからユーザのディレクトリへコピーしてくるという形で妥協することにした。ただし、毎回コピーさせると無駄なディスクアクセスを生むため、システムにインストールされているアセンブリのMD5とユーザのディレクトリ側のアセンブリのMD5とを比較して、同一である場合にはコピーは行わないようにした。
更に、このユーザ用ディレクトリは、(ホームの下にデータを置きたくない場合のために)環境変数OPENBVEDIRにより変更もできるようにした(標準は[ホームディレクトリ]/openbveとした)。
これらを踏まえた上で作成したMandriva Linux向けRPMパッケージは別館の配布ページで公開した。
(2014/10/12)配布ページは削除済み。
ラッパースクリプトの生成スクリプト
上記ラッパースクリプトはMandriva向けに作成したパッケージでは/usr/games/openbveとして中に含んでいるが、これは.specファイル内で自動生成している。その自動生成部分を独立したシェルスクリプトにしたのが下のコード。
#! /bin/bash DATADIR="/usr/share/games/openbve" #DATADIR="/usr/share/openbve" USERDIR="~/openbve" MONOPATH="/usr/lib/mono/tao-opengl:/usr/lib/mono/tao-openal:/usr/lib/mono/tao-sdl" #MONOPATH="/usr/lib/cli/tao-opengl-2.1:/usr/lib/cli/tao-openal-1.1:/usr/lib/cli/tao-sdl-1.2" cat <<EOF >| openbve #! /bin/bash PATH=/bin:/usr/bin if [ ! -d \${OPENBVEDIR:-${USERDIR}} ]; then mkdir -p \${OPENBVEDIR:-${USERDIR}}/{Data,Train,Settings} \${OPENBVEDIR:-${USERDIR}}/Railway/{Object,Route,Sound} fi cd \${OPENBVEDIR:-${USERDIR}}/ for d in \$(find ${DATADIR}/Data -type f | sed 's,/[^/]*\$,,' | sort -u); do mkdir \$(echo \${d} | sed 's:${DATADIR}/::') -p ln -s \${d}/*.* \$(echo \${d} | sed 's:${DATADIR}/::')/ 2> /dev/null done if [ "x\$(md5sum ${DATADIR}/OpenBve.exe | awk -F " " '{print \$1}')" != "x\$(md5sum \${OPENBVEDIR:-${USERDIR}}/OpenBve.exe 2> /dev/null | awk -F " " '{print \$1}')" ]; then cp ${DATADIR}/OpenBve.exe \${OPENBVEDIR:-${USERDIR}}/ fi MONO_PATH=${MONOPATH} mono \${OPENBVEDIR:-${USERDIR}}/OpenBve.exe EOF chmod +x openbve
(2009/3/24)バージョン0.9.6系以上向けに修正
下はバージョン0.9.5系までを対象としている。
[任意]ファイル名: gen_openbvewrapper-0.9.5.sh
#! /bin/bash DATADIR="/usr/share/games/openbve" #DATADIR="/usr/share/openbve" USERDIR="~/openbve" MONOPATH="/usr/lib/mono/tao-opengl:/usr/lib/mono/tao-openal:/usr/lib/mono/tao-sdl" #MONOPATH="/usr/lib/cli/tao-opengl-2.1:/usr/lib/cli/tao-openal-1.1:/usr/lib/cli/tao-sdl-1.2" cat <<EOF >| openbve #! /bin/bash PATH=/bin:/usr/bin if [ ! -d \${OPENBVEDIR:-${USERDIR}} ]; then mkdir -p \${OPENBVEDIR:-${USERDIR}}/Train \${OPENBVEDIR:-${USERDIR}}/Railway/{Object,Route,Sound} fi cd \${OPENBVEDIR:-${USERDIR}}/ for d in \$(find ${DATADIR}/{Compatibility,Controls,Graphics,Interface} -type f | sed 's:/[^/]*\$::' | sort -u); do mkdir \$(echo \${d} | sed 's:${DATADIR}/::') -p ln -s \${d}/*.* \$(echo \${d} | sed 's:${DATADIR}/::')/ 2> /dev/null done if [ "x\$(md5sum ${DATADIR}/OpenBve.exe | awk -F " " '{print \$1}')" != "x\$(md5sum \${OPENBVEDIR:-${USERDIR}}/OpenBve.exe 2> /dev/null | awk -F " " '{print \$1}')" ]; then cp ${DATADIR}/OpenBve.exe \${OPENBVEDIR:-${USERDIR}}/ fi MONO_PATH=${MONOPATH} mono \${OPENBVEDIR:-${USERDIR}}/OpenBve.exe EOF chmod +x openbve
DATADIR(データのインストール先)やMONOPATH(本体の実行前に指定する環境変数MONO_PATHの値)は環境によって異なる場合があるので、それに合わせて使用する。
使用したバージョン:
- openBVE 0.9.3.3-1.0.0.0