FAQ/ja

OpenSim って何？
OpenSim は仮想世界を操作するプラットフォームで、複数の独立した地域を１つのグリッドを中心として連結することができるようになります. これはある意味 Web に似ていて、誰でも自分の Web サーバを動作させて、インターネットを通して相互に接続するようなイメージです. これを使って、プライベートなイントラネットに似た、プライベートグリッドを作成することもできます.

Region（地域）って何？
地域とは、OpenSim にログインしたときに目に見えるものです. 物理空間（いや、仮想物理空間）で、アバターが動いたり交流したりします. 四角形に区切られた土地で、島、山、飛行機、ビルなどがあったり、海だけだったりします.

Grid（グリッド）って何？
グリッドとは、世界の中でにある地域や地域の位置を管理する層で、地域に共通で存在していなければならないもの、例えばユーザのインベントリなどを操作します. 世界地図と同じと考えることもできます.

…どういうこと？
OpenSim で共通に使われる用語は、 OpenSim:Technical Reference に定義されています.

OpenSim の設定
最初に、設定を読んでください.

自分の SIM の設定に使う UUID をどこで入手できるの？

 * 設定を読んでください.

OpenSim で複数の地域を起動できるの？

 * 設定を読んでください.

OpenSim で使えるデータベースは？

 * 設定を読んでください.

データ移行でエラーが表示された
OpenSim に保存されているデータに変更があるとき、なんらかの理由でデータ移行に失敗すると、バージョンアップ時に発生する可能性があります.

OpenSim のコンソールに、このようなエラーが表示されます.

[LLOGIN SERVICE]: Exception processing login for [username]: MySql.Data.MySqlClient.MySqlException: Table 'opensim.UserAccounts' doesn't exist at MySql.Data.MySqlClient.MySqlStream.OpenPacket [0x00000] at MySql.Data.MySqlClient.NativeDriver.ReadResult (System.UInt64& affectedRows, System.Int64& lastInsertId) [0x00000] at MySql.Data.MySqlClient.MySqlDataReader.GetResultSet [0x00000] at MySql.Data.MySqlClient.MySqlDataReader.NextResult [0x00000]    at MySql.Data.MySqlClient.MySqlStream.OpenPacket  [0x00000] at MySql.Data.MySqlClient.NativeDriver.ReadResult (System.UInt64& affectedRows, System.Int64& lastInsertId) [0x00000] at MySql.Data.MySqlClient.MySqlDataReader.GetResultSet [0x00000] at MySql.Data.MySqlClient.MySqlDataReader.NextResult [0x00000]

この場合は、'users' テーブルが 'UserAccounts' に移行されていないのに、 OpenSim は、このテーブルがあるという前提でアクセスしてしまいました. ビューア側でもエラーとなります.

Login Failed Error generating Login Response

移行に失敗していた原因となっていた、ファイルシステムのパーミッションを修正し（Linux マシンで '/var/lib/mysql/...' がぐちゃぐちゃになっていました）、'migration' テーブルを削除してサーバを再起動したら解決しました（移行時に [non-critical] 警告が出たので、たぶんもっと良い方法があったのだと思いますが、手詰まりだったので、安直にいきました）. 地形データの参照や現在のシェイプ・服・アタッチメントのデータが消えてしまったこと以外は（これらは SIM の中で復旧できます）、今のところ問題はありません.

OpenSim サーバをセットアップし、ログインに成功しているようですが、クライアントが「地域に接続しています」でハングアップします
2 段階でログインします.

1) クライアントを起動して名前とパスワードを入れると、OpenSim ログインサービスに内容が送信されます. パスワードが正しいと、地域シミュレータに、これからあなたが行くことを知らせます. そして、地域に入るのに使う IP アドレスとポート番号を（Region.ini ファイルに書かれている通りに）あなた（クライアント）に送り返します.

2) クライアントがこれらの情報をもとに地域に接続します.

クライアントが「リージョンに接続しています」でハングアップしている場合、ステップ 2) で受信した情報で接続できていません. Regions.ini をしっかり確認して、Telnet で IP アドレスとポート番号が正しいか調べてみてください.

今まで外部（ネットワークの外部の人が接続できるがあなたが接続できないところ）から接続できていたのにこの問題が発生している場合は、おそらくルータが NAT ループバックをサポートしていません. NAT ループバックを使うと、外部アドレスを使ってルータ経由でローカルマシンに接続できるようになります. この機能をサポートするルータのリストは、NAT_Loopback_Routers にあります.

OpenSim が動作しているテストサーバで私が接続してもいいものはありますか？
はい. グリッドリストを調べてみましょう！多くのプライベートサーバが、しばしばテスト用に公開されています. IRC チャネル (Freenode #opensim) にアクセスして、URI を探してみましょう.

ディレクトリと検索エンジンを提供しているプライベートな組織もあります. 例えば:


 * Hyperica -- Hypergrid が使用できる OpenSim デスティネーションの、カテゴリで分類されたディレクトリ. 現在 250 以上のロケーションが登録されています.
 * MetaverseInk -- OpenSim グリッドの HA キーワードベースのサーチエンジン. ほとんどが Diva Distro によって運営されています.
 * GridHop -- メジャーな OpenSim グリッドを網羅したリスト. 現在 150 デスティネーションが Hypergrid テレポートでアクセスできます.
 * HGURL -- 全グリッドのキーワード検索データベース. 全て Hypergrid（サーチエンジンやインワールドの情報にアクセスする、発展途上の API）でアクセス可能です.
 * The Hypergates -- Hypergate テレポートネットワークの一部となっている、Hypergrid が使用可能なデスティネーションのディレクトリ.

Second Life グリッドから私の SIM にテレポートできますか？
いいえ. 2008 年と 2009 年には、 vaak グリッドというグリッドに接続でき、Second Life から OpenSim グリッドにテレポートできたのですが、Linden Lab が接続を終了しました. 2010 年時点で、「vaak グリッドは現在使用できません. OGP ベースのサービスから VWRAP ベースのサービスに移行するためです. 」（Second Life Wiki の "Open Grid Public Beta"）

MySQL のグリッドデータベースにある、ユーザのゴミ箱アイテムを特定して削除するには？
注意: データベースのバックアップを取りましょう！

警告: Linux の MySQL データベースのデフォルトディレクトリは /var/lib/mysql です. 多くのバックアップツール（例えば backupPC）は /var/* にバックアップされません！データベースや単なる MySQL コード (/usr/bin/mysql) 以外のものが最新のバックアップに含まれているか確認しましょう！実際の手順はオペレーティングシステムやデータベースによって異なりますが、問題は共通しています.

1. ゴミ箱のアイテムを見つけたいアバターの UUID を users テーブルで探します.

このクエリで当該ユーザの UUID を検索します: （User/Test をユーザネーム/ラストネームに書き換えてください） SELECT `UUID` FROM `users` WHERE `username` LIKE 'User' AND `lastname` LIKE 'Test' LIMIT 0, 30;

2. アバターの UUID を使って、フィールド名 AgentID を inventoryFolders テーブルで探します. Trash を folderName に指定して、ユーザのゴミ箱の folderID を特定します.

このクエリでユーザのゴミ箱フォルダのエントリを検索します: （00000000-0000-0000-0000-000000000000 をユーザの UUID に書き換えてください） SELECT `folderID` FROM `inventoryfolders` WHERE `agentID` LIKE '00000000-0000-0000-0000-000000000000' AND `folderName` LIKE 'Trash' LIMIT 0, 30;

3. 最後のクエリで取得した folderID UUID を使い、 inventoryitems テーブルの中の全てのゴミ箱アイテムを探します. 特定したら、削除することができます.

このクエリで当該アバターのゴミ箱アイテムを検索します: （00000000-0000-0000-0000-000000000000 を先のクエリで取得したゴミ箱フォルダの UUID に書き換えてください） SELECT * FROM `inventoryitems` WHERE `parentFolderID` LIKE '00000000-0000-0000-0000-000000000000' LIMIT 0, 9999;

 注意:  これらの手順では、関連するアセットをアセットテーブルから削除しません. inbentoryitems テーブルにある、インベントリ中のアイテムだけを削除します.

MySQL のグリッドデータベースにある、重複したインベントリフォルダエントリを特定して対処するには？
注意: データベースのバックアップを取りましょう！

1. 最初に、当該アバターの UUID を inventoryFolders テーブルで検索して、重複エントリがないか調べるとよいでしょう. 見たら、重複エントリで問題となっている箇所がわかるでしょう. どこで使われているかを探すのがポイントです.

2. ファイルをインワールドにアップロードし、適当な一意名をつけます. これであなたが使っているルートフォルダの UUID を特定できます（重複しているのに使われているのは１つだけということもありますが）.

3. inventoryitems テーブルを一意名で検索して、parentFolderID を特定します.

このクエリは一意名のアイテムを検索することによって parentFolderID を特定します（unique_name をアイテムの一意名に書き換えてください） SELECT `parentFolderID` FROM `inventoryitems` WHERE `inventoryName` LIKE 'unique_name' LIMIT 0, 30;

4. inventoryfolders テーブルを、最後の検索で取得した parentFolderID UUID で調べます. これが使われているルートフォルダです. parentFolderID でヒットしない重複エントリを全て削除できます. 最終的に、それぞれのタイプ（Trash など）で１つずつある状態にします.

このクエリは、最後の検索で取得した parentID でないものを全て返します. （00000000-0000-0000-0000-000000000000 をステップ 3 で特定した parentID に書き換えてください） SELECT * FROM `inventoryfolders` WHERE `folderID` NOT LIKE '00000000-0000-0000-0000-000000000000' LIMIT 0, 30;

インワールドのスクリプトは動作しますか？
完全には実装されていませんが、鋭意実装中です. 最新の情報は ScriptEngines, LSL Status, OSSL Status を参照してください.