OpenSimサーバ構築記録その1(Linuxに導入編)

ぱすてる

2008年05月23日 19:04



● きっかけ

私:     米IBMと米Linden Labが去年提携しましたね。
       これからはWebアプリケーションも仮想世界との連携とか必要になるかもしれませんね~
私のボス: テスト用サーバに余裕があれば、OpenSim入れてもいいよ。
私:     マジですか~!!!、仕事中に堂々とセカンドライフができる~ ^^
私のボス: 仕事だからね。 ちゃんと仕組みを勉強してよ。
私:     わ~いわ~い ^^/  (聞いてない)

というわけで、最近仕事中に堂々とOpenSimサーバを構築して、遊んでます。


● テスト用サーバ仕様

 CPU: Pentium4 3.2GHz
 メモリ: 2GB
 OS:  Ubuntu8.04 (Debian/GNU Linux系OS)

元々は、ホームページ、Webアプリケーションの動作確認用のサーバ機です。
テスト用とはいえ、DMZ上に配置された、立派な外部公開サーバ。
最初の頃はただの利用者だったのに、一番使う私が、いつの間にやら管理者に。。。 ーー;


● OpenSimインストール手順書の入手

(URL) http://opensimulator.org/wiki/User_Documentation

なんと、テスト機と同じOS(Ubuntu8.04)の手順が書かれているではないですか~。
すばらしい。 英語も(たぶん)簡単そうだ。 ^^;


● 手順書を参考に、各種パッケージのインストール

(1) 職場のテスト機にSSHでリモートログイン。
  rootユーザになって、/usr/local ディレクトリに移動して作業します。
  Linux/Unixでは、ソースからコンパイル・インストールするときは、/usr/local 配下に作成する事が多いので。

root@sv:/root# cd /usr/local

  Ubuntu、Knoppixなど、Debian系Linuxのパッケージは、apt-get または aptitudeコマンドで
  ネットワーク経由でパッケージのサイトからインストールします。


(2) subversion のインストール
  subversionは、ソースファイルなどのリポジトリ管理のツールです。
  OpenSim本体は、subversionを利用してリポジトリサイトからダウンロード(チェックアウト)します。

root@sv:/usr/local# apt-get install subversion
Suggested packages:
db4.6-util patch subversion-tools
The following NEW packages will be installed:
subversion
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 0B/243kB of archives.
After this operation, 3482kB of additional disk space will be used.

(以下省略)


(3) nant のインストール
  NAntは、JavaのAntを.NETで利用できるように移植したオープンソースのビルドツールです。

root@sv:/usr/local# apt-get install nant
The following extra packages will be installed:
libgdiplus libgif4 libglib2.0-dev libmono-accessibility1.0-cil libmono-dev
libmono-winforms1.0-cil libnunit2.2.6-cil mono-gmcs
Suggested packages:
libglib2.0-doc libnunit-doc
The following NEW packages will be installed:
libgdiplus libgif4 libglib2.0-dev libmono-accessibility1.0-cil libmono-dev
libmono-winforms1.0-cil libnunit2.2.6-cil mono-gmcs nant
0 upgraded, 9 newly installed, 0 to remove and 1 not upgraded.
Need to get 5997kB of archives.
After this operation, 23.0MB of additional disk space will be used.
Do you want to continue [Y/n]?

(以下省略)


(4) mono-gmcs のインストール
  Linux上で、.NETアプリケーションを動かすために、Monoランタイムを利用します。

root@sv:/usr/local# apt-get install mono-gmcs
mono-gmcs is already the newest version.
mono-gmcs set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.


※ nantのインストール時に、依存パッケージとして既にインストールされてました。


(5) libmono-microsoft8.0-cil のインストール
  こんな名前のファイルを入れるのは、イヤだ~。><

root@sv:/usr/local# apt-get install libmono-microsoft8.0-cil
The following NEW packages will be installed:
libmono-microsoft8.0-cil
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 130kB of archives.
After this operation, 422kB of additional disk space will be used.

(以下省略)


(6) libmono-system-runtime2.0-cil のインストール

root@sv:/usr/local# apt-get install libmono-system-runtime2.0-cil
The following NEW packages will be installed:
libmono-system-runtime2.0-cil
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 69.6kB of archives.
After this operation, 238kB of additional disk space will be used.

(以下省略)


(7) libgdiplus のインストール

root@sv:/usr/local# apt-get install libgdiplus
libgdiplus is already the newest version.
libgdiplus set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.


※ これも、nantが依存パッケージとして既にインストール済み。


● OpenSimの構築

(1) /usr/local 配下に、opensimディレクトリを作成し、その配下にOpenSIMを
  インストールします。

root@sv:/usr/local# mkdir opensim
root@sv:/usr/local# cd opensim/


(2) subversionで、OpenSIMリポジトリからチェックアウト(ダウンロード)します。

(URL) http://opensimulator.org/svn/opensim/tags/

(今日現在)版数が一番大きい、0.5.6-release を入れてみます。
ディスクに余裕があれば、0.4.5.3-stable(安定版)も入れておけばいいですね。

root@sv:/usr/local/opensim# svn co http://opensimulator.org/svn/opensim/tags/0.5.6-release 0.5.6
root@sv:/usr/local/opensim# ls
./  ../  0.4.5.3/  0.5.6/


(3) runprebuildスクリプトを実行して、NAnt用のビルドファイルを作ります。
  TarBall版からフリーソフトをコンパイルする時の./configureの代わりでしょうか。

root@sv:/usr/local/opensim# cd 0.5.6/
root@sv:/usr/local/opensim/0.5.6# ls *.sh
add-copyright.sh* runprebuild.sh*

root@sv:/usr/local/opensim/0.5.6# ./runprebuild.sh
Prebuild v2.0.3
Copyright (c) 2004-2008
Matthew Holmes (matthew@wildfiregames.com),
Dan Moorehead (dan05a@gmail.com),
David Hudson (jendave@yahoo.com),
Rob Loach (http://www.robloach.net),
C.J. Adams-Collier (cjac@colliertech.org),
See 'prebuild /usage' for help

(途中省略)
Creating Visual C# 2005 solution and project files
...Creating project: Prebuild



(4) OpenSIMのビルド
  ビルドファイルが正常に作成されたら、後はnantを実行するだけです。

root@sv:/usr/local/opensim/0.5.6# nant
NAnt 0.85 (Build 0.85.2478.0; release; 2006/10/14)
Copyright (C) 2001-2006 Gerry Shaw
http://nant.sourceforge.net

Buildfile: file:///usr/local/opensim/0.5.6/OpenSim.build
Target framework: Mono 2.0 Profile
Target(s) specified: build

(途中省略)
BUILD SUCCEEDED
Total time: 69.1 seconds.



(5) binディレクトリ配下に、OpenSIM.exe本体と、iniファイル見本ができてる事を確認します。

root@sv:/usr/local/opensim/0.5.6# cd bin
root@sv:/usr/local/opensim/0.5.6/bin# ls *.exe
OpenSim.32BitLaunch.exe*    OpenSim.Grid.InventoryServer.exe* OpenSim.Grid.UserServer.exe*
OpenSimExport.exe*        OpenSim.Grid.AssetServer.exe*   OpenSim.Grid.MessagingServer.exe*
OpenSim.TestSuite.exe*      Prebuild.exe*           OpenSim.Grid.GridServer.exe*
OpenSim.Grid.ScriptServer.exe* OpenSim.exe*            pCampBot.exe*

root@sv:/usr/local/opensim/0.5.6/bin# ls *ini*
OpenSim.ini.example mssql_connection.ini.example mysql_connection.ini.example


(6) 環境ファイル(OpenSim.ini)の雛形をコピーして、viエディタで修正します。
  フィジクスは当然、ODE(Open Dynamics Engine)を有効にします。

root@sv:/usr/local/opensim/0.5.6/bin# cp OpenSim.ini.example OpenSim.ini
root@sv:/usr/local/opensim/0.5.6/bin# vi OpenSim.ini

; Choose one of the physics engines below
;physics = basicphysics  ←これを無効にする
;physics = POS
physics = OpenDynamicsEngine  ←これを有効にする
;physics = modified_BulletX


● OpenSimの起動と初期設定

(1) binディレクトリ配下で、OpenSIM.exeを起動します。
  とうぜん、exeファイルはLinuxでは動きませんので、mono経由で起動させます。

root@sv:/usr/local/opensim/0.5.6/bin# mono OpenSim.exe
OpenSim 0.5, SVN build
Performing compatibility checks... Environment is compatible.
Starting...
12:42:28 - [OPENSIM MAIN]: Running in sandbox mode

(途中省略)


(2) 初回起動時、途中にたずねてくる質問項目に答えます。
  テスト機といえども、グローバルIPとDNSで外部公開しているので、
  アカウント、パスワードはデフォルトは使わない。

DEFAULT REGION CONFIG: Region Name [OpenSim Test]:
DEFAULT REGION CONFIG: Grid Location (X Axis) [1000]:
DEFAULT REGION CONFIG: Grid Location (Y Axis) [1000]:
DEFAULT REGION CONFIG: Internal IP Address for incoming UDP client connections [0.0.0.0]:
221.XXX.XXX.XXX <--- サーバのグローバルIPアドレスを指定。
DEFAULT REGION CONFIG: Internal IP Port for incoming UDP client connections [9000]:
DEFAULT REGION CONFIG: External Host Name [127.0.0.1]:
XXXXXXXX <--- サーバのホスト名(DNSに登録されている)を指定。
DEFAULT REGION CONFIG: First Name of Master Avatar [Test]:
XXXXXXXX <--- ファーストネーム
DEFAULT REGION CONFIG: Last Name of Master Avatar [User]:
XXXXXXXX <--- ラストネーム
DEFAULT REGION CONFIG: (Sandbox Mode Only)Password for Master Avatar account [test]:
XXXXXXXX <--- パスワード
(途中省略)
12:43:07 - [!]:STARTUP COMPLETE
Region# :

コマンド入力待ちになれば、起動完了



● Oracleモジュールのインストール ******** 2009/3/24 追加 ********

以下の警告が出て、OpenSimが起動できなかった場合は、libmono-oracleモジュールを
インストールしてください。(0.6.3-releaseで発生)

** (OpenSim.exe:6932): WARNING **: The following assembly referenced from
 /usr/local/opensim/0.6.3/bin/NHibernate.dll could not be loaded:
  Assembly:  System.Data.OracleClient  (assemblyref_index=4)
  Version:  2.0.0.0
  Public Key: b77a5c561934e089
The assembly was not found in the Global Assembly Cache, a path listed in the
 MONO_PATH environment variable, or in the location of the executing assembly

# apt-get install libmono-oracle2.0-cil



● ファイアウォールの設定(ポート開放)

(1) ポート番号の確認
  Mono (OpenSIM) のプロセス番号から、使用しているポート番号を確認します。
  (9000番ってわかってるけど、念のため)

root@sv:~# ps ax | grep mono
8257 pts/0 Sl+ 0:03 mono OpenSim.exe

root@sv:~# lsof -p 8257 | grep IP
mono 8257 root 6u IPv4 41525 TCP *:9000 (LISTEN)
mono 8257 root 10u IPv4 41526 UDP サーバ名:9000

Mono (OpenSIM) は、TCP/UDPの9000番を使用している事がわかります。


(2) ポートの開放
  このテスト用サーバは、Linuxカーネルが標準装備しているNetfilterで、ファイアウォールを動作させています。
  Netfilterの設定コマンド(iptables)で、TCP/UDPの9000番を開放(ACCEPT)します。

/sbin/iptables -A INPUT -i $WANPORT -p tcp -m state --state NEW -s $TRUSTWAN --dport 9000 -j ACCEPT
/sbin/iptables -A INPUT -i $WANPORT -p udp -s $TRUSTWAN --dport 9000 -j ACCEPT

※ $TRUSTWAN は、私の自宅のパソコンのIPアドレス
※ $WANPORTは、サーバのインターネット側のLANカードの事です。
(シェルスクリプトの先頭で、シェル変数として指定してます。)


(3) 設定の確認

root@sv:~# # iptables -L | grep 9000
ACCEPT tcp -- ホスト名/29 anywhere state NEW tcp dpt:9000
ACCEPT udp -- ホスト名/29 anywhere udp dpt:9000


● クライアントから接続~OpenSim終了

(1) 職場のLANからはつながりましたので、自宅に帰って、このテストサーバに接続確認。
  クライアントソフトのオプションに、接続先URL・ポートを指定して、接続テスト。

D:\SecondLife\SecondLife.exe -loginuri http://ホスト名:9000/ -loginpage http://ホスト名:9000/?method=login

文字ばかりの記事だと寂しいので、とりあえずSS。 ^^;



でも、SSの風景も寂しい。。。 ><;


(2) OpenSIMの終了
  コンソールから、shutdownを実行します。

Region# :shutdown

17:04:46 - [COMMANDFILE]: Running shutdown_commands.txt
17:04:46 - [COMMANDFILE]: Running 'backup'
17:04:46 - [SHUTDOWN]: Closing all threads
17:04:46 - [SHUTDOWN]: Killing listener thread
17:04:46 - [SHUTDOWN]: Killing clients
17:04:46 - [SHUTDOWN]: Closing console and terminating
17:04:46 - [SCENE]: Closing down the single simulator: OpenSim Test
17:04:46 - [Region]: Shutdown at 5/18/2008 5:04:46 PM
17:04:46 - [ScriptEngine.DotNetEngine]: ThreadAbortException while executing function.
17:04:46 - [ScriptEngine.DotNetEngine]: ThreadAbortException while executing function.

** (OpenSim.exe:8257): WARNING **: unknown MONO_PATCH_INFO_INTERNAL_METHOD
**
** ERROR:(mini.c:9326):mono_resolve_patch_target: code should not be reached
Aborted



● 予定は未定

さて、次はグリッドモード前準備で、データベースをSQLiteからMySQL5.0に変更してみよう。

他にも
 ・自宅の余っているMacOSXにもインストール。
 ・アカウントの作り方
 ・土地造成のお勉強
 ・アドオン(OpenLibrary)を試してみる
 ・スタンドアロンから、グリッドモードに移行
 ・パケット、セッションを解析してみる
 ・データベースの中を探検してみる。

などなどです。
OpenSim