Changes between Version 1 and Version 2 of epics/channelarchiver


Ignore:
Timestamp:
08/18/16 15:44:38 (8 years ago)
Author:
hirose
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • epics/channelarchiver

    v1 v2  
    1 Channel Archiver のビルドについて 
     1== 概要 == 
     2 
     3Channel ArchiverはSpallation Neutron Source(SNS)でC++を用いて開発された、EPICSのデータを記録するためのツールセットである。[[BR]] 
     4その中心となるArchive Engine はChannel Access(CA)を介して複数のCA Server(IOC)からデータを収集する。[[BR]] 
     5収集したデータは定期的に独自のバイナリ形式でローカルディスクファイル(データファイル)に書き出され、インデックスファイルによって関連付けられる(インデックスはR木で実装されている)。[[BR]] 
     6これらの履歴データはXML-RPCを実装したData Serverを起動することで、ネットワーク上の他計算機からも読出すことができる。[[BR]] 
     7 
     8== ビルド方法 == 
     9 
     10今回は以下の環境でビルドを行った。 
     11||= OS =|| CentOS 7 64bit || 
     12||= GCC =|| 4.8.5 || 
     13||= EPICS Base =|| 3.14.12.5 || 
     14 
     151. '''EPICS Base及びExtensions セットアップ'''[[BR]] 
     16 まずは EPICS Base 及び Extensions をセットアップする。[[BR]] 
     17 これについては、[wiki:epics/install EPICSをゼロからインストール]に手順が記載されているため、ここでは説明を割愛する。 
     182. '''ソース ダウンロード'''[[BR]] 
     19 githubからクローンし、masterブランチでチェックアウトする。これよりも前?のバージョンはタグで管理されているようだ。 
     20{{{ 
     21$ cd $EPICS_EXTENSIONS/src 
     22$ git clone https://github.com/EPICSTools/ChannelArchiver 
     23$ cd ChannelArchiver 
     24$ git checkout --track origin/master 
     25}}} 
     263. '''必要なライブラリの整備'''[[BR]] 
     27 !ChannelArchiver/ThirdPartyディレクトリに、ビルド時に利用されるライブラリパッケージが置かれている。[[BR]] 
     28 今回インストールしたライブラリは下記の通り。[[BR]] 
     29 なお、__xerces-c-devel及びperl-Frontier-RPCはソースからインストール__し、その他はyumでインストールした。[[BR]] 
     30    ||=  Library  =||=  Version  =|| 
     31    ||= xerces-c-devel =|| 2.8.0 || 
     32    ||= xmlrpc-c-devel =|| 1.32.5-1905 || 
     33    ||= perl-libwww-perl =|| 6.05-2 || 
     34    ||= expat =|| 2.1.0-8 || 
     35    ||= perl-XML-Simple =|| 2.20-5 || 
     36    ||= perl-Frontier-RPC =|| 0.07b4 || 
     374. '''ビルド'''[[BR]] 
     38 GCCコンパイラのバージョンの影響かは分からないが、ビルド時にエラーが発生してしまう。[[BR]] 
     39 そこで、予め !ChannelArchiver/Tools/AVLTreeTest.cpp の修正を行っておく(この修正による影響はないとみている)。[[BR]] 
     40 
     41 そのままビルドすると、sort_compare や toString の関数定義がないといわれる。[[BR]] 
     42 これはAVLTree.h がインクルードされた後に、上記の関数定義がされていたためである。[[BR]] 
     43 これを、__関数定義がされた後にインクルードするように修正__しておく。[[BR]] 
     44 
     45 修正後、makeする。[[BR]] 
     46{{{ 
     47$ cd $EPICS_EXTENSIONS/src/ChannelArchiver 
     48$ make 
     49$ ls $EPICS_EXTENSIONS/bin/linux-x86_64 
     50 ArchiveDataClient.pl         ArchiveExport           make_compress_script.pl 
     51 ArchiveDataServerStandalone  ArchiveIndexTool        make_indexconfig.pl 
     52 ArchiveDataTool              ArchiveManager 
     53 ArchiveEngine                ConvertEngineConfig.pl 
     54}}} 
     55 
     56== Archive Engine 起動 == 
     57 
     581. '''Configuration (XML) 作成'''[[BR]] 
     59  !ChannelArchiver/Engine ディレクトリ下に DTDファイル と サンプルのXMLファイルが置かれているので、これを参考に作成する。 
     60{{{ 
     61$ ls $EPICS_EXTENSIONS/src/ChannelArchiver/Engine | grep engineconfig* 
     62 engineconfig.dtd      engineconfig.xml 
     63}}} 
     642. '''起動'''[[BR]] 
     65 インデックスファイルとデータファイルを格納するディレクトリを用意し、各オプションを指定して起動する。 
     66{{{ 
     67$ mkdir $HOME/ChannelArchiver/data 
     68$ $EPICS_EXTENSIONS/bin/linux-x86_64/ArchiveEngine -port 4812 -description "Example IOC" -log log/engine.log engineconfig.xml $HOME/ChannelArchiver/data/index  
     69}}} 
     70 
     71== Archive Engine管理ツール(!ArchiveDaemon) セットアップ == 
     72 
     73インデックスファイルは破損してしまうことがしばしばあり、サイズが大きいと復旧にかなりの時間を要する。[[BR]] 
     74この影響を低減させる目的で、!ArchiveDaemonをセットアップする。[[BR]] 
     75!ArchiveDaemonは複数のArchive Engineを一括管理でき、自動再起動なども設定できる。[[BR]] 
     76 
     771. '''!ArchiveDaemon 定義ファイル(XML)作成'''[[BR]] 
     78 定義ファイルのサンプルは $EPICS_EXTENSIONS/src/ChannelArchiver/ExampleSetup ディレクトリに置かれている。[[BR]] 
     79 例えば、日毎にインデックスファイルを作成する(Archive Engineを再起動する)場合は、以下のように記述する。 
     80{{{ 
     81<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
     82<!DOCTYPE daemon SYSTEM "ArchiveDaemon.dtd"> 
     83<daemon> 
     84  <port>4900</port> 
     85  <engine directory='/mnt/edata1/archiver/ChannelArchiver/data/BM'> 
     86    <desc>BM</desc> 
     87    <port>51130</port> 
     88    <config>/mnt/edata1/archiver/cssArchiver/xml_files/BM.xml</config> 
     89    <restart type='daily'>00:10</restart> 
     90  </engine> 
     91  <engine directory='/mnt/edata1/archiver/ChannelArchiver/data/BT'> 
     92    <desc>BT</desc> 
     93    <port>51131</port> 
     94    <config>/mnt/edata1/archiver/cssArchiver/xml_files/BT.xml</config> 
     95    <restart type='daily'>00:20</restart> 
     96  </engine> 
     97  <engine directory='/mnt/edata1/archiver/ChannelArchiver/data/CO'> 
     98    <desc>CO</desc> 
     99    <port>51132</port> 
     100    <config>/mnt/edata1/archiver/cssArchiver/xml_files/CO.xml</config> 
     101    <restart type='daily'>00:30</restart> 
     102  </engine> 
     103<daemon> 
     104}}} 
     1052. '''!ArchiveDaemon 起動'''[[BR]] 
     106 i. 環境変数 設定[[BR]] 
     107{{{ 
     108$ export PATH="$EPICS_EXTENSIONS/bin/linux-x86_64:$PATH" 
     109$ export LD_LIBRARY_PATH="/usr/local/lib:$EPICS_BASE/lib/linux-x86_64" 
     110}}} 
     111 ii. 起動[[BR]] 
     112{{{ 
     113$ cd /mnt/edata1/archiver/ChannelArchiver/daemon 
     114$ /usr/bin/perl $EPICS_EXTENSIONS/src/ChannelArchiver/ExampleSetup/ArchiveDaemon.pl -f ArchiveDaemon.xml 
     115Read ArchiveDaemon.xml. Check status via 
     116          http://localhost:4900 
     117You can also monitor the log file: 
     118          ArchiveDaemon.log 
     119Disassociating from terminal. 
     120}}} 
     121  デフォルトは4900番ポートでWeb管理画面が動作しており、http://localhost:4900 でアクセスできる。[[BR]] 
     122 
     1233. '''master_index 作成'''[[BR]] 
     124 最新の index は current_index で参照することが出来る。[[BR]] 
     125 しかし、このままでは日毎のデータしか参照できない状態であり、不便である。[[BR]] 
     126 そこで、index をひとまとめにした master_index を作成する。[[BR]] 
     127 i. indexconfig.xml を作成する[[BR]] 
     128   make_indexconfig.pl を実行して、indexconfigを作成する。[[BR]] 
     129{{{ 
     130$ make_indexconfig.pl -d indexconfig.dtd /path/to/index > indexconfig.xml 
     131$ less indexconfig.xml 
     132<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
     133<!DOCTYPE indexconfig SYSTEM "/proj/epics/R314/R31412/extensions/R314123-CSA_centos7/src/ChannelArchiver/IndexTool/indexconfig.dtd"> 
     134<indexconfig> 
     135        <archive> 
     136                <index>/mnt/edata1/archiver/ChannelArchiver/data/BM/2016/01_18/index</index> 
     137        </archive> 
     138        <archive> 
     139                <index>/mnt/edata1/archiver/ChannelArchiver/data/BM/2016/01_19/index</index> 
     140        </archive> 
     141</indexconfig> 
     142}}} 
     143   なお、/path/to/*/index と指定すれば、/path/to 以下全ての index を探してくれる。[[BR]] 
     144 ii. master_index を作成する 
     145{{{ 
     146$ ArchiveIndexTool -v 1 indexconfig.xml master_index 
     147}}} 
     148 
     149 なお、今回のバージョンよりも前のものでは、!ArchiveDaemon が自動的に master_index を作成している。[[BR]] 
     150 少し調べてみると、どうやら !ArchiveDaemon.pl の仕様が変更されている模様。[[BR]] 
     151 PF-ARのは 2.3.0 、こちらは 3.0.0 とメジャーバージョンが異なっている。[[BR]] 
     152 2.3.0 では、master_index を作成していると思われるファンクションや変数があるが、3.0.0 には無くなっている。[[BR]] 
     153 指定できるオプション(引数)も違っていた。 
     154 
     155 master_indexは定期的に更新するのが望ましいため、crontabで更新処理を行うようにした。[[BR]] 
     156 各グループの master_index を作成するスクリプト(create_master_index.sh)を用意し、kbdaemonユーザで30分おきに実行するように設定した。[[BR]] 
     157{{{ 
     158*/30 * * * * /mnt/edata1/archiver/ChannelArchiver/data/indices/create_master_index.sh 
     159}}} 
     160 
     161== CSSで閲覧する == 
     162 
     163CSSなどのクライアントアプリケーションからデータを閲覧するために!ArchiveDataServerを立ち上げる。[[BR]] 
     164具体的には、HTTP Serverを立ち上げ、予め用意されているCGIを実行する。[[BR]] 
     165 
     1661. '''サーバディレクトリ 作成'''(apache ユーザがアクセス出来るようにしておくこと) 
     167{{{ 
     168# mkdir /var/www/html/archive/cgi 
     169}}} 
     170 ここにCGIプログラム、設定ファイルを配置する。 
     171{{{ 
     172# cd /var/www/html/archive/cgi 
     173# cp $EPICS_EXTENSIONS/src/ChannelArchiver/XMLRPCServer/O.linux-x86_64/ArchiveDataServer . 
     174# cp $EPICS_EXTENSIONS/src/ChannelArchiver/XMLRPCServer/serverconfig.dtd . 
     175# cp $EPICS_EXTENSIONS/src/ChannelArchiver/XMLRPCServer/serverconfig.xml . 
     176# mv ArchiveDataServer ArchiveDataServer.cgi 
     177}}} 
     178 各グループのデータが見られるように、serverconfig.xml を下記のように編集する。 
     179{{{ 
     180<?xml version="1.0" encoding="UTF-8"?> 
     181<!DOCTYPE serverconfig SYSTEM "serverconfig.dtd"> 
     182<serverconfig> 
     183  <archive> 
     184    <key>1</key> 
     185    <name>BM</name> 
     186    <path>/mnt/edata1/archiver/ChannelArchiver/data/2016/BM/index</path> 
     187  </archive> 
     188  <archive> 
     189    <key>2</key> 
     190    <name>BT</name> 
     191    <path>/mnt/edata1/archiver/ChannelArchiver/data/2016/BT/index</path> 
     192  </archive> 
     193  <archive> 
     194    <key>3</key> 
     195    <name>CO</name> 
     196    <path>/mnt/edata1/archiver/ChannelArchiver/data/2016/CO/index</path> 
     197  </archive> 
     198</serverconfig> 
     199}}} 
     200 
     2012. '''/etc/httpd/conf/httpd.conf 編集'''[[BR]] 
     202 サーバディレクトリの設定(下記)を最終行に追加する。 
     203{{{ 
     204# Check that environment variables are available, 
     205# assert that this directive is not commented-out. 
     206# Your web server might use a different module name 
     207# or location, in my case it happened to be this : 
     208LoadModule env_module libexec/httpd/mod_env.so 
     209 
     210# Check that CGI is enabled, i.e. assert that 
     211# these are not commented-out: 
     212LoadModule cgi_module libexec/httpd/mod_sgi.so 
     213 
     214# This tells Apache that ArchiveDataServer.cgi 
     215# is a CGI program because of the .cgi extension: 
     216AddHandler cgi-script .cgi 
     217 
     218<Directory "/var/www/html/archive"> 
     219  Order Allow,Deny 
     220  Allow from All 
     221</Directory> 
     222 
     223# Allow cgi-scripts in the ..../cgi directory : 
     224<Directory "/var/www/html/archive/cgi"> 
     225  SetEnv EPICS_TS_MIN_WEST -540 
     226  SetEnv LD_LIBRARY_PATH /usr/local/lib:/proj/epics/R314/R31412/base-3.14.12.3-CSA_centos7/lib/linux-x86_64 
     227  SetEnv SERVERCONFIG /var/www/html/archive/cgi/serverconfig.xml 
     228 
     229  # This directive enables CGI for this dir.: 
     230  Options +ExecCGI 
     231</Directory> 
     232}}} 
     233 
     2343. ''' httpdサービス 再起動''' 
     235{{{ 
     236# systemctl restart httpd.service 
     237}}} 
     238 
     2394. '''CSS !DataBrowser 閲覧'''[[BR]] 
     240 Archive SearchのURLで下記のように指定する。 
     241{{{ 
     242xnds://localhost:80/archive/cgi/ArchiveDataServer.cgi 
     243}}} 
     244 
     245{{{#!comment 
     246== トラブルシューティング == 
     247* '''!ArchiveEngine 起動エラー'''[[BR]] 
     248 どうやら write_period タグの値が読み込めていないようだが、なぜそうなっているのか原因は不明...[[BR]] 
     249 get_threshold や file_size など他タグでも、同様のエラーが発生している。 
     250{{{ 
     25112/25/2015 15:52:04 Starting Engine with configuration file engineconfig.xml, index data/index 
     25212/25/2015 15:52:04 Creating ChannelAccess Context. 
     25312/25/2015 15:52:04 Removing memory for channels and groups. 
     25412/25/2015 15:52:04 Stopping ChannelAccess. 
     25512/25/2015 15:52:04 Engine main routine: 
     256../EngineConfig.cpp (68): 'engineconfig.xml': Error in write_period 
     257 
     25812/25/2015 15:52:04 Done. 
     259}}} 
     260 Apache Xercesのバージョンが3.1.1でこの問題が発生してしまった。[[BR]] 
     261 バージョンを2.8.0に変更したら解決したため、バージョンによる問題と思われる。[[BR]] 
     262 2.8.0のインストールは下記のように行った。[[BR]] 
     263{{{ 
     264$ cd $EXTENSIONS_TOP/src/ChannelArchiver/ThirdParty 
     265$ wget http://archive.apache.org/dist/xerces/c/xerces-c-src-current.tar.gz 
     266$ tar xzvf xerces-c-src-current.tar.gz 
     267$ ls 
     268 xerces-c-src_2_8_0 
     269$ cd xerces-c-src_2_8_0/src/xercesc 
     270$ export XERCESCROOT=$EXTENSIONS_TOP/src/ChannelArchiver/ThirdParty/xerces-c-src_2_8_0 
     271$ ./runConfigure -plinux -cgcc -xg++ -minmen -nsocket -tnative -rpthread 
     272$ make 
     273$ su root 
     274# make install 
     275}}} 
     276 
     277* '''!ArchiveDataServer 起動'''[[BR]] 
     278 [[Image(DataServerModel.png, 400)]][[BR]] 
     279 クライアントアプリケーションとして '''!ArchiveViewer''' が配布されているようなので、早速試してみる。[[BR]] 
     280 * [https://ics-web.sns.ornl.gov/archive/viewer/] 
     281 
     282 !ArchiveViewer は !ArchiveDataServer に対して問い合わせを行う。手順はマニュアルを参考に行った。[[BR]] 
     283 
     284 1. httpd(v2.4.6-40) サービスを起動する。 
     285{{{ 
     286# yum install httpd 
     287# systemctl enable httpd 
     288# systemctl start httpd 
     289}}} 
     290 2. !ArchiveDataServer 起動ディレクトリを作成する。[[BR]] 
     291  このディレクトリに配置するものは、''$EPICS_EXTENSIONS/src/ChannelArchiver/DemoData'' にサンプルが用意されているので、今回はそれらを流用する。[[BR]] 
     292  コピーしてくるものは、以下の2つ。 
     293  * abyss.conf 
     294  * abyss/mime.types 
     295 
     296{{{ 
     297$ mkdir $HOME/ChannelArchiver/DataServer 
     298$ mkdir $HOME/ChannelArchiver/DataServer/abyss 
     299$ cd $HOME/ChannelArchiver/DataServer 
     300$ cp $EPICS_EXTENSIONS/src/ChannelArchiver/DemoData/abyss.conf . 
     301$ cp $EPICS_EXTENSIONS/src/ChannelArchiver/DemoData/abyss/mime.types abyss/ 
     302$ vim abyss.conf 
     303---- 
     304 # The Server Root (UNIX systems style) 
     305 ServerRoot $HOME/ChannelArchiver/DataServer 
     306---- 
     307 
     308$ $EPICS_EXTENSIONS/bin/linux-x86_64/ArchiveDataServerStandalone abyss.conf $HOME/ChannelArchiver/data/index 
     309   ArchiveDataServerStandalone Running 
     310   Unless your 'abyss.conf' selects a different port number, 
     311   the data should now be available via the XML-RPC URL 
     312       http://localhost:8080/RPC2 
     313}}} 
     314 
     315 3. !ArchiveViewer を起動する。[[BR]] 
     316{{{ 
     317$ java -jar archiveviewer.jar -u http://localhost:8080/RPC2 
     318}}} 
     319 
     320}}} 
     321 
     322== 参考リンク == 
     323 
     324* [http://www.aps.anl.gov/bcda/epicsgettingstarted/starttools/channelarchiver.htm EPICS Channel Archiver(ANL)] 
     325* [https://ics-web.sns.ornl.gov/kasemir/archiver/ Kay氏のページ] 
     326* [https://github.com/EPICSTools/ChannelArchiver github] 
     327