wiki:misc/botlog_pas

Version 40 (modified by michkawa, 3 years ago) (diff)

--

電子ログシステム & 画像ログシステム

KEK cERL/PF 加速器の運転のため、電子ログシステム(botlog)と画像ログシステム(PrintAnyServer)を開発した。
2018年加速器学会でも報告している

使用方法

外部プログラムとWeb APIの使い方

tarballインストール

tarballは以下のURLからダウンロードできる。インストールや運用は、サーバーシステム管理者でroot権限を持っていることを前提としている。

botlog & PrintAnyServer ソースtarball(2018/11/15版)
botlog & PrintAnyServer 設定tarball(2018/11/15版)

ソースtarballはプログラムソースと実行環境をまとめてあり、設定tarballは、プログラムを実行するために必要な環境設定をまとめてある。
以下では簡単なインストール方法を説明していくが、気の短い人のために仮想マシン上で試験するための主要なコマンド履歴を抜粋したページもつくっておく。

変更/バグ対応差分

今回の更新から差分のみ提供するようにしたので、新規にインストールする方は注意。

botlog ソースdiff tarball(2021/04/16版)

ソースdiff tarballは、前回から変更したファイルのみをまとめてあるので、既存の環境に上書きする場合にはこれを使用すること。
変更の際には安全のために、データファイルと実行環境のバックアップを作成してから作業を行うように。

今回の差分tarballの展開は、電子ログを展開してあるディレクトリに移動してから行う。

[root@localhost ~]# /opt/OperationLog/botlog
[root@localhost botlog]# tar zxvf xxxxxxxx.tar.gz

プログラムの変更履歴は別ページに記述。

検証環境

サーバー側

今回のインストールに使用したシステムは、

  • Intel_x86_64
  • CentOS 6.9(最新は6.10)
    • インストールディスク: netinstall
    • インストールパッケージ: desktop
  • apache 2.2.x(CentOS 6.x標準)

のみで動作検証している。
これは各tarball中に、コンパイル済の python2.7、epics_base とapache用 mod_wsgi.so が入っているためなので、 もし別のOSにインストールする場合には、これらを別途コンパイルするか、OSのpackageとpythonのpackageを自力でインストールする必要がある。

また、設定tarballをインストールするとapache関連の設定も上書きするので、既存のサーバーにインストールする際には、一旦別ディレクトリに展開するなどの注意が必要。
なるべくなら新規のサーバーか仮想マシン上に展開するほうがいい。

このシステムは、Web画面表示用javascriptのほとんどをCDN(Content Delivery Network)経由で取得しているので、外部ネットワークから完全に隔離されたネットワークでは動作しない。
必ず、グローバルネットワークへ接続可能なネットワークで使用すること。
(この問題はいつかは解決する予定だが、現時点では優先順位は高くない。要望があれば連絡して欲しい。)

Webクライアント側

現在開発に使用しているのは、主にWindows版chromeなので、これを推奨する。
firefox,edge,safariでもWeb画面の印刷機能以外は、動作を確認している。
IEは動作しないので、使用しないこと。

多分、ここ2~3年以内に更新されているHTML5対応のWebクライアントならば、ほとんどのものは使用可能だと思われるが、保証の限りではない。

tarball展開

電子ログシステム関連のプログラムのほとんどは、/opt/OperationLogに置くようにしてある。
追加/上書きされるディレクトリ一覧は、次のようになっている。

ソースtarballの内容は、以下の様になっている。

/opt/OperationLog/botlog             botlog本体
                 /PrintAnyServer     PrintAnyServer本体
                 /data               データ保存ディレクトリ
                      /botlog          botlog用DB
                      /pas             画像保存用
                 /epics              EPICS base R.14.12.7
                 /etc                環境設定用
                 /local              環境用プログラム(python2.7等)
                 /log                ログ保存ディレクトリ

設定tarballの内容は、以下の様になっている。

/var/www/html                        初期サイトディレクトリ
             /printView                PrintAnyServer用ディレクトリ(/opt/OperationLog/PrintAnyServer/Printviewへのシンボリック)
/etc/httpd/conf/httpd.conf           apache 2.2用設定ファイル
          /conf.d/botlog.conf          botlog用設定ファイル
          /conf.d/pas.conf             PrintAnyServer用設定ファイル

/etc/ld.so.conf.d/OperationLog.conf  /opt/OperationLog/local/libを登録

/usr/lib64/httpd/modules/mod_wsgi.so /opt/OperationLog/local以下のpython2.7を使用するようにコンパイル済

/etc/selinux/targeted/contexts/files/file_contexts.local  selinuxコンテキスト設定ファイル

環境も含めて一括で設定したい場合には、両方のtarballを展開すれば、実行可能な状態になる。
設定環境を自分で構築する場合には、ソースtarballのみを展開後、自分で設定を行う必要がある。

これらのtarballをそのまま展開する場合には、rootで実行する必要がある。

[root@localhost ~]# tar zxvf botlog_pas_xxxxxx.tar.gz -C /
[root@localhost ~]# tar zxvf botlog_pas_etc_xxxxxx.tar.gz -C /

設定tarballを展開して実行する場合には、以下の設定を実行する。

  • ライブラリパスを設定し、/opt/OperationLog/local/libを使用可能にする。
[root@localhost ~]# ldconfig
  • selinuxの設定を行う。
[root@localhost ~]# restorecon -r /opt/OperationLog/
  • httpd(apache)のサービスを起動していない場合には、設定ファイルのチェック後にサービスを起動する。
[root@localhost ~]# apachectl -t
Syntax OK
[root@localhost ~]# service httpd status
httpd is stopped
[root@localhost ~]# service httpd start
Starting httpd:                                            [  OK  ]
[root@localhost ~]# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  • 必要なら環境設定ファイル/opt]OperationLog/etc/env.shを変更する
export EPICS_CA_ADDR_LIST=localhost
export EPICS_CA_SEARCH_ADDR_LIST=localhost

PrintAnyServerの起動

PrintAnyServerの本体は、httpdとは別のプロセスとして動作しているので、事前に起動させておく必要がある。
起動用のスクリプトを作成してあるが、まずはコマンドラインから起動して動作確認をする。
PrintAnyServerの起動は、通常はapacheユーザーで行う。apacheは通常はログインできないユーザーなので、rootになってからログイン。

[root@localhost ~]# su -s /bin/bash apache
bash-4.1$ cd /opt/OperationLog/PrintAnyServer
bash-4.1$ source /opt/OperationLog/etc/env.sh
bash-4.1$ python2.7 printAnyServer.py conf/test.cfg
Bottle v0.12.13 server starting up (using PasteServer())...
Listening on http://0.0.0.0:9000/
Hit Ctrl-C to quit.

serving on 0.0.0.0:9000 view at http://127.0.0.1:9000

正常に起動できれば、以上のようなメッセージが表示される。

動作確認

ソースtarballと設定tarballの両方をインストールすると、直ぐにシステムが稼働できる状態になる。

同一ネットワーク上のPCでWebブラウザを立ち上げて、それぞれhttp://(HOSTNAMEorIPADDR)/botlog/edithttp://(HOSTNAMEorIPADDR)/printViewにアクセスすると画面が表示されるはずである。
下記の画面は、電子ログシステム起動後に入力した画面の例。

botlogの動作確認は、"運転内容"に何かメッセージを入力し、"現在時刻で登録"を押下してログが表示されればOK。

PrintAnyServerは、サーバー起動後にWeb画面から画像を登録して動作を確認する。

Web画面を起動し、クリップボードに画像を読み込んでから、"Paste clipboard image or Drop image file"上で右クリックして、"貼り付け(Paste)"を選択する。
画像のサムネイルとキャプションが入力できるダイアログボックスが表示されるので、"登録"ボタンを押下する。
正常に動作すれば画像が表示され、/opt/OperationLog/data/pasに日付ディレクトリとindex_list.txtというファイルが作成される。

画像が保存されたことを確認したら、一旦 CTRL+CでPrintAnyServerを終了する。

運用

このままでも運用は可能なので、特に修正する必要がない場合には、このままPrintAnyServerを起動しても問題はない。
修正が必要なら詳細設定を参照して、修正を行う。

PrintAnyServer起動スクリプト

PrintAnyServerをprocServで起動するためのスクリプト"/opt/OperationLog/PrintAnyServer/bootPas.sh"を作成してあるので、通常運用時に使用して欲しい。
このスクリプトも必ずapacheユーザーで起動すること。
ファイルの内容は以下の通り。

#!/bin/sh

USR=`whoami`

if [ $USR != 'apache' ]; then
    echo 'execute apache only!'
    exit 1
fi

TOP=/opt/OperationLog

PROCSERV=$TOP/local/bin/procServ
PYTHON=$TOP/local/bin/python

PAS_TOP=$TOP/PrintAnyServer
PAS=$PAS_TOP/printAnyServer.py
PAS_CONFIG=$PAS_TOP/conf/test.cfg

PROC_LOG=$TOP/log/pas/procServ.log
PROC_PORT=20200

cd $PAS_TOP
$PROCSERV -P $PROC_PORT -L $PROC_LOG $PYTHON $PAS $PAS_CONFIG

通常は、PAS_CONFIGで設定ファイルの名前を変更する程度だが、実際に使用する際には、環境に合わせてスクリプトの内容は変更してから使用すること。

PrintAnyServerを通常運用する場合には、以下のコマンドをcrontab の@rebootに設定するか /etc/rc.localに記述すると、サーバー起動時に自動的に実行されるようになる。

sudo -u apache /opt/OperationLog/PrintAnyServer/bootPas.sh

外部プログラムとの連携

botlog,PrintAnyserver共にWeb APIを使ってデータの登録を行っているので、外部プログラムからのデータ登録も可能になっている。
応用例として、EPICSとの連携に使用しているEPICS record monitorがtarball内にあるので使ってほしい。
また、PrintAnyServerへの画像登録も同様に可能となっている。

botlogとPrintAnyServerへの登録用スクリプトの使い方を記述しておくので参考にしてほしい。

Attachments (3)

Download all attachments as: .zip