[[PageOutline]] = 電子ログシステム & 画像ログシステム = KEK cERL/PF 加速器の運転のため、電子ログシステム(botlog)と画像ログシステム(!PrintAnyServer)を開発した。[[br]] 2018年加速器学会でも報告している * [https://www.pasj.jp/web_publish/pasj2018/abstracts/index.html Abstract ページ] * [https://www.pasj.jp/web_publish/pasj2018/abstracts/html/WEP102.htm 「Webベース電子ログ及び画像ログシステムの開発」WEP102] * [attachment:WEP102.pdf Proceedings] = 使用方法 = * [wiki:/misc/botlog_pas/users_manual/botlog botlogの使用方法] * [wiki:/misc/botlog_pas/users_manual/pas PrintAnyServerの使用方法] === 外部プログラムとWeb APIの使い方 === * [wiki:/misc/botlog_pas/epicsrecordmonitor EPICS record monitor] * [wiki:/misc/botlog_pas/webapi_input botlogとPrintAnyServerへの登録用スクリプトの使い方] = tarballインストール = tarballは以下のURLからダウンロードできる。インストールや運用は、サーバーシステム管理者でroot権限を持っていることを前提としている。 [http://cerldev.kek.jp/botlog_pas/botlog_pas_20180914_09.tar.gz botlog & PrintAnyServer ソースtarball(2018/09/14版)][[br]] [http://cerldev.kek.jp/botlog_pas/botlog_pas_etc_20180914_09.tar.gz botlog & PrintAnyServer 設定tarball(2018/09/14版)][[br]] ソースtarballはプログラムソースと実行環境をまとめてあり、設定tarballは、プログラムを実行するために必要な環境設定をまとめてある。[[br]] == 変更/バグ対応差分 == [http://cerldev.kek.jp/botlog_pas/botlog_pas_diff_20180914_09.tar.gz botlog & PrintAnyServer ソースdiff tarball(2018/09/14版)][[br]] ソースdiff tarballは、前回から変更したファイルのみをまとめてあるので、既存の環境に上書きする場合にはこれを使用すること。[[br]] '''変更の際には安全のために、データファイルと実行環境のバックアップを作成してから作業を行うように。''' プログラムの変更履歴は[wiki:/misc/botlog_pas/history 別ページ]に記述。 == 検証環境 == === サーバー側 === 今回のインストールに使用したシステムは、 * Intel_x86_64 * CentOS 6.9(最新は6.10) * インストールディスク: netinstall * インストールパッケージ: desktop * apache 2.2.x(CentOS 6.x標準) のみで動作検証している。[[br]] これは各tarball中に、コンパイル済の python2.7、epics_base とapache用 mod_wsgi.so が入っているためなので、 もし別のOSにインストールする場合には、これらを別途コンパイルするか、OSのpackageとpythonのpackageを自力でインストールする必要がある。 また、設定tarballをインストールするとapache関連の設定も上書きするので、既存のサーバーにインストールする際には、一旦別ディレクトリに展開するなどの注意が必要。[[br]] なるべくなら新規のサーバーか仮想マシン上に展開するほうがいい。 ''' このシステムは、Web画面表示用javascriptのほとんどをCDN(Content Delivery Network)経由で取得しているので、外部ネットワークから完全に隔離されたネットワークでは動作しない。[[br]] 必ず、グローバルネットワークへ接続可能なネットワークで使用すること。[[br]] ''' (この問題はいつかは解決する予定だが、現時点では優先順位は高くない。要望があれば連絡して欲しい。) === Webクライアント側 === 現在開発に使用しているのは、主にWindows版chromeなので、これを推奨する。[[br]] firefox,edge,safariでもWeb画面の印刷機能以外は、動作を確認している。[[br]] IEは動作しないので、使用しないこと。[[br]] 多分、ここ2~3年以内に更新されているHTML5対応のWebクライアントならば、ほとんどのものは使用可能だと思われるが、保証の限りではない。[[br]] == tarball展開 == 電子ログシステム関連のプログラムのほとんどは、{{{/opt/OperationLog}}}に置くようにしてある。[[br]] 追加/上書きされるディレクトリ一覧は、次のようになっている。 ソース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を展開すれば、実行可能な状態になる。[[br]] 設定環境を自分で構築する場合には、ソースtarballのみを展開後、自分で設定を行う必要がある。[[br]] これらのtarballをそのまま展開する場合には、rootで実行する必要がある。 {{{ [root@localhost ~]# tar zxvf botlog_pas_xxxxxx.tar.gz -C / [root@localhost ~]# tar zxvf botlog_pas_etc_xxxxxx.tar.gz -C / }}} 設定tarballを展開して実行する場合には、以下の設定を実行する。[[br]] * ライブラリパスを設定し、{{{/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とは別のプロセスとして動作しているので、事前に起動させておく必要がある。[[br]] 起動用のスクリプトを作成してあるが、まずはコマンドラインから起動して動作確認をする。[[br]] PrintAnyServerの起動は、通常はapacheユーザーで行う。apacheは通常はログインできないユーザーなので、{{{root}}}になってからログイン。[[br]] {{{ [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 }}} 正常に起動できれば、以上のようなメッセージが表示される。[[br]] == 動作確認 == ソースtarballと設定tarballの両方をインストールすると、直ぐにシステムが稼働できる状態になる。 同一ネットワーク上のPCでWebブラウザを立ち上げて、それぞれ{{{http://(HOSTNAMEorIPADDR)/botlog/edit}}}と{{{http://(HOSTNAMEorIPADDR)/printView}}}にアクセスすると画面が表示されるはずである。[[br]] 下記の画面は、電子ログシステム起動後に入力した画面の例。 [[Image(2018_08_24_13_55_40.png,300)]][[Image(2018_08_24_13_56_17.png,300)]] botlogの動作確認は、"運転内容"に何かメッセージを入力し、"現在時刻で登録"を押下してログが表示されればOK。[[br]] PrintAnyServerは、サーバー起動後にWeb画面から画像を登録して動作を確認する。[[br]] Web画面を起動し、クリップボードに画像を読み込んでから、"Paste clipboard image or Drop image file"上で右クリックして、"貼り付け(Paste)"を選択する。[[br]] 画像のサムネイルとキャプションが入力できるダイアログボックスが表示されるので、"登録"ボタンを押下する。[[br]] 正常に動作すれば画像が表示され、{{{/opt/OperationLog/data/pas}}}に日付ディレクトリとindex_list.txtというファイルが作成される。[[br]] 画像が保存されたことを確認したら、一旦 {{{CTRL+C}}}でPrintAnyServerを終了する。 = 運用 = このままでも運用は可能なので、特に修正する必要がない場合には、このままPrintAnyServerを起動しても問題はない。[[br]] 修正が必要なら[wiki:/misc/botlog_pas/modify 詳細設定]を参照して、修正を行う。[[br]] == PrintAnyServer起動スクリプト == PrintAnyServerをprocServで起動するためのスクリプト"{{{/opt/OperationLog/PrintAnyServer/bootPas.sh}}}"を作成してあるので、通常運用時に使用して欲しい。[[br]] このスクリプトも'''必ずapacheユーザーで起動すること。'''[[br]] ファイルの内容は以下の通り。 {{{ #!/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}}}で設定ファイルの名前を変更する程度だが、実際に使用する際には、環境に合わせてスクリプトの内容は変更してから使用すること。[[br]] PrintAnyServerを通常運用する場合には、以下のコマンドを{{{crontab の@reboot}}}に設定するか {{{/etc/rc.local}}}に記述すると、サーバー起動時に自動的に実行されるようになる。 {{{ sudo -u apache /opt/OperationLog/PrintAnyServer/bootPas.sh }}} == 外部プログラムとの連携 == botlog,PrintAnyserver共にWeb APIを使ってデータの登録を行っているので、外部プログラムからのデータ登録も可能になっている。[[br]] 応用例として、EPICSとの連携に使用している[wiki:/misc/botlog_pas/epicsrecordmonitor EPICS record monitor]がtarball内にあるので使ってほしい。[[br]] また、PrintAnyServerへの画像登録も同様に可能となっている。[[br]] [wiki:/misc/botlog_pas/webapi_input botlogとPrintAnyServerへの登録用スクリプトの使い方]を記述しておくので参考にしてほしい。