2011年7月30日土曜日

OpenSim on FreeBSD8.x (その4 - 設定・ログイン)

さて、いよいよOpemSimの設定を完了させて、SIMにログインしてみます。

SIMとリージョン

日本の多くのSLのユーザーは256m×256m(65536㎡)の土地の事をSIMと呼ぶことが多いのですが、正確にはその領域はリージョン(Region)と呼びます。SIMは本来はシミュレーター(Simulator)を表す用語です。一台のコンピュータには1つ以上のシミュレーターが動作しており、個々のシミュレーターは一つもしくは複数のリージョンを管理しています。
OpemSimの用語では、これらが区別されていますのでご注意ください。

スタンドアロンモードの設定

OpenSimの設定は、スタンドアロンモードとグリッドモードがあります。ここでは、一番簡単なスタンドアロンモードで設定してみましょう。設定の詳細に関しては、次を参照してください。

INIファイルの設定

binディレクトリ以下にある、INIファイルを設定します。
% cd bin
% cp OpenSim.ini.example OpenSim.ini
% cd config-include
% cp StandaloneCommon.ini.example  StandaloneCommon.ini

OpenSim.iniを編集して、ファイルの最後の方にある [Architecture] セクションで、 Standalone.ini の行のコメントを外し、スタンドアロンモードで起動するようにします。
% diff -c OpenSim.ini.example OpenSim.ini
*** OpenSim.ini.example Sat May 28 06:54:03 2011
--- OpenSim.ini Sat Jul 23 21:57:06 2011
***************
*** 735,741 ****
      ;; "config-include/StandaloneCommon.ini.example" to "config-include/StandaloneCommon.ini" before
      ;; editing it to set the database and backend services that OpenSim will use.
      ;;
!     ; Include-Architecture = "config-include/Standalone.ini"
      ; Include-Architecture = "config-include/StandaloneHypergrid.ini"
      ; Include-Architecture = "config-include/Grid.ini"
      ; Include-Architecture = "config-include/GridHypergrid.ini"
--- 735,741 ----
      ;; "config-include/StandaloneCommon.ini.example" to "config-include/StandaloneCommon.ini" before
      ;; editing it to set the database and backend services that OpenSim will use.
      ;;
!     Include-Architecture = "config-include/Standalone.ini"
      ; Include-Architecture = "config-include/StandaloneHypergrid.ini"
      ; Include-Architecture = "config-include/Grid.ini"
      ; Include-Architecture = "config-include/GridHypergrid.ini"

あと、bin/Regions/Regions.ini というファイルも必要なのですが、これはOpenSim.exeの初回実行時に自動的に作成されます。

DllMapの設定

DllMapとは、Windowsのライブラリ(.dll)とLinuxやUnixのライブラリ(通常 .so)の名前を対応づけるものです。DllMapの詳細は、Monoプロジェクトの「Config DllMap」のページを参照してください。
opensim-0.7.1.1-source.tar.gz を展開したときに binディレクトリにあらかじめ存在する .soライブラリはLinux用ライブラリのようですが、ここでは、その2・その3でコンパイルしたFreeBSD用の共有ライブラリ(.so)へ対応づけます。

Mono.Data.Sqlite.dll.config
以下の一行を追加。これで /usr/local/lib/libsqlite3.so を使うようになります。
% diff -c Mono.Data.Sqlite.dll.config.orig Mono.Data.Sqlite.dll.config
*** Mono.Data.Sqlite.dll.config.orig    Sat Jul 23 21:59:11 2011
--- Mono.Data.Sqlite.dll.config Sat Jul 23 21:59:30 2011
***************
*** 2,5 ****
--- 2,6 ----
    <dllmap os="osx" dll="sqlite3" target="./libsqlite3.dylib" />
    <dllmap os="!windows,osx" cpu="x86-64,ia64" wordsize="64" dll="sqlite3" target="./libsqlite3_64.so" />
    <dllmap os="!windows,osx" cpu="x86" wordsize="32" dll="sqlite3" target="./libsqlite3_32.so" />
+   <dllmap os="freebsd" cpu="x86" dll="sqlite3" target="libsqlite3.so" />
  </configuration>

OpenMetaverse.dll.config
以下の一行を追加。これで bin/libopenjpeg-dotnet-2.1.3.0-dotnet-1-i386.so を使うようになります。
% diff -c OpenMetaverse.dll.config.orig OpenMetaverse.dll.config
*** OpenMetaverse.dll.config.orig       Sat Jul 23 22:00:00 2011
--- OpenMetaverse.dll.config    Sun Jul 24 13:52:52 2011
***************
*** 4,7 ****
--- 4,8 ----
      <dllmap os="!windows,osx" cpu="x86-64,ia64" dll="openjpeg-dotnet-x86_64.dll" target="libopenjpeg-dotnet-2.1.3.0-dotnet-1-x86_64" />
      <dllmap os="!windows,osx" cpu="x86" dll="openjpeg-dotnet.dll" target="libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686" />
      <dllmap os="!windows,osx" cpu="x86" dll="openjpeg-dotnet-x86_64.dll" target="libopenjpeg-dotnet-2.1.3.0-dotnet-1-i686" />
+     <dllmap os="freebsd" cpu="x86" dll="openjpeg-dotnet.dll" target="./libopenjpeg-dotnet-2.1.3.0-dotnet-1-i386.so" />
  </configuration>

Ode.NET.dll.config
たまたま何も変更しなくても、/usr/local/lib/libode.so を使います。

OpenSim起動!

いよいよ OpenSim の起動です。次のコマンドを入力し、OpenSimを起動してください。初回起動時には、リージョンに関する問い合わせと、リージョンが属する土地名、土地のオーナー名とパスワードが問い合わせられます。アンダーラインの部分はユーザーが入力するところですので必要に応じて変更してください。デフォルトを選択する場合はそのまま改行を入力してください。
ここでは以下のとおり設定しました。
  • リージョン名:  TestSim
  • 外部ホスト名: 192.168.1.123 (DNS等が設定されていてFQDNでアクセスできるなら、その名前でもOK)
  • 土地名: My Estage
  • 初期土地所有ユーザー名: Test User
% mono OpenSim.exe
...
...
=====================================

We are now going to ask a couple of questions about your region.

You can press 'enter' without typing anything to use the default

the default is displayed between [ ] brackets.

=====================================

New region name []: TestSim
Region UUID [d607753e-8d74-4550-8b39-544f3d30b4dc]:
Region Location [1000,1000]:
Internal IP address [0.0.0.0]:
Internal port [9000]:
Allow alternate ports [False]:
External host name [SYSTEMIP]: 192.168.1.123 (FQDNもしくはIPアドレス)
...
...
Region TestSim is not part of an estate.
No existing estates found.  You must create a new one.
New estate name [My Estate]:
...
...
Estate My Estate has no owner set.
Estate owner first name [Test]:
Estate owner last name [User]:
Password: パスワードを入力します
Email []:
...
...
Region (TestSim) #
起動後は、ユーザーからのコマンド入力待ちになっています。「help」を入力すればコマンド一覧が表示されます。また、リージョンの設定情報は「bin/Regions/Regions.ini」に保存されています。

OpemSimを終了するには、「shutdown」もしくは「quit」コマンドを入力してください。
Region (TestSim) # shutdown

ビュアーの設定とログイン

OpenSimへの接続URIは、今回の設定の場合次のようになります。
http://ExternalHostName:InternalPort/
http://192.168.1.123:9000/  (<-- 今回の設定の場合はコレ)
ビュアーのソフトウェアはいろいろありますが、ここではOSgridのDownloadページにある、「Imprudence Viewer」を使うことにします。Imprudenceをインストールし、起動後にGrid Managerでグリッドを追加します。


手順は次の通りです。
  1. [Grid Manager]ボタンを押し、パネルを開きます。
  2. [Add New Grid]ボタンを押し、新規グリッドの入力フォームを追加します。
  3. Grid name: フィールドに「TestSim」を入力します(自分が識別できるならTestSimでなくても構いません)。
  4. Login URI:フィールドに接続URIの「http://192.168.1.123:9000/」を入力します。
  5. OKボタンを押してパネルを閉じた後、Grid:リストボックスから、3.で入力したTestSimを選択します。
  6. ユーザー名・パスワードを入力し、
  7. [ログイン]ボタンを押してログインします。

ログイン後の状態はこんな感じです。


SIMの真ん中に無人島(たこ焼に見える人もいるらしい :-)がポツリとあります。


これが初期のアバターです。名前はルース(Ruth)というらしいです。目玉がありませんし、なんか顔が怖い(^_^;)。


このまんまだと、無人島に1人で寂しいので、土地に音楽でも流してみます。

  1. メニューバーのリージョン名の部分をクリックするか、メニューの[世界]→[About Land]をクリックして、「土地情報」のパネルを開きます。
  2. 音楽のURL:に、お好みのネットラジオや音楽ストリーミングのURLを入力します(Web検索すればいっぱいみつかると思います)。また、Webサーバー等に置かれているmp3ファイルのURLを入力すれば、ストリーミングではなくダウンロード再生されます。
まあ、物つくったりスクリプトいじってみたりして、いろいろと遊んでみてください。

とりあえず完了

これで、FreeBSD8.xでOpenSimを動かすまでは完了です。しかし、ODEまわりがWindowsでOpenSimを動かした場合となんとなく違う挙動をするとか、FreeBSDのデフォルトのスタックサイズが64MBと、ODEうごかすにはちょっと小さいらしいとか...、データベースをMySQLにしたいとか、まだまだなところはいっぱいあります。
まあ、それは今後の課題ということで、気が向いたときに書くことにします(^_^;)。

2011年7月23日土曜日

OpenSim on FreeBSD8.x (その3 - OpenSimユーザー作成・ビルド)

今回はOpenSimを実行させる専用ユーザーを作成し、そのユーザーでOpenSimをビルドします。

OpenSim実行ユーザーの作成

OpenSimはネットワークから接続されるサーバーソフトウェアなので、root権限のまま実行するのは好ましくありません。万一バグがあった場合、そのサーバーの全権限を奪われてしまう可能性があります。

そこで「opensim」という名前のユーザーを作成し、このユーザーでOpenSimを動作させます。rootユーザーでadduserコマンドを実行してください。アンダーラインの部分はユーザーが入力するところです。デフォルトを選択する場合はそのまま改行を入力してください。
# adduser
Username: opensim
Full name: OpenSim Owner
Uid (Leave empty for default):
Login group [opensim]:
Login group is opensim. Invite opensim into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash rbash nologin) [sh]: csh
Home directory [/home/opensim]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password: パスワードを入力します
Enter password again: 再度パスワードを入力します
Lock out the account after creation? [no]:
Username   : opensim
Password   : *****
Full Name  : OpenSim Owner
Uid        : 1001
Class      :
Groups     : opensim
Home       : /home/opensim
Home Mode  :
Shell      : /bin/csh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (opensim) to the user database.
Add another user? (yes/no): no
Goodbye!
Shellには「csh」を指定してますが、好みのものを指定してください。

OpenSimのコンパイル

先ほど作成した「opensim」ユーザーでログインしOpemSimをコンパイルします。FreeBSDの場合、Alt-F2~F8をおして別の仮想コンソールからログインすると便利かもしれません。ちなみに、私はVirtualBoxのFreeBSDにsshでログインできるようにしてTera Termでログインして作業してます。
ログインしたら、opensim というディレクトリをホームディレクトリ直下に作成し、ここにソースコードを展開してOpenSimをインストールすることにします。ソースコードはOpenSimのサイトのホームにある「Source Tarball (0.7.1.1)」のリンクからダウンロードします。FreeBSDはfetchコマンドでhttpダウンロードができます。
% cd
% mkdir opensim
% cd opensim
% fetch http://dist.opensimulator.org/opensim-0.7.1.1-source.tar.gz
% tar -x -v -z -f opensim-0.7.1.1-source.tar.gz
% cd opensim-0.7.1.1-source
... README.txt, BUILDING.txtをよく読むこと ...
% ./runprebuild.sh
% nant
% cd bin
... コンパイル結果と設定ファイルの雛形が bin ディレクトリにあります ...
コンパイルは、私のCore2Quad Q9550 2.83GHzのマシンで105秒ほどでした。この後、binディレクトリにある、INI設定ファイルを環境に合わせて変更します。
しかしその前に、openjpeg-dotnet.dllに対応するlibopenjpeg-dotnetのFreeBSD対応共有ライブラリがないので、これをまずコンパイルします。

libopenjpeg-dotnetのコンパイル

OpenSimのBuild Instructionsのページでは、subversionで、リポジトリから直接チェックアウトしてコンパイルするようにとあるのですが、必要ないものも大量にチェックアウトされますし、ちゃんとメンテナンスされているのかも不明でした。この為、Open Metaverse Foundationの本家から直接最新版のソースコード(現時点で LibOpenMetaverse Release 0.9.0)を取得してきて、これにFreeBSD用パッチをあててコンパイルします。

パッチファイルは次のとおりです。こちらからダウンロードするか、コピペして「~/opensim/openjpeg-dotnet_freebsd.patch」に保存してください。
Makefileへのパッチは、ごらんのとおりi386の32bitにしか対応してません。64bitや他のアーキテクチャへの対応は、前後をみて各自トライしてみてください :-)。
diff -ru openjpeg-dotnet.orig/Makefile openjpeg-dotnet/Makefile
--- openjpeg-dotnet.orig/Makefile       2011-05-19 00:35:02.000000000 +0900
+++ openjpeg-dotnet/Makefile    2011-06-15 12:44:04.000000000 +0900
@@ -38,6 +38,14 @@
   endif
 endif

+ifeq ($(OSNAME), FreeBSD)
+  ARCH = $(shell uname -p)
+  ARCHSET = 0
+  ifeq ($(ARCHSET), 0)
+    ARCH=-i386
+    ARCHFLAGS=-m32
+  endif
+endif

 # Converts cr/lf to just lf
 DOS2UNIX = dos2unix
diff -ru openjpeg-dotnet.orig/libopenjpeg/opj_malloc.h openjpeg-dotnet/libopenjpeg/opj_malloc.h
--- openjpeg-dotnet.orig/libopenjpeg/opj_malloc.h       2011-05-19 00:35:02.000000000 +0900
+++ openjpeg-dotnet/libopenjpeg/opj_malloc.h    2011-07-15 12:43:15.000000000 +0900
@@ -76,7 +76,7 @@
        #if defined(__sun)
                #define HAVE_MEMALIGN
        /* Linux x86_64 and OSX always align allocations to 16 bytes */
-       #elif !defined(__amd64__) && !defined(__APPLE__)
+       #elif !defined(__amd64__) && !defined(__APPLE__) && !defined(__FreeBSD__)
                #define HAVE_MEMALIGN
                #include <malloc.h>
        #endif
次に、libomv-0.9.0-source.zip をダウンロードし、パッチをあて、コンパイルします。unzipコマンドは、前回のツール・ライブラリインストール時にすでにインストールされている為、使えます。ライブラリのメイクにはgmakeコマンドを使ってください。
% cd ~/opensim
% fetch http://libopenmetaverse.googlecode.com/files/libomv-0.9.0-source.zip
% unzip libomv-0.9.0-source.zip
% cd libomv-0.9.0-source/openjpeg-dotnet/
% patch -p1 -l < ../../openjpeg-dotnet_freebsd.patch
% gmake
コンパイルが完了すると、カレントディレクトリに「libopenjpeg-dotnet-2.1.3.0-dotnet-1-i386.so」という共有ライブラリができているはずです。これをOpenSimのbinディレクトリにコピーします。
% chmod -x libopenjpeg-dotnet-2.1.3.0-dotnet-1-i386.so
% cp libopenjpeg-dotnet-2.1.3.0-dotnet-1-i386.so ../../opensim-0.7.1.1-source/bin/
コピーする前に共有ライブラリの実行属性を落としていますが、まあ気分の問題です。


以上で、OpenSimのコンパイルは完了です。次回はOpenSimの設定を完了させ、いよいよ自分のSIMにINしてみます。

(その4に続く)

2011年7月22日金曜日

OpenSim on FreeBSD8.x (その2 - ツール・ライブラリの用意)

今回はOpenSimをインストールするのに必要なツール、ライブラリ環境等を構築します。

FreeBSDのインストール

まずは、FreeBSDのインストール。私はFreeBSD8.2をMinimalでインストールし、X Windowシステム等のデスクトップ環境はインストールしませんでした。作業はすべてコンソール、もしくはsshでリモートログインして行ないます。Minimalだと余計なソフトウェアが入らないので、インストール直後のディスクは300MBほどです(Portsもインストールすると800MBほどになります)。

ちなみに、私はFreeBSD8.2をVirtualBoxというフリーなx86仮想化ソフトウェアを使って、WindowsXP上で動かしました。 別途ハードウェアを用意しなくてもテストできますし、環境の複製や、やり直しも簡単にできるので非常に便利です。もちろん、普通のハードウェアにインストールしても全く同じでとくに変わるところはありません。

FreeBSDには、Portsというソフトウェアをソースコードから簡単にインストールできるようにするシステムがあります。Portsを使うと、ソースコードを取得してパッチを当て、コンパイル、インストール、バイナリパッケージの作成という一連の手順が自動化されます。Portsは、通常 /usr/ports 以下に展開されます。FreeBSDのインストール時に「Ports Collectionをインストールするか?」と聞かれた場合はインストールしておいてください(後から sysinstallコマンドでインストールすることもできます)。

必要なツール・ライブラリのインストール

ファイルの内容やコマンドの入力を示すのに次のような表記を使います。
端末での入力は、背景が黒の枠で示します。
# <-- 行の頭が「#」の場合はrootユーザーを示します。
% <-- 行の頭が「%」の場合はroot以外の一般ユーザーを示します。
「#, %」はコマンド入力のプロンプトなので、実際には入力しないでください。
ファイルの内容などは、背景が白(うすい黄)の枠で示します。

/etc/make.conf
私の環境では、X Windowシステムを使いませんので、/etc/make.confに以下の行を追加しています。
WITHOUT_X11=yes
BATCH=yes
WITHOUT_X11=yes」を指定しないと、Portsインストール時にX Windowシステム全体をコンパイルしようとするかもしれません。「BATCH=yes」は、portupgrade等のツールで一気にインストールしているソフトウェアをアップデイトする場合に、いちいち会話モードでコンパイルの選択肢をダイアログで聞かないようにする為に指定してます。

Monoのインストール(かなり時間かかります)
# cd /usr/ports/lang/mono && make install clean

Nantのインストール
Monoに依存するので、Monoインストール後に実行します。
# cd /usr/ports/devel/nant && make install clean

Sqlite3のインストール
OpenSimが使うデータベースです。MySQLも使えますが、今回はお手軽な sqlite3 を使います。
# cd /usr/ports/databases/sqlite3 && make install clean

libgdiplusのインストール(これもわりと時間かかります)
# cd /usr/ports/x11-toolkits/libgdiplus && make install clean

ODE(Open Dynamic Engine)のインストール
そのままコンパイルすると不具合があるので、以下のMakefile.localファイルを /usr/ports/devel/odeに作成します。
#
# Makefile.local  --- Local settings for OpenSIM
#

CONFIGURE_ARGS+=--disable-asserts
CONFIGURE_ARGS+=--enable-shared
CONFIGURE_ARGS+=--disable-demos
CONFIGURE_ARGS+=--with-drawstuff=none

pre-configure:
        @cd ${WRKSRC} && ${SH} autogen.sh
その後、make install します。
# cd /usr/ports/devel/ode && make install clean


rootユーザーでインストール作業するのはこれで完了です。

(その3に続く)

2011年7月20日水曜日

OpenSim on FreeBSD8.x (その1 - はじめに)

これから何回かに分けて、FreeBSD8.xでOpenSimを動かすまでを書いていこうと思います。

OpenSimについて

OpenSimは、自分のコンピュータ上にSL互換のSIM環境を作り上げるオープンソースソフトウェアです。完全に互換というわけではありませんし、SLとの完全互換を目指しているわけではありませんが、細かい差異を除き、ほぼ同じように動作します。OpenSimの詳細については、以下のリンク先をご覧ください。
OpenSimはC#言語で書かれており、Windows環境以外では、C#言語処理系のオープンソース実装である「Mono」を使って構築されています。

FreeBSDについて

FreeBSDは、フリーなBSD系UNIXの一つです。これもオープンソースで開発されているもので、起源はLinuxより古い、由緒正しきUNIXです。サーバーOSとして使用したときの安定性には定評があり、今も精力的に開発が進められています。

FreeBSD上のOpenSimについて

OpenSimの開発は、Linux上がメインのようですが、私は以前からFreeBSDを使っていてLinuxはあまり使った事がありません(インストールして遊んでみたことがあるぐらい)。OpenSim本家のBuildingのページには、FreeBSDの構築例があるにはあるのですが、実際にやってみると肝心なところの情報が不足してたりして、すんなりとコンパイルできませんでした。いろいろ試行錯誤しているうちに、なんとか動くようになったんですが、なんとなく動作が怪しかったりしたので、公開するには至りませんでした。
そうこうしているうちに月日は流れ、FreeBSDのバージョンやOpenSim・Monoのバージョンがあがってきて、それなりに動くようになってきました。

FreeBSDやOpenSim、Monoについてたいして詳しいわけでもないのですが、FreeBSD上でのOpenSim動作の実績ということで、参考になる人もいるのではないかと思い、ここらで一度情報をまとめておくことにしました。

(その2に続く)

Blogをはじめた理由

今回Blogをはじめたのは、「つれづれなるままに人もすなるBlogといふものを我もしてみむとてすなり」というのが理由なんですが、OpenSimという自分のコンピュータ上にSL互換のSIM環境を作り上げるソフトウェアが、FreeBSDというOSの上でどうにかこうにか動くようになってきたので、これに関する情報を一度まとめておこうと思ったというのもあります。まあ、まとめとけば参考になる人もいるんじゃないかな、いるといいなーっという訳です。

この手の文章を書き出すと、わりとダラダラと分かりにくく、読みにくいものを書いちゃうんで、どうしたら、ほかの人が書いてるような見やすくて解りやすいものになるか、研究中というところ。今は、Bloggerと格闘中というところです。

やっぱりコード断片とかをレイアウトするのに、CSSとか使ってスタイルを自分で定義した方がいいのかなぁー...と考え中だったりします。

2011年7月16日土曜日

Second Lifeをはじめた理由

Second Life (以下SL) を初めて知ったのは、2007年3月頃の「Second Life“不”人気、7つの理由」というITmediaの記事でした。「フーン、また出会い系っぽい怪しいサービスをインチキテクノロジー(IT)な会社が始めたのかな...」程度に思ってました。ただ、あんまりにもボロクソに書いてあったので、逆にちょっと見てみたい気がしたのです。無くなる前に見ておきたいという、そういう心理だったのかもしれません。

当時は3Dがまともに動くコンピュータをもっていなかったので、この手の3Dオンラインゲーム類はやったことがありませんでした。でも、手元にあった Intel iMac (Core2DuoではないタダのCore Duo)でもSLが動くらしいので、さっそくアカウントをとって始めてみました。これが2007年5月末。「Xpyoda Janus」って名前は、その時に適当につけた名前です。でも、こんなに長い間やるんなら、もっとちゃんとした名前にしときゃ良かった...。

最初は、わけも分からずにウロウロしてましたが、やがてSLはかなり広大な仮想空間である事に気づいてきました。そして全世界の人が同じ時間を共有し、そこで暮らしているということも分かってきたのです。そして、これが一番興味が惹かれたところですが、SL内のオブジェクトを、ユーザーが自分で作成し、自分で書いたスクリプトで動作を制御できるということでした。昔プログラマだったので、このスクリプトでオブジェクトを制御し他のオブジェクト・アバターと通信しあうというのは、非常に面白いと思えました。

そんなこんなで、SL内をうろうろしたり、スクリプトでゴニョゴニョしたりしてるうちに、SL内に知り合いもできて、気がついたら割と長い間SLやってたなぁ、私、って思ってます。ほんと自分でも不思議だと思います。

2011年7月9日土曜日

My First Blog

Bloggerにアカウントつくってから、ずーっと放置でした。でも書いてみないことにはシステムにも慣れないので、とにかくやってみることにします。

というわけで、最初のエントリー(^_^;)。
今後とも宜しく。