なんとなく

誰得感満載な記事が多いかも。Mono関係とLinuxのサーバ関係、レビューとか。

さくらのVPSでOpenSimを動かす初期設定

さくらのVPSでOpenSimを動かしてみたので、まずは、その初期設定について記述します。
提供されるOSの状況は以下URIから確認できます。
http://support.sakura.ad.jp/manual/vps/ossetup.html

内容

  • VPSの初期設定
    • 一般ユーザ作成
    • sshd_configの設定
    • ロケールの変更
    • 自動起動の設定
    • パッケージのアップデート
  • OpenSimの設定(スタンドアローン)
    • monoのインストール
    • OpenSimの起動
  • OpenSimの設定(OSgrid)
    • mysqlのインストール
    • DBの作成
    • 実行ファイルのダウンロード
    • OSgridに接続するための設定
    • OSgridに接続

nameとか設定して飛べるようにすればいいのだけれどもしてないです。

VPSの初期設定

まず、sshdの設定です。

提供されたアカウントで2つターミナルを開き、どちらともrootでログインします。
もし、sshdの設定に失敗するとsshで接続することができなくなるための予防措置です。
まぁ、さくらの場合は、別方法でも接続できるからこれやらなくてもいいかも。

一般ユーザ作成

sshdの設定といったけど、root以外でログインするようにするので、当たり前なのだけれど、
まずは一般ユーザを作ります。

[root@foo ~]# adduser takeshich
[root@foo ~]# passwd takeshich
sshd_configの設定

本来であれば、鍵を使ったsshでのアクセスにするべきだと思うのですが、いろいろな端末からログインしたく、キーを複数コピーしたり、持ち歩きたくないので、アカウントでの認証でアクセスする方法にします。
ただ、rootで入れるというリスクと総当たり攻撃を避けたいという理由で通常ポートでのアクセスを避けます。
片方のターミナルで

[root@foo ~]# vi /etc/ssh/sshd_config

とし、

 #Port 22

Port 7122

にします。(ポートは任意です。)

また、

PermitRootLogin yes

PermitRootLogin no

に変更し、

[root@foo ~]# /etc/init.d/sshd restart

もうさらにひとつの端末を開き、変更したポートでアクセスし、rootでログインを試みます。
Access denyって表示されることを確認し、rootでログインできないことをできないことを確認します。

また、一般ユーザでログインでき、

[takeshich@foo ~]$ su -

でrootになれることを確認します。

この流れでrootのパスワードを変更しておきました。

[root@foo ~]# passwd

※rootのパスワードを変更するのは任意です。

ロケールの変更

デフォルトのen_US.UTF-8だと日本語を扱う場合に、影響が出るようなので、

[root@foo ~]# vi /etc/sysconfig/i18n

LANGの値を以下に変更します

LANG="ja_JP.UTF-8"
自動起動の設定

不要なサービスをあげないために
どのようなサービスがデフォルトで自動起動するようになっているか確認します。

[root@foo ~]# chkconfig --list
abrt-ccpp       0:off   1:off   2:off   3:off   4:off   5:off   6:off
abrt-oops       0:off   1:off   2:off   3:off   4:off   5:off   6:off
abrtd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
acpid           0:off   1:off   2:on    3:on    4:on    5:on    6:off
atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
auditd          0:off   1:off   2:off   3:off   4:off   5:off   6:off
cpuspeed        0:off   1:on    2:off   3:off   4:off   5:off   6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
haldaemon       0:off   1:off   2:off   3:off   4:off   5:off   6:off
ip6tables       0:off   1:off   2:on    3:on    4:on    5:on    6:off
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
irqbalance      0:off   1:off   2:off   3:on    4:on    5:on    6:off
kdump           0:off   1:off   2:off   3:off   4:off   5:off   6:off
lvm2-monitor    0:off   1:on    2:off   3:off   4:off   5:off   6:off
mdmonitor       0:off   1:off   2:off   3:off   4:off   5:off   6:off
messagebus      0:off   1:off   2:off   3:off   4:off   5:off   6:off
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
netfs           0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
ntpdate         0:off   1:off   2:on    3:on    4:on    5:on    6:off
postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off
psacct          0:off   1:off   2:off   3:off   4:off   5:off   6:off
quota_nld       0:off   1:off   2:off   3:off   4:off   5:off   6:off
rdisc           0:off   1:off   2:off   3:off   4:off   5:off   6:off
restorecond     0:off   1:off   2:off   3:off   4:off   5:off   6:off
rngd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
rsyslog         0:off   1:off   2:on    3:on    4:on    5:on    6:off
saslauthd       0:off   1:off   2:off   3:off   4:off   5:off   6:off
smartd          0:off   1:off   2:off   3:off   4:off   5:off   6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
sysstat         0:off   1:on    2:on    3:on    4:on    5:on    6:off
udev-post       0:off   1:on    2:off   3:off   4:off   5:off   6:off

postfixは使わないので、自動起動しないように止めます

[root@foo ~]# chkconfig postfix off
[root@foo ~]# chkconfig --list |grep 3:on

とし、結果にpostfixが含まれないことを確認します。
postfixが自動起動しているはずなので、プロセスとして上がっているか確認します

[root@foo ~]# ps aux|grep postfix

結果として、postfixが含まれているのを確認して、

[root@foo ~]# /etc/init.d/postfix stop
[root@foo ~]# ps aux|grep postfix

postfixが表示されず、動いてないことを再度確認します。

iptablesの設定

ソフトウェアファイアウォールとしてiptalesを使用してポートを塞ぎます。
OpenSimでのポートの開放もあるので、後で記載します。
初期状態では、動作しているようですが、ポートは塞がっていないようです。

パッケージのアップデート
[root@foo ~]# yum update

とし、最新のものにしておきます。

とりあえず、VPS側の初期設定はこのような感じですかね。
もし足りないものがあったらコメントください。

OpenSimの設定(スタンドアローン)

やっと、メインのOpenSimの設定になります。

インストールにあたり以下URIを参考にしました。
http://opensimulator.org/wiki/%E3%83%93%E3%83%AB%E3%83%89%E6%89%8B%E9%A0%86http://opensimulator.org/wiki/Dependencies/jahttp://opensimulator.org/wiki/Download/ja

monoのインストール

http://opensimulator.org/wiki/Dependencies/ja
をみると

OpenSimulator は Mono 2.4.3 以降が必須です。注意: OpenSimulator は Mono 2.8.x, 2.10.0, 2.10.1 で、パフォーマンスとスケーラビリティに関する致命的な問題を抱えていることが明らかになっています。Mono 2.10.2 現在では、スケーラビリティに関する問題は修正されたようです。このため、2.6.x か 2.10.2 以降を使用すべきでしょう。2.4.3 でもいいですが、今となっては超古いです。

と書いてあります。気分的に新しいものを使いたいのですが、

[root@foo ~]# yum info mono-core
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * epel: ftp.iij.ad.jp
Available Packages
Name        : mono-core
Arch        : i686
Version     : 2.4.3.1
Release     : 3.el6
Size        : 9.2 M
Repo        : epel
Summary     : The Mono CIL runtime, suitable for running .NET code
URL         : http://www.mono-project.com/Main_Page
License     : MIT
Description : This package contains the core of the Mono runtime including its
            : Virtual Machine, Just-in-time compiler, C# compiler, security
            : tools and libraries (corlib, XML, System.Security, ZipLib,
            : I18N, Cairo and Mono.*).

Name        : mono-core
Arch        : x86_64
Version     : 2.4.3.1
Release     : 3.el6
Size        : 9.2 M
Repo        : epel
Summary     : The Mono CIL runtime, suitable for running .NET code
URL         : http://www.mono-project.com/Main_Page
License     : MIT
Description : This package contains the core of the Mono runtime including its
            : Virtual Machine, Just-in-time compiler, C# compiler, security
            : tools and libraries (corlib, XML, System.Security, ZipLib,
            : I18N, Cairo and Mono.*).

調べてみると古いものが入っているようです。

http://opensimulator.org/wiki/%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83#Mono_.E3.81.AE.E3.83.AA.E3.83.9D.E3.82.B8.E3.83.88.E3.83.AA.E3.81.8B.E3.82.89.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB.E3.81.99.E3.82.8B
を参考にして、あたらしいmonoをインストールできるようにします。

[root@foo ~]# vi /etc/yum.repos.d/mono.repo

以下設定を投入します。CentS6.2なのですが、RHEL_5のものでも問題なく動くようです。rpmのセキュリティアップデートの影響で動きません*1

[mono]
name = novell-mono
baseurl=http://ftp.novell.com/pub/mono/download-stable/RHEL_5/
enabled=1
gpgcheck=0
[root@foo ~]# yum install mono-addon-core mono-addon-data mono-addon-data-sqlite mono-addon-extras mono-addon-web mono-addon-winforms mono-addon-libgdiplus0

として、monoをインストールします。

/opt/novell/mono/bin/

にmonoのバイナリがインストールされてしまいます。
気持ち悪い場合は、シンボリックリンクを貼るかPATHを通してあげる必要があります。今回は特に何もしてません。
他にmonoを使用する場合は、対応していたほうがいいと思われます。

ちなみにmonoはnovellよりxamarinという会社に移っていますので、URLが残っているという保証はありません。

追記(2012/04/29):解決しそうにないので代替案を。
ソースからコンパイルしてmonoをインストールします。

まずは、予めC#コンパイラがないと行けないはずなので、mono-develのパッケージを入れておきます。

[root@foo ~]# yum install mono-devel

ソースをダウンロードして、makeし、インストールします。/opt/novell/mono/にインストールされるようにしています。novellのrpmを利用してインストールした時と同じ所にインストールという意味です。

[takeshich@foo ~]$ cd ~
[takeshich@foo ~]$ wget http://download.mono-project.com/sources/mono/mono-2.11.1.tar.bz2
[takeshich@foo ~]$ tar xfj mono-2.11.1.tar.bz2
[takeshich@foo ~]$ cd mono-2.11.1
[takeshich@foo mono-2.11.1]$ ./configure --prefix=/opt/novell/mono/
[takeshich@foo mono-2.11.1]$ make -j3
[takeshich@foo mono-2.11.1]$ su -
[root@foo ~]# cd /home/takeshich/mono-2.11.1
[root@foo ~]# make install
OpenSimの起動

OpenSimは、monoで動きますので、コンパイルせずにバイナリファイルを実行すればいいようです。
OpenSimの起動は一般ユーザで行います。OpenSimに脆弱性があった場合、rootで実行しているとrootを取られてしまうリスクを
回避するためです。

[takeshich@foo ~]$ mkdir opensim
[takeshich@foo ~]$ cd opensim
[takeshich@foo opensim]$ wget http://opensimulator.org/dist/opensim-0.7.3.tar.gz
[takeshich@foo opensim]$ tar xvfz ./opensim-0.7.3.tar.gz
[takeshich@foo opensim]$ cd opensim-0.7.3/bin
[takeshich@foo bin]$ /opt/novell/mono/bin/mono OpenSim.exe

最初に起動すると必要事項を聞かれます。
http://opensimulator.org/wiki/%E8%A8%AD%E5%AE%9A#OpenSimulator_.E3.82.92.E6.9C.80.E5.88.9D.E3.81.AB.E8.B5.B7.E5.8B.95.E3.81.99.E3.82.8B
を参考にして埋めるといいでしょう。

OpenSimの設定(OSgridへの接続)

とりあえず

OSgridへ接続する際には、ほかシムとの通信が考えられるので一番最初はiptablesを適用せず、ほかシムとの通信できることを確認した上で、iptablesを実行するのが望ましいと思います。
明示的にiptablesを止めます。(初期設定ではどのポートも閉じられていないようです。)

[root@foo ~]# /etc/init.d/iptables stop
mysqlのインストール

OpenSimはバックエンドのDBがデフォルトでSQLiteなのですが、RDBMSを使用することもできます。
データが多くなることを考えるとRDBMSの堅牢性に軍配があると考えます。
OSgridに接続するので行います。

[root@foo ~]# yum install mysql-server

とし、インストールします。
自動起動するように設定をします。

[root@foo ~]# chkconfig mysqld on

起動するようなっているか確認します。

[root@foo ~]# chkconfig --list|grep 3:on
DBの作成

mysqlを起動してあげます。

[root@foo ~]# /etc/init.d/mysqld start
[root@foo ~]# mysql  -u  root

rootのパスワードが設定されていないようなので、設定する。rootpasswordではなく強度が高いのにしてくださいね。

mysql> set password = PASSWORD('rootpassword');

ユーザのない匿名アカウントが存在する場合、それを削除しておきます。

mysql> use  mysql;
mysql> select  host,user,password  from  user;
mysql> delete  from  user  where  user='';
mysql> select  host,user,password  from  user;

以下で、databaseとしてopensimを作成します。
opensimというユーザを作成、パスワードを任意のものを設定します。
passwordではなく強度が高いのにしてくださいね。
作成したユーザ(opensim)に対して作成したデータベース(opensim)のすべての権限を付与します。

mysql> create database opensim character set utf8;
mysql> create user 'opensim'@'localhost' identified by 'password';
mysql> grant all privileges on opensim.* to 'opensim'@'localhost';
mysql> flush privileges;
mysql> quit

データベースの設定はこれでおしまいです。

実行ファイルのダウンロード

http://www.osgrid.org/index.php/downloads
より、実行するためのファイルをダウンロードしてあげます。
スタンドアローンと同様、一般ユーザで実行するため、一般ユーザで作業します。
rootで作業して、最終的にchownしてもいいと思います。

[takeshich@foo ~]$ mkdir osgrid
[takeshich@foo ~]$ cd osgrid
[takeshich@foo osgrid]$ wget http://osgrid.googlecode.com/files/osgrid.opensim-03012012.v0.7.4.0007711.zip

現状は、上記のファイルですが、変更されているかもしれませんので、念のため、http://www.osgrid.org/index.php/downloads
を確認してください。

解凍します。

[takeshich@foo osgrid]$ unzip osgrid.opensim-03012012.v0.7.4.0007711.zip
OSgridに接続するための設定

OSgridへ接続するため変更しなければならない設定ファイルは、以下になります。

  • OpenSim.ini
  • GridCommon.ini
  • FlotsamCache.ini
  • Regions.ini

まず、上3つのテンプレートがあるのでそれをダウンロードします。
http://www.osgrid.org/index.php/downloads からたどれます。

[takeshich@foo osgrid]$ cd bin
[takeshich@foo bin]$ wget http://download.osgrid.org/OpenSim.ini.txt
[takeshich@foo bin]$ cd config-include/
[takeshich@foo config-include]$ wget http://download.osgrid.org/GridCommon.ini.txt
[takeshich@foo config-include]$ wget http://download.osgrid.org/FlotsamCache.ini.txt

ファイルを置き換えます。

[takeshich@foo config-include]$ cd ..
[takeshich@foo bin]$  mv OpenSim.ini.txt OpenSim.ini
[takeshich@foo bin]$ cd config-include/
[takeshich@foo config-include]$ mv GridCommon.ini.txt GridCommon.ini
[takeshich@foo config-include]$ mv FlotsamCache.ini.txt FlotsamCache.ini

mysqlを使いたいので

[takeshich@foo config-include]$ vi GridCommon.ini

SQLiteを使用する設定をコメントアウトしてあげます

    ;Include-Storage = "config-include/storage/SQLiteStandalone.ini";

mysqlの接続設定を有効にするため以下コメントアウト外し、作成したDBに設定した、ID,パスワードを入れます。

    StorageProvider = "OpenSim.Data.MySQL.dll"
    ConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=password;"
    ; Uncomment this line if you are using MySQL and want to use a different database for estates
    EstateConnectionString = "Data Source=localhost;Database=opensim;User ID=opensim;Password=password;"

Regions.iniの編集します。
http://www.osgrid.org/index.php/regionconnect
にて

Open Coordinate you may use :10147,10156

のように場所をおすすめされるのでそこを指定してあげます。

[takeshich@foo bin]$ cd Regions/
[takeshich@foo Regions]$ vi Regions.ini
Location = 10147,10156
OSgridに接続

スタンドアローンの場合と同様、実行します。

[takeshich@foo bin]$ /opt/novell/mono/bin/mono OpenSim.exe

初期実行時は、スターンドアローンと同じ項目を聞かれるはずです。
http://opensimulator.org/wiki/%E8%A8%AD%E5%AE%9A#OpenSimulator_.E3.82.92.E6.9C.80.E5.88.9D.E3.81.AB.E8.B5.B7.E5.8B.95.E3.81.99.E3.82.8B

ちょっと長くなってしまったので、

  • OpenSimの自動起動スクリプト
  • MySQLのdbのバックアップ
  • iptables
  • メガリージョン

については、次エントリで記述します。

*1:http://bugs.centos.org/view.php?id=5656