日本語人の Mathematica 使いには、孤独を感じている人が多いのではないだろうか。

彼女ないしは彼が、Mathematica でちょっと気の利いたモノを作っても、それを誰かに試してもらうには、相手が Mathematica を持っていないといけない。無料の CDF Player(以前の Mathematica Player)で試してもらうという手もあるにはあるが、いくら無料だからといって、普段使いするわけでもないソフトウェアが 100MB 超と知ってなおダウンロードとインストールをしてくれる人は限られるだろう。

かくして Mathematica 使いは、静的な成果物を人に見せることはあっても、いろいろ動かして試してもらうという願望は封印したまま、今日もひとりで Mathematica を使うのだ。

そこで webMathematica である。
webMathematica は、Mathematica の能力を使ったウェブアプリを作るためのソフトウェアで、これを使えば、自分が Mathematica で組んだものを、パラメーターや式をいろいろ変えて他の人に試してもらう仕組みを作ることができる。相手に必要なのはウェブブラウザだけなので、現在的には、相手に何かをインストールしてもらう必要はない。

webMathematica には Pro と Amateur がある。Amateur は、一般ライセンスまたは教育用ライセンスのプレミアサービスに加入しているユーザーであれば、プレミアサービスが有効なあいだ無料で使うことができる。無料で使うことができる代わりに、作ったサイトは必ず公開する必要がある。学内や社内に限定したサイトを作るには Pro が必要なのだ。他にも Amateur では、作ったページに規定のバナーとリンクを付けなければならないとか、提供されるサポートがインストールサポートのみだとかの制限がある。

webMathematica を使うには、当然ながら、サーバーを運用しなければならない。Amateur であれば、公開サーバーが必要になる。そのため、これまでは、学校や会社で公開サーバーを設置できたり、自宅でサーバーを運用できる人しか webMathematica Amateur を使えなかった。
だが、最近は、Mathematica をインストールできるレンタルサーバーサービスも登場してきているようだ。というわけで、Amazon のやってる Amazon EC2 でも webMathematica 3 Amateur を動かせるんじゃないかしらん、というのが今回のお題だ(あー、長い枕)。

webMathematica の概要

webMathematica という製品は、Tomcat などの Java サーブレットエンジンにインストールするファイル群(webMathematica フォルダ)と、通常の Mathematica パッケージ(MathKernel と Mathematica フロントエンド)からなっている。

Tomcat の webapps ディレクトリに webMathematica フォルダを配置し、このフォルダの中の .jsp ファイルに、<msp:evaluate>〜</msp:evaluate> で囲って Mathematica コマンドを書いておくと、その部分が Mathematica で評価されたものに置き換わったものがブラウザに表示されるようになっている。

Amazon EC2 セットアップ

Amazon EC2 のセットアップに関しては、僕もそんなに分かっているわけではないし、ググればいろいろ情報があるので、ここでは手順の詳細は割愛して、選択したインスタンス情報とディスクの拡張について。今回は、より小さく安価な構成になることを目指した。

インスタンスを作成する際は、Wizard の Quick Start タブにあるプラットホームを選択するのではなく、Community AMIs タブにあるものから選択した。別にプラットホームにこだわりはないので、ちょっと触ったことがあるという理由で Debian、ここでは AMI ID ami-3ccc663d の Debian 6.0.1 i386 を選択し、Instance Type を Micro (t1.micro) にした。Security Group の設定では、Tomcat の 8080 へのアクセスを追加。

残念なことに、ここで選択したインスタンスの起動ディスクイメージの容量(全体で 8GB)は、Mathematica 7 をインストールするにはちょっと足りない。拡張するための正しい方法というのがあるのかもしれないけど、今回は下記のような手順で拡張した。

作成したインスタンスを AWS Management Console の Instances のページで Stop してから(Terminate すると二度と使えなくなるので注意)、ELASTIC BLOCK STORE > Volumes のページの Volume を選択して Create Snapshot。このとき、選択した Volume の Details にある Zone を覚えておく。ELASTIC BLOCK STORE > Snapshots に作成した Snapshot ができたら(完了までに少し時間がかかる)、これを選択して Create Volute from Snapshot。先ほどの Zone に、倍の 16GB の容量で作成。Volumes のページに追加されるので、これをインスタンスに Attach Volume。Attach のときの Device を /dev/sdf としておくと、インスタンスには /dev/xvdf として認識された。

インスタンスを再開してから、fdisk でこの /dev/xvdf のパーティションマップを変更。もともと /boot, /, <swap> の3パーティションがあるので、2番目と3番目をいちど捨てて2番目を拡張した状態にして / と <swap> を再設定。終わったら2番目の / の領域(/dev/xvdf2)に対して e2fsck -f と resize2fs を実行。

# fdisk /dev/xvdf

Command (m for help): p

Disk /dev/xvdf: 17.2 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdf1               1          14      112423+  83  Linux
/dev/xvdf2              15         668     5253255   83  Linux
/dev/xvdf3             669        1044     3020220   82  Linux swap / Solaris

Command (m for help): d
Partition number (1-4): 2

Command (m for help): d
Partition number (1-4): 3

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (15-2088, default 15):
Using default value 15
Last cylinder, +cylinders or +size{K,M,G} (15-2088, default 2088): 1712

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (1713-2088, default 1713):
Using default value 1713
Last cylinder, +cylinders or +size{K,M,G} (1713-2088, default 2088):
Using default value 2088

Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 82
Changed system type of partition 3 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/xvdf: 17.2 GB, 17179869184 bytes
255 heads, 63 sectors/track, 2088 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdf1               1          14      112423+  83  Linux
/dev/xvdf2              15        1712    13639185   83  Linux
/dev/xvdf3            1713        2088     3020220   82  Linux swap / Solaris

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
#
# e2fsck -f /dev/xvdf2
e2fsck 1.41.12 (17-May-2010)
/dev/xvdf2: recovering journal
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information

/dev/xvdf2: ***** FILE SYSTEM WAS MODIFIED *****
/dev/xvdf2: 47425/328656 files (0.1% non-contiguous), 574237/1313313 blocks
#
# resize2fs /dev/xvdf2
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/xvdf2 to 3409796 (4k) blocks.
The filesystem on /dev/xvdf2 is now 3409796 blocks long.
#

無事に終わったら、再度インスタンスを止めて、両方の Volume を Detach し、拡張した方の Volume だけを /dev/sda として再度 Attach してインスタンスを起動して、df で容量が増えていることを確認。

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/xvda2             13G  2.2G   11G  18% /

Tomcat のインストール

詳細は不明なのだけど、本稿執筆時点の Amazon EC2 の Debian 6 の t1.micro インスタンスでは、apt-get install による openjdk のインストールが失敗する。そのため、openjdk に依存する Tomcat のインストールも失敗してしまう。いちどインスタンスを停止し(AWS Management Console の Instances のページで Stop。Terminate すると二度と使えないので注意)、Change Instance Type で一時的に m1.small に切り替えて Start し、

# apt-get update
# apt-get install tomcat6 tomcat6-admin

でインストールして、再度 Stop して t1.micro に変更すればうまくいった。

Tomcat のインストールが完了したら、ブラウザから :8080/ にアクセスして、Tomcat が起動していることを確認。ついで、/etc/tomcat6/tomcat-users.xml の <tomcat-users>〜</tomcat-users> に下記の2行を追加して Tomcat を再起動。ブラウザで :8080/manager/html にアクセスができることを確認。

  <role rolename="manager"/>
  <user username="namae" password="pasuwa-do" roles="manager"/>
# vi /etc/tomcat6/tomcat-users.xml // 上記2行の追加
# service tomcat6 restart

webMathematica ファイル準備

Mathematica のプレミアサービスに加入していると、下記のページから webMathematica Amateur を申し込むことができる。
http://www.wolfram.com/products/webmathematica/versions/request.cgi
ダウンロードするのは、通常の Mathematica のインストーラーと、上述した webMathematica フォルダ関連ファイル群一式の2つ。今回は Amazon EC の Linux で使うので、Linux 版で申し込んでダウンロードする。webMathematica Amateur 専用のライセンス番号が発行されるので忘れずに記録しておこう。

webMathematica フォルダ関連ファイル群は、.iso ファイルの形でダウンロードされるので、ディスクに焼くなりマウントするなりして、その中の webMathematica.war ファイルを、手元の PC のハードディスクにコピーしておく。
Mathematica 一式は、ver.7 をインストールする .sh ファイルの形でダウンロードされるので、これも手元 PC のハードディスクの適当な領域に置いておく。

Mathematica のインストール

上記の .sh ファイルを scp でインスタンスに転送。僕の環境の問題なのかもしれないけど、僕のところでは、このインストーラー .sh ファイルの転送の速度がまったく出ず(110KB/s とかそんなん。最初だけは速かったのだけど)、コピーに2時間半くらいかかってしまった。

// 手元のマシンで
$ cd dir_to_sh_file
$ scp -i your_own.pem Mathematica_7.0.1_Japanese_LINUX.sh root@your.instance.amazonaws.com:.

コピーが終了したら、実行してインストール。

// インスタンスにログインして
# ./Mathematica_7.0.1_Japanese_LINUX.sh

インストール種別の選択では Single machine を。パスワードは register.wolfram.com で申請して取得する(このパスワード申請がユーザーポータル user.wolfram.com でないのは、webMathematica 3 の Mathematica が ver.8 ではなく 7 のため)。パスワード申請とインストールに使うライセンス番号が、プレミアサービスの親ライセンスのものではなく、webMathematica Amateur 独自のものであることに注意。インストールディレクトリをデフォルト以外にすると、webMathematica の設定ファイルにあれこれ変更が必要になるので、デフォルト推奨。
最後、InstallErrors ファイルに、デスクトップ環境用のショートカットが作成できなかったといったエラーが記録されるが、これは無視して OK。完了後に、math コマンドが使えることを確認しておく。

実は、ここまで準備してから分かったのだけど、インスタンスを Stop して Start すると、パスワードの申請に必要な MathID が変わってしまうようだ。そのため、インスタンスを再開するたびにパスワードの再申請が必要になる。他にも MathID が変わってしまうことってあるんだろうか。
もしかして、これってつまり使い物にならないってことなのかも...。(けど、せっかく準備したし、とりあえず最後まで書き切る)

webMathematica フォルダのデプロイ

上で apt-get による Tomcat のインストールが完了してれば、Tomcat は開始されているはずなので、ブラウザから :8080/manager/html にアクセスして、WAR file to deploy から、ファイル準備でコピーした webMathematica.war を Deploy する(ファイルアップロードにしばらく時間がかかる)。完了したら、:8080/webMathematica にアクセス。上記の Mathematica インストールがうまくいっていれば、Hello World や Expand といった、画像を使わないサンプルは動くようになっているはず。

動かない場合は、Kernel Monitor のページでエラーの内容を確認したり、パスワードファイル mathpass が共有領域 /usr/share/Mathematica/Licensing に正しく出来ているかを確認。あと、何かのきっかけで MathID が変わって math コマンドが使えなくなっていないかも...。

vnc4server のセットアップとフロントエンドセットアップ

Plot Example などの画像を表示するサンプルを動作させるには、Mathematica のフロントエンド(.nb ファイルを操作するアプリケーション)をバックグラウンドで起動できるようにする必要がある。これは、Mathematica ではグラフなどの画像生成がフロントエンドアプリの仕事だからだ。上の webMathematica の概要の図に、フロントエンドが描かれているのはそのため。Mathematica Linux は通常、KDE などのデスクトップ環境で使うのでフロントエンドはそのデスクトップ環境上で起動する。今回のようにデスクトップ環境を持たない Linux 環境では、代わりとなる仮想デスクトップ環境をセットアップしておく必要がある。今回は、webMathematica のドキュメントに従って Xvnc(vnc4server)を選択。また、Mathematica フロントエンドが必要とする基本的なフォントも合わせてインストールしておく。

# apt-get install vnc4server xfonts-75dpi

apt-get でセットアップした Tomcat は、シェルもホームディレクトリも持たない tomcat6 というユーザーが起動するようになっている。Mathematica も tomcat6 ユーザーが起動する。ここでセットアップする Xvnc 設定ファイルの保存場所を tomcat6 ホームにしておくと分かりやすいので、シェルとホームディレクトリを tomcat6 ユーザーに割り当ててから、このユーザーで Xvnc の設定をする。こうしておくと、Mathematica フロントエンドのユーザー設定なども tomcat6 ユーザーのホームに保存されるようになる。

# service tomcat6 stop // 作業に先立って Tomcat を停止
# usermod -d /home/tomcat6 -s /bin/bash tomcat6
# mkdir /home/tomcat6; chown -R tomcat6 /home/tomcat6
# su - tomcat6
$ vncserver :1

You will require a password to access your desktops.

Password: // パスワードを適当に設定
Verify: // パスワード確認
// 設定が完了したら...
$ vncserver -kill :1 // 初期設定が終わったらここでは終了しておく

詳細不明だが、僕がこの方法で起動した Xvnc の上で起動する Mathematica フロントエンドは、Mathematica の Type1 フォントの記号類をうまく使えなかった。ver.7 の Mathematica Linux では、Type1 フォントにしかフォントパスを設定しないようなので、Mathematica 付属の BDF フォントを使うように、上記手順で作成される /home/tomcat6/.vnc/xstartup ファイルの末尾に次の1行を追加しておく。

xset fp+ /usr/local/Wolfram/Mathematica/7.0/SystemFiles/Fonts/BDF// 上記の続きで tomcat6 ユーザーのままで
$ vi /home/tomcat6/.vnc/xstartup // 上記1行の追加
$ vncserver :1 // vnc サーバーを再開

最後に、webMathematica で起動される Mathematica フロントエンドが、この仮想デスクトップを利用するように、MSPConfiguration.xml ファイルの <KernelPool>〜</KernelPool> 内に、次の1行を追加する。

<FrontEndLaunchFlags>-display :1 -nogui</FrontEndLaunchFlags>// ここは root ユーザーで
# vi /var/lib/tomcat6/webapps/webMathematica/WEB-INF/MSPConfiguration.xml // 上記1行の追加
# service tomcat6 start // Tomcat 再開

これで、ブラウザから :8080/webMathematica の Plot Example がうまく動作したら基本的なセットアップは完了だ。

あとは、/var/lib/tomcat6/webapps/webMathematica/ 以下のサンプルファイルを編集して試してみたり、このディレクトリ下に新規に .jsp ファイルを追加していったりすることになる。

インスタンスの再起動で Mathematica パスワードの再申請が必要なんじゃ意味がないかもだけど、インスタンス再起動時に仮想デスクトップが自動起動するようにするには、/etc/rc.local 末尾の exit 0 の前に次の1行を追加。

su - tomcat6 -c "vncserver :1 -localhost" 2>/dev/null &

 

以上、最低限のところまでのただの作業メモでしかないし、随所にもっといいやり方があるのかもしれない。おまけに、先述したように、インスタンスを止めるたびに Mathematica のパスワード再申請が必要じゃ、使い物にならんような気もすごくする。でも、もし、なんらかの参考になる人がいたら幸いということで...。(Wolfram Research やヒューリンクスが Amazon EC2 上での webMathematica の動作を公式サポートする訳ではないので、試される人は at your own risk でお願いしまする。)

※この記事の内容は執筆者の個人的見解で、ヒューリンクスによる公式情報ではありません。[免責事項]

トラックバック

この記事へのトラックバックURL
http://blog.hulinks.co.jp/cgi/mt/mt-tb.cgi/475
内容に対しての関連性がみられないものは削除する場合があります

コメント一覧

「日本語人の Mathematica 使いには、孤独を感じている人が多いのではないだろうか。」という言葉には非常に同感します。先日も会社にMathematicaの無料セミナーの受講申込申請をしたら、良い顔をされませんでした。
プレミアサービスで webMathematica Amateur が使用出来るのは知りませんでした。知っていたとしても、この記事を読まなかったら有効活用の方法さえ分からなかったでしょう。とはいえAmazon ECを使うのは敷居が高いですね。Linuxも使ったことがないですし…。でもプレミアサービスの期限が切れる前に試してみたいです。

ちさかさん、いつもありがとうございます。
会社でおひとりで Mathematica をお使いなんですね。ご苦労なさっていることでしょう。頑張って下さいね。
webMathematica Amateur は、せっかく使う権利があるので、ぜひ、多くの人に試してもらいたいですね。この記事が、ちさかさんにとって、何らかのご参考になったとしたら、とても嬉しいです。

コメントの投稿

Emailアドレスは表示されません。は必須項目です。
ヒューリンクス取り扱い製品の内容や購入に関するお問い合わせはヒューリンクスサイト連絡先へお願いいたします。投稿前にその他の注意事項もご覧ください。

HULINKS サイトの新着情報