CNSのWebインタフェースをローカルで使う
CNSのインプットファイルはWebインタフェースで編集することができます。通常はCNSの公式サイトを使うことが多いと思いますが、ローカルで実行または自分たち専用のサーバを立ち上げたいこともあると思います。そんな手順を解説します。
概要
CNSの公式ページではWebインタフェースの構築方法が解説されていますが、これだけでは手順がわかりにくいので(というかこれだけでは使用できませんでした・・・)、メモしておきます。
大まかな手順は以下の通り。
- CNSのHTMLファイルおよびCGI実行環境をwww_cns_setupスクリプトで書き換える
- Webインタフェースに必要なファイルをwww_server_setup2スクリプトでコピー
- Webサーバの設定
になります。
オリジナルのwww_server_setupスクリプトには不具合があり、そのままでは環境を構築することができませんので修正したスクリプトを用意しました 。
必要環境
- Webサーバ(Apacheを管理できるならApache(ここでは解説しません)。またはCGIが使用可能なサーバ(章末に手順記載))。
- Perl Ver.5以上(5.10.0で動作確認)
- サーバの管理者権限はなくても大丈夫
手順
ディレクトリ構造の確認
CNSのWebインタフェースには絶対パスが使われている部分があるので、インストールする前にあらかじめWebサーバの公開ルートディレクトリを決めておく必要があります。インストールは(Webサーバの公開ルートディレクトリ)/cns_solve_1.21以下に配置されます。また、CGIスクリプトはCGI専用ディレクトリに配置する方がセキュリティ上安全ですが、基本的にはローカル(または限定的な範囲)で使うと仮定していますので同じディレクトリに配置します。
インストール後のファイル配置は以下のようになります。
- Webサーバ公開ルート/ - cns_solve_1.21/ - doc/ - html/ <-- Webインタフェースの実体が置かれる - inputs/ <-- /usr/local/cns_solve_1.21/inputs/へのシンボリックリンク - libraries/ <-- /usr/local/cns_solve_1.21/libraries/へのシンボリックリンク - modules/ <-- /usr/local/cns_solve_1.21/modules/へのシンボリックリンク - utils/ <-- /usr/local/cns_solve_1.21/utils/へのシンボリックリンク - CGIスクリプト群(cns.lib, *.cgi) <-- 設定次第で別の場所にも置ける
必要なファイルの準備
まずは必要なファイルを準備します。ここでは管理者権限があるものとしますが、ない場合は後ほど解説します。
CNSは/usr/local/cns_solve_1.21にインストールされているものとします。
# cd /usr/local/cns_solve_1.21 # source cns_solve_env <-- CNSの環境を読み込む # bin/www_cns_setup <-- www_cns_setupスクリプトを実行 name of WWW server [default: server.foo.com ]-> localhost path to the start of WWW tree [default: /home/httpd/html ]-> /usr/local/cnsweb name of WWW CGI directory [default: cgi-bin ]-> . full path to PERL on WWW server [default: /usr/bin/perl ]-> (通常Enterのみ) ============================================================== location of CNSsolve directory is: /usr/local/cns_solve_1.21 version of CNSsolve is: 1.21 name of WWW server is: localhost path to the start of the WWW tree is: /usr/local/cnsweb name of the CGI directory is: . location of the PERL program is: /usr/bin/perl ============================================================== continue with these parameters? [y/n]-> y ...(省略)
という感じです。これで必要なファイルの書き換えができました。
ヒント
ここで指定するname of WWW CGI directoryはCGIスクリプトへのアクセスの際、http://localhost/(name of WWW CGI directory)/cns_solve_1.21/foo.cgiというように使用されます。ここでは"."を指定しているのでHTMLファイルと同じ場所になります。
Webサーバディレクトリに配置
続いて必要なファイルをWeb公開ディレクトリに配置します。ここでは配置先は/usr/local/cnswebとします。
なお、オリジナルのwww_server_setupではdoc/html以下のファイルがコピーされないので、修正したwww_server_setup2を使って下さい。
# mkdir /usr/local/cnsweb # bin/www_server_setup2 location of CNSsolve directory [default: /usr/local/cns_solve_1.21 ]-> path to the start of WWW tree [default: /home/httpd/html ]-> /usr/local/cnsweb full path to CGI directory [default: /home/httpd/cgi-bin ]-> /usr/local/cnsweb ============================================================== location of the CNSsolve directory is: /usr/local/cns_solve_1.21 version of CNSsolve is: 1.21 path to the start of the WWW tree is: /usr/local/cnsweb location of the CGI directory is: /usr/local/cnsweb ============================================================== continue with these parameters? [y/n]-> y ...(省略) overwrite the files in this directory? [y/n]-> y ...(省略)
これで配置が完了したはずです。
www_server_setupの修正点
- doc/htmlの内容をコピーするようにした
ヒント
location of the CGI directoryはCGIファイル群を配置する際に使用され、(location of the CGI directory)/cns_solve_1.21/以下に配置されます。
Webサーバのセットアップ
続いてWebサーバのセットアップを行います。広く使われているWebサーバにApacheがありますが、CNSのWebインタフェース専用としてのみ使う場合、設定が煩雑すぎますので、オープンソースの軽量Webサーバmongooseを使ってみます。このサーバはApacheなどのように設定ファイルをいちいち記述する必要がないのでちょっと使う場合便利だと思います。プログラムサイズも40KB程度とコンパクト。
- http://code.google.com/p/mongoose/ -- mongooseプロジェクトホームページ
注意:CNSのCGIスクリプトは/usr/tmpに書き込みを行うので、/usr/tmpへの書き込み権限が必要になります。通常は問題ないと思いますが・・・(変更可能)
mongooseのビルド
プロジェクトホームページからLinux用のソースを取得します。ここではmongoose-2.8.tgzを取得しました。ざっと見た感じ特に必要なライブラリはなさそうです。
取得したら適当な場所で展開してビルドします。
% tar zxvf mongoose-2.8.tgz % cd mongoose % make linux
で実行ファイルmongooseがビルドされます。
mongooseの起動
起動はいたって簡単。実行ファイルのmongooseのみあれば動作します。
今回のCNS Webインタフェースを使うなら、
% mongoose -root /usr/local/cnsweb -ports 8080
で起動します。終了するときはCtrl-Cで停止します。
動作確認
Webブラウザで、http://localhost:8080/cns_solve_1.21/doc/htmlにアクセスすればCNS-onlineと同じように使えるはずです。
カスタマイズのヒント
共用サーバとして使う
このページのやり方では、基本的にはローカルの使用を想定していましたが、研究室内で共用サーバとして使いたい場合、www_cns_setupスクリプトを実行するときに、
name of WWW server [default: server.foo.com ]-> localhost
このlocalhostにサーバ名またはIPアドレスを指定すれば使用可能になります。
テンポラリディレクトリの変更
標準の状態ではテンポラリディレクトリは/usr/tmpに指定されており、ログが/usr/tmp/cns_solve_1.21に書き込まれますが変更することも可能です。変更する際は/usr/local/cnsweb/cns.libの、
50 $tmp_dir = "/var/tmp/$cns_version/inputs";
を書き換えるとよさそうです。
管理者権限がない場合
管理者権限がない場合は、/usr/local/cns_solve_1.21の書き換えができないので、自分のホームディレクトリなどにCNSをインストールし、Webインタフェースをインストールします。なお、シンボリックリンクが張られるので、インストールしたCNSは削除せずに置いておきます。
Apacheで使う
Apacheのサーバコンフィギュレーションに関しては省略しますが、ここでインストールした構成のCNSのWebインタフェースに関しては例えば以下のような設定が有効です。
Alias /cns-online /usr/local/cnsweb/cns_solve_1.21/doc/html Alias /cns_solve_1.21 /usr/local/cnsweb/cns_solve_1.21 <Directory /usr/local/cnsweb/cns_solve_1.21> Allow from all Options +ExecCGI </Directory>
この設定の場合、http://server/cns-online/にアクセスすることでCNSのページを開くことができます。