================================================================ インストール・基本操作編 (α版) ================================================================ ---------------------------------------------------------------- 1. サーバーの基礎的な設定 ---------------------------------------------------------------- 1.0 perlのインストール状況の確認 Perl 5.004 が /usr/local/bin/perl という名称で実行可能であることを 確認してください。これは、 /usr/local/bin/perl -v というコマンドを実行することで確かめることができます。 もしperlの置いてあるパスが異なる場合には、/usr/local/bin/perlに シンボリックリンクを張ってください。 例:シンボリックリンクの張り方 ln -s /usr/bin/perl /usr/local/bin/perl 1.1 ユーザーの作成 root権限で、ユーザー名 'nomos'でユーザーを作成してください。 このとき、 nomosのホームディレクトリとして /home/nomos を、 nomosのシェルとして /bin/bashまたは/bin/tcsh等を指定してください。 (パス名等は、ご利用のシステムに即したものを入力してください) ※このサーバの起動には、root権限は必要はありません。 root権限でサーバ動作をさせることは、 深刻なセキュリティホールを生んでしまう可能性を負います。 ここでは、より安全性を高めるめに、 サーバ起動・メンテナンスを行うための専用のアカウントを 作成することにします。 ホームディレクトリとして、指定通りに /home/nomos が作成されたことを 確認してください。 もし作成されていなければ、root権限で、 mkdir /home/nomos && chown nomos /home/nomos を行ってください。 (以下の説明では、/home/nomosを表すディレクトリを$NOMOSと表記します) 1.2 フロッピーからハードディスクへのパッケージのコピー 配布用フロッピーディスクには、MS-DOS1.44MBフォーマット形式で、 nomosbin-1.0.tgz nomoslib-1.0.tgz の2つのファイルが入っています。これを、 $NOMOS/nomosbin-1.0.tgz $NOMOS/nomoslib-1.0.tgz という名前でコピーしてください。 フロッピーからのコピーのやり方については、 OS添付のマニュアルを参照してください。 これらのファイルのコピーをした後に、 chown nomos $NOMOS/nomosbin-1.0.tgz chown nomos $NOMOS/nomoslib-1.0.tgz を行ってください。 ※OSセキュリティ上の理由から、 フロッピーディスクなどの機器に対するアクセスは、 rootなど一部のユーザにしか解放されていない場合があります。 この作業はrootで行うほうが無難です。 1.3 nomosでのログインのやりなおし root権限で 1,2の作業を行った後、logoutしてください。 1 で作成した nomos のユーザー名でloginをし直してください。 なお、以下の作業は nomos のユーザー権限で行うものとします。 1.4 パーミッションの修正 このシステムは、基本的にユーザー nomos にとってのみ readable/writable/executableであるべきとします。 ※nomosシステムのサーバであるnomosというperlスクリプトは、 set uidパッチを当てられたperl上で動作する場合、 ユーザー名nomosに set uid された状態で動作するものとする。 ユーザーnomosの権限で、 chmod 0700 $NOMOS を行ってください。 1.5 パッケージの展開 以下の操作を行ってください。 cd $NOMOS gzip -d nomosbin-1.0.tgz gzip -d nomoslib-1.0.tgz tar xvf nomosbin-1.0.tar tar xvf nomoslib-1.0.tar これにより、以下の内容が展開されます。 .bashrc .cshrc bin/ doc/ lib/ 1.6 環境変数について パッケージの展開時に、 ~/.bashrcとして、 export NOMOS=${HOME} export PATH=${PATH}:${NOMOS}/bin ~/.cshrcとして、 setenv NOMOS ${HOME} set path=(${PATH} ${NOMOS}/bin) という内容のファイルが作成されます。 これらの初期設定ファイルの働きにより、2つの環境変数が設定されます。 nomosシステム用コマンドは、これらの環境変数の設定値を利用して 動作します。 この環境変数は、ユーザーnomosのアカウントで もう一度loginしなおすことで有効になります。 ---------------------------------------------------------------- 2. サーバの起動と終了 ---------------------------------------------------------------- 2.0 nomosでのログイン ユーザー nomos で loginしてください。 2.0.1 環境変数について echo $NOMOS というコマンドの実行結果として、 /home/nomos のように適切な値が設定されていることを確認して下さい。 同様に、$PATHについても、 /home/nomos/bin が含まれていることを確認して下さい。 もしこれらがうまく設定されていない場合には、 1.6に従って環境変数を設定するようにして下さい。 2.1 手作業での起動 サーバー起動のやりかたです。 nomos を実行してください。 デフォルトでは、このサーバはポート番号7001番で起動し、 HTTP/1.0のサービスを行います。 つまり、この時にWebブラウザからアクセスを行う場合には、 http://このサーバのホスト名:7001/ が、アクセス用のURLとなります。 ※ポート番号を手動で指定することも可能です。 例:7002番での起動する場合 nomos -p 7002 2.1.1 サーバ起動時のトラブルシューシューティング1:bind ※通常の利用では、この節に書かれている問題は発生しませんので、 この節の内容は無視してかまいません。 特定の条件下においては、起動時に、 「bind: Address already in use (そのポートは使用中なのでbindできません)」 というエラーメッセージを受け取ることがあります。 これには3つの原因が考えられますので、原因に応じて対処をします。 ・指定したポート番号が別のネットワークサーバによってすでに使用されている。 →そのネットワークサーバを恒久的に停止するか、 nomosの使用ポートを恒久的に変更する。 ・別のnomosサーバがこのポートでサービスを続行中である場合 →killnomosコマンドを実行するか、nomos -f で再起動する。 ・直前まで、別のnomosサーバがこのポートを使用していて、 うまくポート資源が解放されずに終了した影響が残っている場合 →nomos -f を実行し、資源が解放され次第、 起動するよう指示する。 2.2 プロセスIDファイル 起動と同時に、nomosサーバは、 自身のプロセスID(pid)番号をファイルシステム内に保存します。 プロセスIDファイルは、デフォルトでは、 $NOMOS/lib/default/log/nomos.pid に保存されます。 このファイルはデータベースライブラリライブラリに対する ロックファイルとして機能します。 ロックファイルが存在すると、このデータベースライブラリは 「使用中」であるみなされ、他のnomosサーバプロセスの起動を拒否します。 この機構により、複数のnomosサーバープログラムがひとつの データベースライブラリに対して書き込みを行うことで生じる データの矛盾や破壊を防ぎます。 2.2.1 サーバ起動時のトラブルシューシューティング2:pidfile ※通常の利用では、この節に書かれている問題は発生しませんので、 この節の内容は無視してかまいません。 特定の条件下においては、起動時に、 「ERROR: Another nomos may be running. Please kill nomos and clean lib/default/log/nomos.pid (別のnomosサーバが起動中である可能性があります。 別のnomosサーバを終了させ、 lib/default/log/nomos.pidを消去してください。)」 というエラーメッセージを受け取ることがあります。 これは、nomosサーバが異常終了した後など、 ロックファイルが不正に残されたままの状態であることを意味します。 このときは、 killnomosコマンドを実行してから、起動をやりなおしてください。 一方、現在の有効なロックファイルに対するサーバを強制的に終了させて、 データベースを起動時の状態に復帰させて再起動させることもできます。 この場合には、 nomos -f というように、-f (forced)オプションを付けて起動してください。 2.3 サーバの終了 サーバを正常に終了させるためには、 killnomos または killnomos ライブラリ名 というコマンドを実行する必要があります。 このコマンドは、サーバのプロセスIDファイルを使用して、 nomosサーバプロセスにSIGINTシステムコールを発効します。 OSが異常終了した場合や、手作業によるミスなどによって、 このSIGINTによる手続きを経ずにプロセスが終了してしまった場合には、 サーバは、データの保存内容を保証できませんので、注意してください。 このような場合には、現在のデータを破棄し、 バックアップデータを利用してください(後述)。 ---------------------------------------------------------------- 3. 起動・終了方法等の運用上の設定 ---------------------------------------------------------------- 3.1 システム起動時スクリプトでの自動立ち上げ設定 OSの起動の際に、nomosサーバが自動的に起動するようにしておくと、 初回に手作業でサーバ起動をする手間を省くことができ、 また、起動のし忘れによるトラブルを防ぐことができます。 BSD系のUNIXシステムであれば、 /etc/rc.local 内に、 #!/bin/sh NOMOS=/home/nomos if [ -x $NOMOS/bin/nomos ]; then $NOMOS/bin/nomos -f fi という内容を追加してください。 SYS/V系のUNIXシステムであれば、/etc/rc.M/S90nomos などという名前で、 #!/bin/sh case "$1" in NOMOS=/home/nomos 'start') if [ -x $NOMOS/bin/nomos ]; then $NOMOS/bin/nomos -f fi ;; 'stop') if [ -x $NOMOS/bin/killnomos ]; then $NOMOS/bin/killnomos fi ;; esac exit 0 のように設定します。 3.2 システム停止時スクリプトでの自動終了設定 一般に、マシンの保守作業を行うためにマシンを停止する際には、 shutdownコマンドなどが使われます。SYS/V系のUNIXシステムでは、 このshutdownコマンド等によって、内部的に、 現在動作中のネットワークサーバに対して終了処理を 実行させることができます。 あるいは、BSD系のシステムでは、 initコマンドによるrunlevelの変更やkillallなどにより、 動作中のプロセスに対してシステムコールが送られることで、 現在動作中のネットワークサーバに対して終了処理を行わせます。 このnomosサーバはシグナルを受信によって、データベースの同期化 (メモリ上のデータベースをファイルシステムへ格納すること)など、 適切な終了処理を行ってからプロセス資源を解放する機能を実装しています。 この機能は、 ・nomosサーバプロセスにSIGINTシグナルを送信する ・killnomosコマンドを実行する この2通りのどちらかによって行うことができます。 SYS/V系のUNIXシステム上では、3.1で示したnomosサーバ起動スクリプトが nomosサーバ終了スクリプトを兼ねるので、これ以上の設定は必要ありません。 BSDV系のUNIXシステム上では、runlevel変更などのコマンドで 動作中のプロセスに対して送られるシステムコールに対応した シグナルハンドラを定義し、サーバ終了をさせるか、 これが不可能な場合には、killnomosコマンドを /etc/rc.d/rc.6に書き込むなどして対処することになります。 詳しくはOSのマニュアルを参照してください。 参考: ・ SIGINTを受信した場合(killnomosを実行した場合)には、 データベースを保存的に終了します。 ・ SIGKILLを受信した場合には、データベースを破棄します。 3.3 運用状況・デバッグ情報の記録・表示 nomos -d というオプションをつけて起動することで、 サーバはforkせずに起動し、標準エラー出力で 様々なサーバ稼働状況を表示するするようになります。 注意: このモードで動作中にサーバを停止するときには、 シェルの中からC-cを押すか、 killnomosコマンドを利用してください。 nomosを動作させている親プロセスであるshellにSIGKILLを 送るような操作(ウィンドウマネージャを利用してtermを閉じる等)を させると、サーバはデータベースを保存できません。 *********************************未実装 また、syslogd を利用して…… ---------------------------------------------------------------------------