[[PageOutline]] = 電子ログシステム & 画像ログシステム = '''現在、記述中なので、プログラムの配布は後日行う予定''' KEKBで使用されているZlogの代替として、電子ログシステム(botlog)と画像ログシステム(!PrintAnyServer)を開発した。 == パッケージインストール == このシステムのインストールやその運用は、サーバーシステム管理者でroot権限を持っていることが前提のシステムなので注意。 === インストール環境 === インストールするシステムは、 * Intel_x86_64 * CentOS 6.x(なるべく最新) * apache 2.2.x(CentOS 6.x標準) のみを前提としている。[[br]] これはパッケージ中に、コンパイル済の python2.7、epics_base とapache用 mod_wsgi.so が入っているためなので、 もし別のOSにインストールする場合には、これらを別途コンパイルするか、OSのpackageとpythonのpackageを自力でインストールする必要がある。 また、apache関連の設定も上書きするので、既存のサーバーにインストールする際には、一旦別ディレクトリに展開するなどの注意が必要。[[br]] なるべくなら新規のサーバーか仮想マシン上に展開するほうがいい。 ''' このシステムは、Web画面表示用javascriptのほとんどをCDN(Content Delivery Network)経由で取得しているので、外部ネットワークから完全に隔離されたネットワークでは動作しない。[[br]] 必ず、グローバルネットワークへ接続可能なネットワークで使用すること。[[br]] ''' この問題はいつかは解決する予定なので、もう少し時間を頂きたい。 === パッケージ展開 === 電子ログシステム関連のプログラムのほとんどは、{{{/opt/OperationLog}}}に置くようにしてある。[[br]] 追加/上書きされるディレクトリ一覧は、次のようになっている。 {{{ /opt/OperationLog/botlog botlog本体 /PrintAnyServer PrintAnyServer本体 /data データ保存ディレクトリ /botlog botlog用DB /pas 画像保存用 /epics EPICS base R.14.12.7 /etc 環境設定用 /local 環境用プログラム(python2.7等) /log ログ保存ディレクトリ /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を使用するようにコンパイル済 }}} そのまま上書きする場合には、rootで実行する必要がある。 {{{ [root@localhost ~]# tar zxf botlog_pas_xxxxxx.tar.gz -C / }}} 展開後、ライブラリパスを設定し、{{{/opt/OperationLog/lib}}}を使用可能にする。 {{{ [root@localhost ~]# ldconfig }}} また、httpd(apache)のサービスを起動していない場合には、設定ファイルのチェック後にサービスを起動する。 {{{ [root@localhost ~]# apachtctl -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 }}} === 管理ユーザー設定 === 電子ログの管理ユーザーを設定する。[[br]] {{{root}}}で問題なければそのままでも構わないが、管理用のユーザーを作ったほうが安全だと思われる。[[br]] 展開した{{{/opt/OperationLog}}}以下のディレクトリは、所有者が{{{uid:501,gid:502}}}になっているので、ファイルは適切な所有者に変更すること。 === PrintAnyServerの起動 === PrintAnyServerの本体は、httpdとは別のプロセスとして動作しているので、事前に起動させておく必要がある。[[br]] 起動用のスクリプトを作成してあるが、まずはコマンドラインから起動して動作確認をする。[[br]] PrintAnyServerは、内部でuid,gid等を変更する機能があるので、rootで実行すること。[[br]] {{{ [root@localhost ~]# cd /opt/OperationLog/PrintAnyServer [root@localhost PrintAnyServer]# source /opt/OperationLog/etc/env.sh [root@localhost PrintAnyServer]# python2.7 printAnyServer.py conf/test.cfg Bottle v0.12.13 server starting up (using PasteServer())... Listening on http://0.0.0.0:9090/ Hit Ctrl-C to quit. serving on 0.0.0.0:9090 view at http://127.0.0.1:9090 }}} 正常に起動できれば、以上のようなメッセージが表示される。 === 動作確認 === 同一ネットワーク上のPCでWebブラウザを立ち上げて、それぞれ{{{http://(HOSTNAMEorIPADDR)/TEST/botlog/edit}}}と{{{http://(HOSTNAMEorIPADDR)/printView}}}にアクセスすると画面が表示されるはずである。 [[Image(2018_08_17_18_08_56.png,300)]][[Image(2018_08_17_18_09_17.png,300)]] == 設定 == この状態でも一般的な使用は可能なので、そのまま使っても問題はないが、最低でも{{{http://(HOSTNAMEorIPADDR)/TEST/botlog/***}}}の{{{/TEST}}}は変更したほうがいいだろう。[[br]] botlog,PrintAnyServer共に設定を変更した際には、必ずhttpdを再起動する必要がある。 {{{ [root@installtest2 ~]# service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ] }}} === botlog === ==== サイト名変更 ==== 接続先URLが、{{{/TEST/botlog/***}}}となっているので、これを変更する。[[br]] 修正するファイルは、{{{/opt/OperationLog/botlog/modules/botlogConfig.py}}}。このファイルは、{{{/opt/OperationLog/botlog/botlogConfig_default.py}}}のシンボリックなので、一旦シンボリックを削除して、{{{botlogConfig_default.py}}}をコピーしてから修正する。[[br]] 今回は{{{"EUJP"}}}とする。 ここからは、管理ユーザーで行う。 {{{ [user@localhost ~]$ cd /opt/OperationLog/botlog/ [user@localhost botlog]$ rm modules/botlogConfig.py [user@localhost botlog]$ cp botlogConfig_default.py modules/botlogConfig.py [user@localhost botlog]$ vi modules/botlogConfig.py      : # 正式版(or 外部プログラム)用サーバー設定 def getServerCfg(self): # type: [ httpd | standalone ] # standalone: 単体動作用デバッグサーバ # httpd: WebApplicaiotn return {'type':'httpd', 'host':'localhost', # Set server IP address 'port':8088, 'root':'/EUJP'} # Set Site Name      : }}} 修正箇所は{{{getServerCfg:root}}}。[[br]] 修正後に、httpdを再起動し、{{{http://(HOSTNAMEorIPADDR)/EUJP/botlog/edit}}}にアクセスしすると同じデータが表示される。 ==== DB ==== デフォルトでは、sqlite3が動作確認用DBとして設定されている。[[br]] sqlite3のDBは単一ファイルなので、ファイルの保存ディレクトリを変更すればいい。[[br]] {{{ # sqlite3用DB設定 def getSqlite3Cfg(self): # file: db file # dbファイルのフルパスを設定 # * 作成したファイルとファイルのあるディレクトリのパーミッションは"777"にしておくか # Webサーバーのユーザー(通常はapache/apache)が読み書きできるようにしておくこと return {'file':'/opt/OperationLog/data/botlog/db/sqlite3/botlog.sqlite3'} }}} コメントにも書いてあるように、DBファイルとディレクトリのパーミッションは"777"にしないと動作しなくなるので注意。[[br]] DBをPostgreSQLに変更する場合には、 {{{ # DB種別設定 def getDbCfg(self): # type: [ sqlite3 | postgresql ] #return {'type':'sqlite3'} return {'type':'postgresql'} # postgresql用設定 # userは設定しないとhttpd user(apache)で書き込むので、 # DB管理用ユーザー(作成ユーザー)を設定すること def getPostgresqlCfg(self): return {'host':'localhost', <-- DBホスト 'port':5432, <-- 接続ポート番号 'db':'botlog', <-- DB名(これは変えなくてもいい) 'user':'logoper', <-- DB接続ユーザー名 'passwd':''} <-- DB接続パスワード }}} の設定を変更する。[[br]] PostgreSQL自体の設定はここでは説明しない。 ==== セクション(グルーブ)設定 ==== セクション名の設定は、SQLを直接実行するか、{{{/opt/OperationLog/botlog/sql/[sqlite3|PostgreSQL]/section.sql}}}を編集したデータを各DB用のコンソールから設定する。[[br]] 但し、idが0,1は特別な意味を持っているので、設定は変更しないこと。[[br]] データがない初期状態ならば、テーブルを一括で作成するスクリプトを作成しているので、それを利用すると一括でテーブルを再構築する。 * sqlite3 の場合 {{{ [user@localhost ~]$ /opt/OperationLog/botlog/sql/sqlite3/createTable.sh /opt/OperationLog/data/botlog/db/sqlite3/botlog.sqlite3 }}} * PostgreSQLの場合 PostgreSQLの場合には、DBへ接続するための設定をシェルスクリプト内に記述してから実行すること。 {{{ [user@localhost ~]$ /opt/OperationLog/botlog/sql/PostgreSQL/createTable.sh }}} === !PrintAnyServer ===