OSgirdのログイン&テレポートチェッカーを作ってみた

LibOpenMetaverseで、OSgirdのログイン&テレポートチェッカーlogininfo.exeを作ってみた
この前、OSGridの予期しないリスタートで、それにたまたま気が付いて、自プロセスも再スタートさせましたが、
もし気が付かなかったら、OSGridの中心街(10000,10000)に近いこともあり、場所を他の人にとられることもあります。
(その後気づいたのですが、MANIAXXのOSG48からもリスタート連絡が来ていました。ありがとうございます。)

logininfo.exeは、logintime.txt(テレポート時間とSIM名が記載)を生成するので、この内容を見て一定時間ログインできてなかったらメールするなり、プロセスを再起動するなりのスクリプトを作成すればいいかと思います。
(また、後ほど作成する予定)

[logininfo.exe] ダウンロードはこちら
1.OpenSim.exeのある場所にコピーする。
2.起動方法:
【Windows】
1) OpenSim.exeのある場所に移動。
2) logininfo.exe firstname secondname password “simname/128/128/40” “http://login.osgrid.org”
を実行。成功した場合、戻り値0が返ります。また同フォルダーにlogintime.txt(テレポート時間とSIM名が記載)を生成。
戻り値:
0:成功
1:失敗(ログインタイムアウト)
2:ログインできたものの該当SIMに行けず
3:失敗(その他の例外エラー)

C:projetcsopensim>logininfo.exe xxxx xxxxx xxxxxxx “aska/128/128/40” “http://login.osgrid.org”
Login:…xxxx xxxxx
Login success Welcome to OSGrid…
Teleported [aska]
Logout:…
C:projetcsopensim>echo %ERRORLEVEL%
0
C:projetcsopensim>type logintime.txt
2013/02/09 22:11:47
aska

C:projetcsopensim>logininfo.exe xxxx xxxxx xxxxxxx “1aska/128/128/40” “http://login.osgrid.org”
Login:…xxxx xxxxx
Login success Welcome to OSGrid…
Cannot teleport [1aska] now [Lbsa Plaza]
Logout:…

C:projetcsopensim>echo %ERRORLEVEL%
2

3) Windowsのタスクスケジュールにセットするときは、
タスクスケジュールを起動してスケジュールを登録します。15分置きの場合。

引数の追加(オプション)には、firstname secondname password “simname/128/128/40” “http://login.osgrid.org”
をセット。
開始(オプション)には、OpenSim.exeがあるディレクトリーをセット

成功すれば15分置きに、OpenSim.exeがあるディレクトリーにlogintime.txtが生成されます。

【Linux】
1) OpenSim.exeのある場所に移動。
2) /usr/local/bin/mono logininfo.exe firstname secondname password “simname/128/128/40” “http://login.osgrid.org”
を実行。戻り値等、windowsと同様です。

[root@www8054ue opensim]# /usr/local/bin/mono logininfo.exe xxxx xxxxx xxxxxxx “aska/128/128/40” “http://login.osgrid.org”
Login:…xxxx xxxxx
Login success Welcome to OSGrid…
Teleported [aska]
Logout:…
[root@www8054ue opensim]# echo $?
0

[root@www8054ue opensim]# /usr/local/bin/mono logininfo.exe xxxx xxxxx xxxxxxx “1aska/128/128/40” “http://login.osgrid.org”
Login:…xxxx xxxxx
Login success Welcome to OSGrid…
Cannot teleport [1aska] now [Lbsa Plaza]
Logout:…
[root@www8054ue opensim]# echo $?
2

LinuxnのCRONにセットするとき、
このまま、セットすると場合によってプロセスが残ったままになります。一応、タイムアウトで必ず終了するように作ってあるのですが、どういうわけか,終了しない場合があるので、以下のperlスクリプトで必ず終了するようにします。 osgrid_login.plをCRONにセットすればOKです。

[osgrid_login.pl]

#!/usr/bin/perl
chdir “/projects/opensim/”;

$cmd = ‘/usr/local/bin/mono logininfo.exe firstname secondname password “simname/128/128/40” “http://login.osgrid.org”‘;

$cmd_flg = 1;
eval{
local $SIG{ALRM} = sub {
$cmd_flg = -1; #error
die “alarmn”;
};
alarm(100);
$pid = fork;
if ($pid == 0) {
exec($cmd);
#$result = `$cmd`;
#print $? . “n”;
#print $result;
}else{
wait;
}
alarm(0);
};
if($cmd_flg == -1){
kill(9,$pid);
print “Time outn”;
wait;
}

execコマンドに修正(2/10)

肺のCTスキャン撮ってきました。

健康診断で肺に影があるということで、CTスキャン検査(2度目のCTスキャン)を受けてきました。
前回と変わらず、左下に5mm程の丸いものが・・・(大きくはなってないようです。)
で、先生曰くどうしますか?
え?
間をあけてCTスキャンを撮るか、またはFDG-PETのCTスキャンを撮るか?FDG-PETではより正確な判断ができるとのこと。良性か悪性なのか。
では、お願いしますということで、今行ってる病院では設備がないので紹介状を頂いて来週行ってくることに。しかし、このFDG-PET検査3万円もします。

画像・Viewerが入ったDVDを頂いた。診断時の説明の時、先生は5mmぐらいっていってたので、
実際このツールで診断の時に見た画像まで動かして図ってみると5mmぐらいでした。

OpenSim OSGrid(aska SIM) 東京スカイツリー 634m メッシュオブジェクト

前回、2011年9月23日に作成途中だった東京スカイツリーで当初プリムで作成しようとしましたが、630mの壁に途中であきらめ放棄&削除しましたが、
https://www.picolix.jp/blog/osgrid-secondlife/668/
https://www.picolix.jp/blog/osgrid-secondlife/820/
今回、Ikushima’s Works のshigeki iさんがGoogle SketchUpで作られたTOKYO SKY TREEの3DデータをOpenSim OSGrid(aska SIM)にインポートしました。(shigeki iさんに
利用許可確認中。利用許可頂きました。ありがとうございます。!2/2)

・Viewer: Phoenix_Firestorm-Release_4-3-1-31155
・Google SketchUp 8 (プラグイン:OBJexporter.rb)
・blender-2.65a

まず、Google SketchUpで、TOKYO SKY TREE.skp(底面の写真台は削除)を読み込み、
TOKYO SKY TREE.objに変換。
blenderで、TOKYO SKY TREE.objを読み込みTOKYO SKY TREE.daeに変換。
これで、FirestormからOpenSimにmeshでUPLOADできます。描画詳細細度は、
「最低」を選択。三角の数は2480,頂点は2820
「高」三角の数66976,頂点66131にしてUPLOADするとこにした。
スケールはなぜか0.143倍ってなるので、x1にしようとしても修正できず。
小さいものならx1でできますが、まあ、オリジナル600mオーバーなオブジェクトなのでサイズ制限ががあるものと思われるが、ここでは深く考えていなかった。まあ、なんとかなるさと。
ウエイト計算&UPLOADで待つこと
10分 2分、イベントリーにオブジェクトが出来たー

*「高」でも「最低」でも結局プリム数換算で373個で一緒だった。(2/2)

さてREZですが、回りに迷惑をかけたらだめなので、ここは実験島のaska XIIで行うことに。
REZすると遠くの方にREZされました。(オリジナルの視点ポイントが遠かったためかな)
周りのSIMがある場合は、隣接SIMに入り込みます><で、中央に持ってきて、サイズ変更することに。
が、スケールが250mまでしか動かない・・ということで全長約240mの東京スカイツリーになってしまった。1/3モデルですね。

これをなんとか630mにするには・・・

1)スケールが250mオーバーのMESH対応のViewerを探す
このようなものはありませんでした><

   (追記) 2/12にFireStorm Viewerを改造し、1024mまで拡大できるようにした。
   https://www.picolix.jp/blog/2013/02/firestorm-viewer-1024mok.html

2)最悪、3分割してそれぞれ200mに拡大させて合体させる
リンク解除して再リンクしてみるもうまくいかず。
meshサイズ64mの壁もあるみたい。

3)LSLでスクリプト組んでx2.64倍して634mにする。
千尋 (Chihiro Owatatsumi)さんの
http://shop-chihiro.blogspot.jp/2010/05/blog-post_27.html
のスクリプトを借用してやってみた。

各部サイズは、それぞれ2.64倍になるものの位置情報がおかしく、中央に集まった感じになる。
meshで256mオーバーのものはだめなのかなーと思って諦めようと思ったけど、
もう一度、たまたま[サイズ変更]ボタンを押してみたところ、何mかズレた。で連続して押すと、なんと整列していくではないですか。このスクリプトでこのようになぜ動作するかは 不明・・・
結局、↓にあるように643mの東京スカイツリーができました。


テスト

ブログ―twitter連携止まってたのでテスト

[追記]
simple-tweet 1.3.7.2から1.3.8.3にしたら直りました。
短縮URLは、goo.gl(google)を使いたいので、

$json_data = ‘{“longUrl”: “‘. $url . ‘”}’;
$header11 = ‘Content-Type: application/json’. “rn”;
$header11 .= ‘Content-Length: ‘. strlen($json_data);
$context11 = array(
‘http’ => array(
‘method’ => ‘POST’,
‘header’ => $header11,
‘content’ => $json_data
)
);
$url1 = file_get_contents(‘https://www.googleapis.com/urlshortener/v1/url’, FALSE, stream_context_create($context11));
$udat = mb_split(“,”,$url1);
$udat1 = mb_split(“””,$udat[1]);
$url = $udat1[3];

を、simple-tweet.phpに強制追加。

OSgrid OpenSimulator 0.7.5.dev.290dc27 01-09-2013にバージョンアップ

OSgrid OpenSimulator 0.7.5.dev.290dc27 01-09-2013にバージョンアップさせました。
ついでに、使用しているviewerをImprudence ExperimentalからFirestorm Viewer
http://www.phoenixviewer.com/ に変えました。
以前は、Imprudence Experimentalはさくさく動いていたのですが、テレポートに何か難がありFirestorm Viewerに変えてみました。

1)テレポートもMAP(世界地図)表示も軽快
2)MESHもサポート
3)1km先まで表示(Imprudence Experimentalは512m)

これからはこちらを使用することに。
↓の地図は、日本人が運営しているSIM群の塊で、Wright Plaza(10000,10000)の
南のエリアに位置します。

mail : IBM拡張文字->NEC選定IBM拡張文字変換

メールでは、IBM拡張文字コードは文字化けします。(しないメールクライアントもありますが)IBM拡張文字コードは、NEC選定IBM拡張文字コードに変換して送れば良いみたいで早速
コード変換アルゴリズムを探したけど見当たらず。そんなに複雑ではないので以下自力で対応。

IBM拡張文字->NEC選定IBM拡張文字

FA40-FA49 EEEF-EEF8
FA54-FA57 EEF9-EEFC
FA4A-FA53 ---------
FA58-FA5B ---------
FA5C-FA7E ED40-ED62
FA80-FA9B ED63-ED7E
FA9C-FAFC ED80-EDE0
FB40-FB5B EDE1-EDFC
FB5C-FB7E EE40-EE62
FB80-FB9B EE63-EE7E
FB9C-FBFC EE80-EEE0
FC40-FC48 EEE1-EEE9
--------- EEEA-EEEC

[メモ] smailに実装予定です。

OpenSim Version 0.7.5 のメモリーク

徐々にメモリー使用量が増加している。
http://xpyoda.blogspot.jp/2012/10/blog-post.html
http://kimikodover.blogspot.jp/2012/05/osgrid_12.html
にありますように、Warp3D Map module関連がリークしているようです。

http://opensimulator.org/mantis/view.php?id=6270&history=1#history

OpenSim/Region/CoreModules/World/Warp3DMap/Warp3DImageModule.cs

+ GC.Collect();
+ m_log.Debug(“[WARP 3D IMAGE MODULE]: GC.Collect()”);

のパッチを当てられたようですが、
2012-09-13,2012-10-08
に取り下げ要求が出ています。

OpenSim.iniを

[Startup]

;WorldMapModule = “WorldMap”
;MapImageModule = “Warp3DImageModule”
;GenerateMaptiles = true

徐々にメモリー使用量が増加している。
http://xpyoda.blogspot.jp/2012/10/blog-post.html
http://kimikodover.blogspot.jp/2012/05/osgrid_12.html
にありますように、Warp3D Map module関連がリークしているようです。

さくらVPS CentOS6.3 / Mondo Rescueで丸ごとバックアップしてVmware Playerへ

ネットで調べてみると、さくらVPSのOSをMondo Rescueでバックアップされている方がちらほらいたので、参考にしてバックアップして、Vmware Playerにセットしてみた。

さくらVPS CentOS6.3でまず、 Mondo Rescue関連をインストールします。
モジュールの取得:

wget ftp://ftp.mondorescue.org/rhel/6/x86_64/afio-2.5-1.rhel6.x86_64.rpm
wget ftp://ftp.mondorescue.org/rhel/6/x86_64/buffer-1.19-4.rhel6.x86_64.rpm
wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mindi-busybox-1.18.5-1.rhel6.x86_64.rpm
wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mindi-2.1.3-1.rhel6.x86_64.rpm
wget ftp://ftp.mondorescue.org/rhel/6/x86_64/mondo-3.0.2-1.rhel6.x86_64.rpm

インストール:

rpm -iUvh afio-2.5-1.rhel6.x86_64.rpm
rpm -iUvh buffer-1.19-4.rhel6.x86_64.rpm
rpm -iUvh mindi-busybox-1.18.5-1.rhel6.x86_64.rpm
rpm -iUvh mindi-2.1.3-1.rhel6.x86_64.rpm
rpm -iUvh mondo-3.0.2-1.rhel6.x86_64.rpm

バックアップ:

mondoarchive -Oi -g -N -s 4200m -d /home/shoichi/backup -E /home/shoichi/backup

ISOイメージが出来上がります。(データベースとかWEBデータで30Gぐらいあるので、3時間かかかって圧縮されて4つのISOイメージになった)

-rw-r–r– 1 root root 4399417344 Sep 22 13:24 mondorescue-1.iso
-rw-r–r– 1 root root 4400060416 Sep 22 14:19 mondorescue-2.iso
-rw-r–r– 1 root root 4390195200 Sep 22 14:54 mondorescue-3.iso
-rw-r–r– 1 root root 3078658048 Sep 22 15:31 mondorescue-4.iso

Vmware Playerにセット:

CD/DVDにISOイメージ:mondorescue-1.isoをセットして起動します。
boot:
と出るので、
nuke[ENTER]とします。(自動モード)

mountlistの変更 (vda=>sda およびサイズ変更)

1) vda を sdaにすべて変更します。
2) SIZEの変更
  元のOS(100G)と同じサイズならそのままでいいですが、今回Vmwareの方は50Gにしたので変更が必要。
sda1,sda2のサイズはそのままにする(変更してはだめです。)
  sda3を残り全部にする。
  (SIZEに0を入れて[OK]とすると残り割り当てられるSIZEを表示されるので、その数値を入れ直して[OK]とする。

その後いろいろ聞いてきますが全て言いなりで[YES]としリストアーが始まります。
途中CD/DVDの交換要求がありますので、Vmware PlayerのCD-ROMアイコンをクリックして、順次mondorescue-2.iso..に設定し直して続行します。
リストアーが終わりと、各種設定変更画面が出ます。

1) /etc/fstab
変更なし、CTRL+Xで次へ
2) /etc/mtab
vdaをすべてsdaに変更
   CTRL+Wで上書き、CTRL+Xで次へ
3) /boot/grub/device.map
vdaをすべてsdaに変更
   CTRL+Wで上書き、CTRL+Xで次へ
4)/boot/grub/grub.conf
変更なし、CTRL+Xで次へ

#プロンプトになる。(viで正しく修正されたか確認)
リブートするとCentOS6.3が起動します。

*)さくらVPSはISOイメージでOSインストールできますので、Mondo Rescueで丸ごとバックアップしたISOイメージでリストアーできます。
ただし、さくらVPSはISOイメージのUPLOAD領域は5Gまでなので要注意です。

さくらのVPS ISOイメージインストール Windows 7 インストール

さくらのVPS は、8月から、 ISOイメージでもOSをインストールできるので、
Windows 7 ultimate 64bitをインストールしました。
WEBキャプチャーサーバとして、自宅サーバ(windows 7)を立てていたのですが、これで、自宅サーバもクローズできます。
BULK SERVER専用サーバも解約したので、だいぶコストダウンになりました。

現状の公開サービスメモ:

・WEBサーバ
・ダウンロードサーバ
・アイスバーブログパーツサーバ
・Opensim simulator (OSGRID) 4SIM(aska,aska I,aska II,aska III)
・とある検索サイト

・WEBキャプチャーサーバ
(ブログパーツサーバとのみハンドリング)

以前は、専用サーバ5,800円、自宅サーバ電気代200円で計6,000円/月
でしたが、2台で1,800円/月になりました。

vpsでの仮想サーバですが、アイスバーブログパーツサーバとWEBキャプチャーサーバのハンドリングパフォーマンスは、約6倍速(30秒かかってたのが5秒ぐらいになった^^。)
アイスバーブログパーツサーバ

OSgridに接続している、Opensim simulatorは、隣接SIMの移動は、前の専用サーバよりも体感的にスムーズになりました。
ただし、monoのCPU使用率が常時20~30%食ってます。専用サーバだと1%しか食ってなかったのに。
OSgrid / Aska /

*さくらのネットワークは、物理サーバを1Gbpsの超高速回線で接続、仮想サーバ側も100Mbps共有の高速回線なので、これが一番速度UPに効いているようです。
特にWEBキャプチャーサーバは、WEBページにアクセスして画像化するので。

さくら VPS (CentOS 6.3) / OSgrid 0.7.5 にしました。

従来専用サーバ CentOS 5で運用してきた OSgrid 0.7.4 2012/3/12版をさくら VPS (CentOS 6.3 MEM1G) で、 OSgrid 0.7.5 (Dev) 224efe7: 2012-09-11にしました。
(専用サーバは、今月ぐらいで解約かな。vpsで十分だし安価だし。また、さくらvpsは、ISOイメージでなんでも自由にインストールできるという裏ワザもあります。このサービスは最近できたようです。)

簡単に移行できるものと思ったのですが、以外と苦戦しました。さくら VPS は、OSは自分で再インストールできるので、Ubuntu 12でmonoは、apt-get install mono-completeでさくっとmono 2.10.8がインストールでき、そのままOSgridのバイナリーイメージをセットすると簡単に動くのですが、CentOS 6.3 (5.xも同様)では当初どのバージョンのmonoをコンパイルして入れてもOSgrid 0.7.4 2012/4/23~0.7.5 は動きませんでした。

*3月頃はまだ、Novellからmono 2.10.2のバイナリーがyumでインストールできていたのですが、monoはNovellから離れて今は、Xamarinが管理しており既に、現在Novellが利用できなくなっています。

monoが公式サポートしているLinuxに、CentOSはありません><
Ubuntuはあるのですが、私は、ずっとRedHat系だったのでapt-get系のシステム構成に違和感があり個人的には好きになれない。

で、どうしてもCentOSでやりたいので、いろいろ調べた結果、
http://opensimulator.org/wiki/%E8%A8%AD%E5%AE%9A
に記載されている、「Mono に関する注意」にありました。

簡単なことで、環境変数
MONO_THREADS_PER_CPU=125
をセットして、
/usr/bin/screen -S OpenSim -d -m /usr/local/bin/mono /projects/opensim/OpenSim.exe
で動いた。
前までは、MONO_THREADS_PER_CPUセットしなくても良かったんですが。。。
また、オブジェクトが多い場合にスタックも多くするようにとあったので、
ulimit -s 262144
をセットした。

最終的に自動起動スクリプトは以下を作成、
osgrid

#!/bin/bash
#
# osgrid

# Source function library.
. /etc/init.d/functions

prog=opensim
lockfile=/var/lock/subsys/$prog
PROGNAME=OpenSim
OSGRID=/projects/opensim
MONO=/usr/local/bin/mono
export MONO_THREADS_PER_CPU=125
ulimit -s 262144

start() {
cd $OSGRID
echo -n $”Starting $prog: “
/usr/bin/screen -S $PROGNAME -d -m $MONO $OSGRID/OpenSim.exe
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $lockfile
sleep 3
return $RETVAL
}

stop() {
echo -n $”Stopping $prog: “
/usr/bin/screen -S $PROGNAME -p 0 -X stuff $’quitn’ 1> /dev/null 2>&1
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f $lockfile
return $RETVAL
}

# See how we were called.
case “$1” in
start)
start
;;
stop)
stop
;;
*)
echo $”Usage: $0 {start|stop}”
exit 2
esac

viewerのOSgridのバージョン表示

ソースコードを漁ると、
opensim-224efe7/OpenSim/Framework/Servers/BaseOpenSimServer.cs
中のprotected void EnhanceVersionInformation()
で、.versionファイルがあるとそれを追記するようなので、
OpenSim.exeがあるディレクトリーに.versionファイルに好きに記載するとOK
.version

CentOS 6.3 / OSgrid 0.7.5 (Dev) 224efe7: 2012-09-11

monoのインストールメモ:

yum install make glib2-devel libpng-devel libjpeg-devel giflib-devel libtiff-devel libX11-devel gcc-c++ fontconfig-devel bison gettext bzip2 libtool automake autoconf wget

wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.tar.bz2
tar xjvf libgdiplus-2.10.tar.bz2
cd libgdiplus-2.10
./configure
make
make install

/etc/ld.so.conf.d/libgdiplus.conf
==
/usr/local/lib
==
/sbin/ldconfig

wget http://download.mono-project.com/sources/mono/mono-2.10.8.tar.bz2
tar xjvf mono-2.10.8.tar.bz2
cd mono-2.10.8
./configure –with-large-heap=yes –with-moonlight=no
make
make install

OpenSimをコンパイルしたいなら。。
wget http://download.mono-project.com/sources/nant/nant-0.90-src.tar.gz
tar zxvf nant-0.90-src.tar.gz
cd nant-0.90
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
make
make install