文書の過去の版を表示しています。


Installation on shoa-a/shoa-b in Oct. 2023

環境

  • RCNPコンピュータ環境 (インタラクティブノード) saho-a / saho-b
  • OS:
    [kobayash@saho-a ~]$ cat /etc/redhat-release 
    AlmaLinux release 8.4 (Electric Cheetah)
    [kobayash@saho-a ~]$ uname -a
    Linux saho-a.rcnp.osaka-u.ac.jp 4.18.0-193.14.2.el8_2.x86_64 #1 SMP Sun Jul 26 03:54:29 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

準備

  • 自分のアカウントは、kobayash で、ホームディレクトリは /home/kobayash。このディレクトリ以下に NestDAQ をインストールする。nestdaq 関連のライブラリは /home/kobayash/nestdaqにインストールする。以下の文章では、kobayash の部分を適宜自身のアカウント名に読み替えてインストールすれば良い。
  • ログインシェル は bash。以下のコマンドで確認可能。
     $ echo $SHELL
    /bin/bash

    saho-a /saho-b のデフォルトのシェルは tcsh だった気がするが、もし tcsh だった場合、bashに変更しておくと良い。ログインシェルを bash に変えるには、アカウント管理ページから設定できず、計算機室にメールでお願いする必要があるかも。

  • NestDAQは zstd, libzstd-devel, python3 などのパッケージが必要になるが、saho-a/saho-b にはすでにインストール済み。以下のコマンドで確認できる。
    [kobayash@saho-a ~]$ dnf list zstd libzstd-devel bzip2-devel cmake python36-devel ptyhon36 tmux
    ...
    Installed Packages
    bzip2-devel.x86_64         1.0.6-26.el8                               @BaseOS   
    libzstd-devel.x86_64       1.4.2-2.el8                                @BaseOS   
    python36-devel.x86_64      3.6.8-2.module_el8.1.0+245+c39af44f        @AppStream
    tmux.x86_64                2.7-1.el8                                  @BaseOS   
    zstd.x86_64                1.4.2-2.el8                                @AppStream
    ...

    ただ、pythonは古いバージョンの 3.6 しか入っていないので、SlowDashを使う時はこれだと問題がおきるはず(TimeSeriesのグラフが表示されなくなるはず)。SlowDash を動かす際は、新しいPython に切り替える必要あり。

  • python のライブラリとして、dataclasses といのが必要っぽい。以下のpip3 コマンドでインストール可能
    $ pip3 install dataclasses --user
  • RedisTimeSeries を make する際、python3 が必要になるが、すでにインストール済み。
  • Boost を make する際、zstd と bzip2 のオプションが有効になっている必要がある。そうでないと、nestdaq-user-impl/FileSink.cxx のリンクでエラーになる。zstd, libzstd-devel, bzip2-devel パッケージがインストールされている必要あり。さらに python3-devel も必要。
  • FairMQデバイスを複数立ち上げるため、tmux もあると便利。
  • ZeroMQ を build する際、cmake コマンドが必要。ただ、デフォルトのcmake を用いた場合、バージョン が 3.11 と古いため ZeroMQ のcmake は通るが、FairMQ の cmake が通らない。最新の cmake を自前でインストールする必要がある。以下、インストール方法。
    • saho-a/saho-b に ssh でログインし、cmake 用のディレクトリを作っておく。ディレクトリ名は cmake のバージョンに合わせて cmake-3.27.7 としておく。
       $ ssh kobayash@saho-a
      Password:
      $ mkdir -p $HOME/local/cmake-3.27.7
    • saho-a/saho-bから一旦ログアウトし、cmake のソースを手元のパソコンにダウンロードする。
       $ wget https://github.com/Kitware/CMake/releases/download/v3.27.7/cmake-3.27.7.tar.gz
    • scp コマンドでダウンロードした cmake-3.27.7をコピーする。
       $ scp cmake-3.27.7.tar.gz kobayash@saho-a:local/cmake-3.27.7
    • 再度 saho-a にログイン。
       $ ssh kobayash@saho-a
      Password:
    • cmake-3.27.7 ディレクトリに移動し、cmake-3.27.7.tar.gz を解凍。さらに、cmake-3.27.7 ディレクトリに移動し、./configure コマンドを実行して、make して make install する。
       $ 
      $ cd $HOME/local/cmake-3.27.7
      $ tar zxvf cmake-3.27.7.tar.gz
      $ cd cmake-3.27.7
      $ ./configure --prefix=$HOME/local/cmake-3.27.7
      $ time make -j10
      real	1m41.326s
      user	13m1.044s
      sys	1m38.289s
      $ make install

      ちなみに、time make -j20 とすると、メモリが足りないと言われた。

    • cmake をインストールしたら、/home/kobayash/.bashrc の中で、/home/kobayash/local/cmake-3.27.7/bin にパスを通す。
      $ emacs -nw $HOME/.bashrc
      <以下の行を最下部あたりに追記>
      # For PATH of cmake 2023.10.12
      export PATH=$HOME/local/cmake-3.27.7/bin:$PATH
    • .bashrc を編集したら、.bashrc を読み込み、cmake のバージョンを確認する。
      $ source $HOME/.bashrc
      $ cmake --version
      cmake version 3.27.7
      
      CMake suite maintained and supported by Kitware (kitware.com/cmake).
  • ROOTのバージョンが古いと、nestdaq-user-impl のソースコードのコンパイル時にエラーになる。具体的には、saho-a/saho-b にインストールされている ROOT v6.20.06 だとエラーになるが、ROOTの最新版 (v6.28.06) だと問題なかった。以下のコマンドで ROOT のバージョンを確認可能。
    $ root --version
    ROOT Version: 6.20/06
    Built for linuxx8664gcc on Jun 10 2020, 06:10:57
    From tags/v6-20-06@v6-20-06

    もし、古いバージョンの ROOT が起動したら、まずそのROOTが立ち上がらない様に設定する。ROOTのインストール(または設定)をしたのは自分自身なので、記憶を頼りに設定を消す。おそらく、ホームディレクトリの .bashrc に以下の様な行が書かれているはずなので、そこをコメントアウトすれば良い。

    source /saho/sharedAPL/root/6.20.06/bin/thisroot.sh

    古い ROOT の設定を消したら、新しい ROOT (v6.28.06) をバイナリからインストールする。(ソースからインストールしても良い。)インストール方法は以下の通り。

    • saho-a/saho-b に ssh でログインし、ROOT version 6.28.06 用のディレクトリを作っておく。ディレクトリ名は ROOT のバージョンに合わせて root_v6.28.06 としておく。
       $ ssh kobayash@saho-a
      Password:
      $ mkdir -p $HOME/local/root_v6.28.06
    • saho-a/saho-bから一旦ログアウトし、root の CentOS 8 用のバイナリ (CentOS 8 の環境用に pre-compiled されたバイナリ) を手元のパソコンにダウンロードする。
       $ wget https://root.cern/download/root_v6.28.06.Linux-centos8-x86_64-gcc8.5.tar.gz

      ちなみに、saho-a/saho-b の OS は AlmaLinux 8 であるが、CentOS 8 用のバイナリが問題なく動く。(AlmaLinux と CentOS は共に RedHat Enterprise Linux のソースコードをコンパイルして作られた RedHat Enterprise Linux のクローン。)

    • scp コマンドでダウンロードした root_v6.28.06.Linux-centos8-x86_64-gcc8.5.tar.gz を saho-a にコピーする。
       $ scp root_v6.28.06.Linux-centos8-x86_64-gcc8.5.tar.gz kobayash@saho-a:local/root_v6.28.06
    • 再度 saho-a にログイン。
       $ ssh kobayash@saho-a
      Password:
    • root_v6.28.06 ディレクトリに移動し、root_v6.28.06.Linux-centos8-x86_64-gcc8.5.tar.gz を解凍。さらに、root ディレクトリに移動し、./configure コマンドを実行して、make して make install する。
       $ 
      $ cd $HOME/local/root_v6.28.06
      $ tar zxvf root_v6.28.06.Linux-centos8-x86_64-gcc8.5.tar.gz
      $ ls
      root_v6.28.06.Linux-centos8-x86_64-gcc8.5.tar.gz root
    • その後、/home/kobayash/.bashrc の中で、root を使うための設定を行う。
      $ emacs -nw $HOME/.bashrc
      <以下の行を最下部あたりに追記>
      # Setup for ROOT version 6.28/06
      source $HOME/local/root_v6.28.06/root/bin/thisroot.sh
    • .bashrc を編集したら、.bashrc を読み込み、ROOT のバージョンを確認する。
      $ source $HOME/.bashrc
      $ root --version

インストール

  • 2023年10月12日(木)現在、NestDAQのインストール方法に関するドキュメントはいくつかある。本家の GitHub のリポジトリの以下のインストール方法が公式と思われるが、CMAKE_PREFIX_PATHの指定が不要なところもあり、新しめのインストール方法のメモを見るのが良さそう。
  • 新しいインストール方法のメモとしては、e50server01 のインストールログを見るのが良い。
  • このページは、Ubuntu MATE 22.04.02 LTS(Installation on Ubuntu MATE 22.04.02 LTS)をベースにした。
  • SELinux は大抵問題を引き起こすので、切っておきたい。saho-a/saho-bでは切れている模様。以下のコマンドで確認可能。
    [kobayash@saho-a ~]$ getenforce
    Disabled
  • さらに、一般に、DAQの開発段階では firewall は切っておきたいところだが、saho-a / saho-bでは切られていないので面倒なことになるかもしれない。しょうがない。Firewall を切ってくださいと計算機室にお願いするときっと怒られるので注意。

redis のインストール

  • git でソースをダウンロードしてコンパイル
    $ mkdir -p $HOME/nestdaq/src
    $ cd $HOME/nestdaq/src
    $ git clone https://github.com/redis/redis.git
    $ cd redis
    $ git checkout -b 6.0.16 6.0.16
    $ time make -j20 PREFIX=$HOME/nestdaq
    real	0m30.695s
    user	1m1.271s
    sys	0m15.397s
    $ make PREFIX=$HOME/nestdaq install
  • 設定ファイルを $HOME/nestdaq/etc にコピー
    $ mkdir $HOME/nestdaq/etc
    $ cp $HOME/nestdaq/src/redis/redis.conf $HOME/nestdaq/etc/
  • daemon mode をオンにする。
    $ emacs -nw $HOME/nestdaq/etc/redis.conf
    daemonize no
       | | |
       V V V
    #daemonize no
    daemonize yes

RedisTimeSeries をインストール

  • $ cd $HOME/nestdaq/src
    $ git clone --recursive https://github.com/RedisTimeSeries/RedisTimeSeries.git
    $ cd RedisTimeSeries
    $ git checkout -b v1.4.9 v1.4.9
    $ time make
    ...
    real	0m4.267s
    user	0m3.825s
    sys	0m1.531s
    $ mkdir $HOME/nestdaq/lib
    $ cp $HOME/nestdaq/src/RedisTimeSeries/bin/linux-x64-release/redistimeseries.so $HOME/nestdaq/lib/
  • time make -j2 とすると、エラーとなる。
     $ time make -j2
    ...
    make[1]: warning: -jN forced in submake: disabling jobserver mode.
    Submodule path 'deps/RedisModulesSDK': checked out 'c0740b8209abae38775adc6f3fefe05a520be55b'
    Submodule path 'deps/readies': checked out '32e37e68f6ffa66f5a6e41cb37794147e84c38cb'
    ../deps/readies/mk/main:67: /home/kobayash/nestdaq/src/RedisTimeSeries/deps/readies/mk/cfg: No such file or directory
    make[1]: *** No rule to make target '/home/kobayash/nestdaq/src/RedisTimeSeries/deps/readies/mk/cfg'.  Stop.
    make: *** [Makefile:31: build] Error 2

Boot をインストール

  • Boost をダウンロードしてきてmake
    $ cd $HOME/nestdaq/src
    $ git clone https://github.com/boostorg/boost.git
    $ cd boost
    $ git checkout -b boost-1.80.0 boost-1.80.0
    $ time git submodule update --init --recursive
    ...
    real	6m49.684s
    user	1m34.577s
    sys	1m10.656s
    $ time ./bootstrap.sh
    ...
    real	0m14.797s
    user	0m11.396s
    sys	0m1.902s
    $ time ./b2 install \
     link=static,shared \
     threading=single,multi \
     cxxstd=17 \
     variant=release,debug \
     --layout=tagged \
     -j20 \
     --prefix=$HOME/nestdaq
    ...
    ...updated 20831 targets...
    
    real	8m15.210s
    user	41m38.956s
    sys	8m18.069s

ZeroMQをインストール

  • ZeroMQ を持ってきてコンパイル
    $ cd $HOME/nestdaq/src
    $ git clone https://github.com/zeromq/libzmq.git
    $ cd libzmq
    $ mkdir build
    $ cmake \
     -DCMAKE_INSTALL_PREFIX=$HOME/nestdaq \
     -DCMAKE_CXX_STANDARD=17 \
     -B ./build \
     -S .
    $ cd build
    $ time make -j20
    ...
    real	0m7.852s
    user	1m18.741s
    sys	0m13.478s
    $ make install
  • ちなみに、saho-a/saho-b のデフォルトの cmake (version 3.11) を使うと、以下のようにエラーになる。
    [kobayash@saho-a libzmq]$ cmake \
    >  -DCMAKE_INSTALL_PREFIX=$HOME/nestdaq \
    >  -DCMAKE_CXX_STANDARD=17 \
    >  -B build \
    >  -S .
    ...
    -- Performing Test ZMQ_HAVE_GETRANDOM - Success
    -- Found AsciiDoc: /usr/bin/asciidoc  
    CMake Error at CMakeLists.txt:844 (message):
      CMake generation is not allowed within the source directory! Remove the
      CMakeCache.txt file and try again from another folder, e.g.: rm
      CMakeCache.txt mkdir cmake-make cd cmake-make cmake ..
    
    
    -- Configuring incomplete, errors occurred!
    See also "/home/kobayash/nestdaq/src/libzmq/CMakeFiles/CMakeOutput.log".
    See also "/home/kobayash/nestdaq/src/libzmq/CMakeFiles/CMakeError.log".
    <code> cmake のバージョンは<code>$ cmake --version
    cmake version 3.11.4

    もし cmake 3.11 を使って cmake する場合は、build ディレクトリ内で cmake コマンドを打つようにする。このエラーの原因は cmake のバージョン 3.11 では -B オプションが効いていない模様。ただ、cmake 3.11 だとバージョンが古すぎて FairMQ の cmake が通らないので、結局 新しいバージョンの cmake を自前でインストールする必要がある。

fmtlib をインストール

  • $ cd $HOME/nestdaq/src
    $ git clone https://github.com/fmtlib/fmt.git
    $ cd fmt
    $ mkdir build
    $ cmake \
     -DCMAKE_INSTALL_PREFIX=$HOME/nestdaq \
     -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \
     -DCMAKE_CXX_STANDARD=17 \
     -B build \
     -S .
    $ cd build
    $ time make -j20
    ...
    real	0m33.625s
    user	2m54.603s
    sys	0m12.291s
    $ make install

FairLogger をインストール

  • $ cd $HOME/nestdaq/src
    $ git clone https://github.com/FairRootGroup/FairLogger.git
    $ cd FairLogger
    $ mkdir build
    $ cmake \
       -DCMAKE_INSTALL_PREFIX=$HOME/nestdaq \
       -DCMAKE_CXX_STANDARD=17 \
       -DUSE_EXTERNAL_FMT=OFF \
       -B build \
       -S .
    $ cd build
    $ time make -j20
    ...
    real	0m16.200s
    user	0m42.838s
    sys	0m3.366s
    $ make install

FairMQ をインストール (v1.4.55)

  • $ cd $HOME/nestdaq/src
    $ git clone https://github.com/FairRootGroup/FairMQ.git
    $ cd FairMQ
    $ git checkout -b v1.4.55 v1.4.55
    $ mkdir build
    $ cmake \
       -DCMAKE_INSTALL_PREFIX=$HOME/nestdaq \
       -DCMAKE_CXX_STANDARD=17 \
       -DCMAKE_PREFIX_PATH="$HOME/nestdaq" \
       -B build \
       -S .
    $ cd build
    $ time make -j10
    ...
    
    $ make install

    ちなみに、cmake 3.11だとバージョンが古すぎて以下のエラーになる。

    $ cmake \
       -DCMAKE_INSTALL_PREFIX=$HOME/nestdaq \
       -DCMAKE_CXX_STANDARD=17 \
       -DCMAKE_PREFIX_PATH="$HOME/nestdaq" \
       -B build \
       -S .
    CMake Error at CMakeLists.txt:11 (cmake_minimum_required):
      CMake 3.15 or higher is required.  You are running version 3.11.4
    
    
    -- Configuring incomplete, errors occurred!

    あと、make -j20 とすると、場合によってはメモリが足りなくなる。

    [ 63%] Building CXX object examples/qc/CMakeFiles/fairmq-ex-qc-dispatcher.dir/qCDispatcher.cxx.o
    virtual memory exhausted: Cannot allocate memory
    virtual memory exhausted: Cannot allocate memory
    virtual memory exhausted: Cannot allocate memory
    
    cc1plus: out of memory allocating 4072 bytes after a total of 15908864 bytes
    virtual memory exhausted: Cannot allocate memory

hiredis のインストール (v1.1.0)

  • $ cd $HOME/nestdaq/src
    $ git clone https://github.com/redis/hiredis.git
    $ cd hiredis
    $ time make PREFIX=$HOME/nestdaq install
    ...
    real	0m2.074s
    user	0m1.335s
    sys	0m0.289s

redis-plus-plus のインストール (1.3.6)

  • $ cd $HOME/nestdaq/src
    $ git clone https://github.com/sewenew/redis-plus-plus.git
    $ cd redis-plus-plus
    $ mkdir build
    $ cmake \
        -DCMAKE_INSTALL_PREFIX=$HOME/nestdaq \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_PREFIX_PATH=$HOME/nestdaq \
        -DREDIS_PLUS_PLUS_CXX_STANDARD=17 \
        -DREDIS_PLUS_PLUS_BUILD_TEST=OFF \
        -B ./build \
        -S .
    $ cd build
    $ time make -j20 install
    ...
    real	0m3.605s
    user	0m33.359s
    sys	0m3.654s

nestdaq のインストール

  • $ cd $HOME/nestdaq/src
    $ git clone https://github.com/spadi-alliance/nestdaq.git
    $ cd nestdaq
    $ mkdir build
    $ cmake \
        -DCMAKE_INSTALL_PREFIX=$HOME/nestdaq \
        -DCMAKE_PREFIX_PATH=$HOME/nestdaq \
        -B ./build \
        -S .
    $ cd build
    $ time make -j20 install
    ...

redisinsight のインストール

  • 手元のパソコンで、redisinsight-linux64 (version 1.12.0) をダウンロード。
    $ wget https://downloads.redisinsight.redislabs.com/1.12.0/redisinsight-linux64
  • saho にコピー
    $ scp redisinsight-linux64 kobayash@saho-a:nestdaq/bin
  • saho ログインしてみて、実行してみる。
    $ ssh kobayash@saho-a
    $ cd $HOME/nestdaq/bin
    $ chmod +x redisinsight-linux64
    $ ./redisinsight-linux64
    <なにも表示されなければOK。Ctrl-Cで殺す。殺したときはいろいろ言われる。>
    $ 

    ちなみに、最新版をダウンロードして実行すると、以下の様なエラーとなる。

    $./redisinsight-linux64
    [1468586] Error loading Python lib '/tmp/_MEIS1uqBj/libpython3.10.so.1.0': dlopen: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by /tmp/_MEIS1uqBj/libpython3.10.so.1.0)

スクリプトなどの設定

  • run ディレクトリ作成
    $ mkdir $HOME/run
  • 初期設定ファイル nestdaq.sh を /home/nestdaq/run に作成
    $ cd $HOME/run
    $ emacs nestdaq.sh

    中身は以下。

    #!/bin/bash
    export NESTDAQ=$HOME/nestdaq
    export PATH=$NESTDAQ/bin:$PATH

    さらに、$HOME/.bashrc に以下の行を追記。

    # For NestDAQ 2023.10.02                                                       
    source $HOME/run/nestdaq.sh
  • redis の立ち上げのためのファイル作成
    $ cd $HOME/run
    $ emacs init.sh

    中身は以下。

    #!/bin/bash
    redis-server $NESTDAQ/etc/redis.conf --loadmodule $NESTDAQ/lib/redistimeseries.so --port 5921
    #RIHOST=0.0.0.0 redisinsight-linux64 &
    #daq-webctl >& $NESTDAQ/log/daq-webctl.log &
    daq-webctl --http-uri http://0.0.0.0:5920 --redis-uri tcp://127.0.0.1:5921 >& /dev/null &

    ちなみに、daq-webctl の –port オプションで DAQ controller のHTTPサーバーのポートを 5920 にしている。さらに、redis-server のポート番号は 5921 にしている。すでにこのポートが他のユーザーに使われていたら、他の番号を指定する。ただし、saho-a/saho-bの場合は 5901 -5999 あたりの番号をしているのが良い。他のポート番号はだいたい外部からのアクセスができないので注意。ここで 5920 と 5921 以外の番号を指定した場合、以下の文章では適宜 5920 と 5921 の部分の番号を読み替える。ポートが他のユーザーに使われているかどうかは以下のコマンドで確認可能。

    $ netstat -at | grep 5920
    tcp        0      0 0.0.0.0:5920            0.0.0.0:*               LISTEN     
    tcp        0      0 saho-a.rcnp.osaka-:5920 kobamac01.rcnp.os:52126 TIME_WAIT  
    $ netstat -at | grep 5921
    tcp        0      0 0.0.0.0:5921            0.0.0.0:*               LISTEN     
    tcp6       0      0 [::]:5921               [::]:*                  LISTEN  
  • init.sh に実行権限を付与
    $ chmod +x ./init.sh
  • NestDAQ起動のためのスクリプトをコピー
    $ cd $HOME/run
    $ cp $HOME/nestdaq/scripts/*.sh ./

動かしてみる

  • run ディレクトリに移動
     cd $HOME/run
  • .bashrcをソースし、init.sh を実行する。
    $ source $HOME/.bashrc
    $ ./init.sh

    もし間違って .init.sh を複数回実行した場合、redis と daq-webctl のプロセスを殺す。プロセスの殺し方は色々あるが、

    $ killall redis-server
    $ killall daq-webctl

    とすれば、全部殺せる。このようなスクリプトを用意しておいても良いかも。または、init.sh を編集し、すでにプロセスが立ち上がっていたら新たに立ち上げないとか、既存のプロセスを殺してから立ち上げるとか、賢い感じに編集しても良い。

  • これで Firefox などのブラウザを立ち上げ、http://saho-a:5920/にアクセス。ただし、手元のパソコンがRCNP-GPに繋がっている必要あり。
  • web ブラウザ上で、 任意の Run Number を入力。初回起動時は最新のランナンバーがないと言われるが、それが正しい。
  • tmux を立ち上げ、ウィンドウを分割。Ctl-b “ で上下方向分割、Ctl-b % で左右方向分割。ウィンドウ間の移動は Ctl-b o。emacs のショートカットに近いものに設定しても良い。
  • tmux 上で 3 分割くらいにして、以下のスクリプトを実行。
    ---------------------------------------
    $ ./topology-1-1.sh
    ...
    ---------------------------------------
    $ ./start_device.sh Sampler
    ...
    ---------------------------------------
    $ ./start_device.sh Sink
    ...
    ---------------------------------------
  • この状態で、DAQ Controller から、Initialize, Reset Task, Run とボタンを押すと、DAQがスタートする。
  • tmux の端末では、メッセージが流れているはず。データが流れていれば、In や Out のデータ転送レートが 0 以外になる。
  • DAQをストップする場合は、 Stop ボタンを押す。

nestdaq-user-impl のインストール

  • nestdaq-user-impl を make するには、新しい ROOT が必要。ROOTのバージョンが古い場合は、新しいROOTをインストールする。インストール方法は、このページの準備の項目を参照。
  • 新しい ROOT をインストールしたら、nestdaq-user-impl をコンパイル。
    $ cd $HOME/nestdaq/src
    $ git clone https://github.com/spadi-alliance/nestdaq-user-impl.git
    $ cd nestdaq-user-impl
    $ mkdir build
    $ cmake \
        -DCMAKE_INSTALL_PREFIX=$HOME/nestdaq \
        -DCMAKE_PREFIX_PATH=$HOME/nestdaq \
        -B ./build \
        -S .
    $ cd build
    $ time make -j10 install
    ...

    ただし、これをすると /home/nestdaq/nestdaq/bin 内の nestdaq のインストール時に作られた実行形式ファイル Sampler や Sink が上書きされる。nestdaq の 実行形式ファイルと nestdaq-user-impl の実行形式ファイルを別々に扱うには、インストール場所を変えるなどの対策が必要 (-DCMAKE_INSTALL_PREFIX を変えるとか)。

nestdaq-user-impl (TFBFilePlayer - fltcoin - tfdump) の実行

  • 五十嵐さんの以下のドキュメントを参考に、Data Replayer を動かしてみる。
  • 手元のパソコンに Replayer 用のRawデータファイルと、topo_player.sh をダウンロードする。
    $ wget http://www-online.kek.jp/~igarashi/nestdaq/run000408_00_stf.dat.gz
    $ wget http://www-online.kek.jp/~igarashi/nestdaq/run000410.dat.gz
    $ wget http://www-online.kek.jp/~igarashi/nestdaq/topo_player.sh
  • ダウンロードしたら、scp コマンドで saho-a にファイルをコピー。
    $ scp run000408_00_stf.dat.gz saho-a:run/
    $ scp run000410.dat.gz saho-a:run/
    $ scp topo_player.sh saho-a:run/
  • コピーしたら、saho-a にログインして、コピーしたファイルを解凍。
    $ ssh kobayash@saho-a
    Passowrd:
    $ cd $HOME/run
    $ gunzip run000408_00_stf.dat.gz
    $ gunzip run000410.dat.gz
    $ ls
    ... run000408_00_stf.dat  run000410.dat ...
  • saho-a 上で redis-server と daq-webctl が立ち上がっているか ps コマンドで確認。立ち上がっていなかったら、init.sh を実行。
    $ ps aux | grep redis
    $ ps aux | grep daq-webctl
    $ ./init.sh
  • 五十嵐さんの topo_player.sh の最初の行の方を以下の様に編集。redis-server のポート番号を 5921 にしている。
    #!/bin/bash                                                                     
    
    #host=127.0.0.1                                                                 
    #port=6379                                                                      
    #db=0                                                                           
    server=redis://127.0.0.1:5921/0
    ... <以下省略> ...
  • topo_player.sh に実行権限を与えて実行。
    $ chmod +x topo_player.sh
    $ ./topo_player.sh
  • /hoem/nestdaq/run ディレクトリで tmux を立ち上げ、4分割 (Ctrl-b % と Ctrl-b ” を使う。パネル移動は Ctrl-b o。)し、FairMQ デバイスを立ち上げる。
    <パネル 1>
    $ ./start_device.sh TFBFilePlayer --in-file run000410.dat
    <パネル 2>
    $ ./start_device.sh fltcoin
    <パネル 3>
    $ ./start_device.sh tfdump
  • 手元のパソコンで web ブラウザを立ち上げ、 http://saho-a:5920/ にアクセスしする。
  • RUN number の New value: に任意の数字を入力し、 [ Send ] ボタンを押す。
  • [Init Device and Connection] > [ Init Task ] > [ Run ] ボタンを順次押すと、実行される。
  • DAQ のストップは [ Stop ] ボタンを押す。DAQ を終了する場合は、さらに [ Reset Task ], [ Reset Device ] を押す。
  • FairMQデバイスも終了する場合は [ End ] ボタンを押す。

nestdaq-user-impl (STFBplayer - FileSink/Scaler) の実行

  • まず、以下の内容の topology_stbplayer_scr.sh を作成。redis-server のポート番号は 5921 にしている。
    #!/bin/bash
    
    #host=127.0.0.1
    #port=6379
    #db=0
    server=redis://127.0.0.1:5921/0
    
    #function config_endpoint () {
    function endpoint () {
      # Usage: 
      #   config_endpoint "service" "channel" "parameters"
      
      echo redis-cli -u $server hset daq_service:topology:endpoint:$1:$2 ${@:3}  
      $NESTDAQ/bin/redis-cli -u $server hset daq_service:topology:endpoint:$1:$2 ${@:3}  
    }
    
    #function config_link () {
    function link () {
      # config_link "service1" "channel" "service2" "channel" "parameters"
      
      echo redis-cli -u $server set daq_service:topology:link:$1:$2,$3:$4 non
      $NESTDAQ/bin/redis-cli -u $server set daq_service:topology:link:$1:$2,$3:$4 none
    }
    
    
    echo "---------------------------------------------------------------------"
    echo " config endpoint (socket)"
    echo "---------------------------------------------------------------------"
    #---------------------------------------------------------------------------
    #         service           channel       options
    #---------------------------------------------------------------------------
    
    endpoint  STFBFilePlayer    out           type push  method connect 
    endpoint  STFBFilePlayer    dqm           type push  method connect 
    
    endpoint  Scaler            in            type pull  method bind
    endpoint  Scaler            out           type push  method connect
    
    endpoint  FileSink          in            type pull  method bind
    endpoint  ScrSink           in            type pull  method bind
    
    echo "---------------------------------------------------------------------"
    echo " config link"
    echo "---------------------------------------------------------------------"
    #---------------------------------------------------------------------------
    #         service1          channel1       service2          channel2      
    #---------------------------------------------------------------------------
    
    link      STFBFilePlayer    out            FileSink in
    link      STFBFilePlayer    dqm            Scaler   in
    link      Scaler            out            ScrSink  in
  • mq_param_stbplayer_scr.sh を作成。redis-server のポート番号は 5921 にする。
    #!/bin/bash
    
    server=redis://127.0.0.1:5921/2
    
    function param () {
      # "instance":"field" "value"
      #echo redis-cli -u $server set parameters:$1:$2 ${@:3}
      #redis-cli -u $server set parameters:$1:$2 ${@:3}
      echo redis-cli -u $server hset parameters:$1 ${@:2}
      redis-cli -u $server hset parameters:$1 ${@:2}
    }
    
    #==============================================================================
    #      isntance-id       field  value    field value   field          value
    param FileSink-0 multipart true openmode create prefix data ext .dat
    param ScrSink-0 multipart true openmode create prefix scrdata ext .dat
    param Scaler-0 num-source 1 prefix scr ext .dat
  • start_device.sh を編集し、以下のように、DQM_URI を追加。さらに、redis-server のポート番号を 5921 に変更。
    #!/bin/bash
    
    #MY_TERM=xterm
    
    DAQSERVICE_URI=' --registry-uri tcp://127.0.0.1:5921/0'
    METRICS_URI=' --metrics-uri tcp://127.0.0.1:5921/1'
    CONFIG_URI=' --parameter-config-uri tcp://127.0.0.1:5921/2'
    DQM_URI=' --dqm-uri tcp://127.0.0.1:5921/3'
    
    #---------------------------------------------------------
    if [[ $1 =~ fairmq- ]]; then
      BINDIR=""
    else 
      BINDIR=/home/nestdaq/nestdaq/bin
    fi
    
    PLUGIN_LIBDIR=/home/nestdaq/nestdaq/lib
    
    PLUGIN_SEARCH_PATH=" -S '<$PLUGIN_LIBDIR'"
    DAQSERVICE_PLUGIN=" -P daq_service"
    METRICS_PLUGIN=" -P metrics"
    CONFIG_PLUGIN=" -P parameter_config"
    
    echo "BINDIR             = $BINDIR"
    echo "PLUGIN_LIBDIR      = $PLUGIN_LIBDIR"
    echo "PLUGIN_SEARCH_PATH = $PLUGIN_SEARCH_PATH"
    echo "DAQSERVICE_PLUGIN  = $DAQSERVICE_PLUGIN"
    echo "METRICS_PLUGIN     = $METRICS_PLUGIN"
    echo "CONFIG_PLUGIN      = $CONFIG_PLUGIN"
    echo "DAQSERVICE_URI     = $DAQSERVICE_URI"
    echo "METRICS_URI        = $METRICS_URI"
    echo "CONFIG_URI         = $CONFIG_URI"
    echo "DQM_URI            = $DQM_URI"
    
    #==============================================================================
    function run_device () {
      local var;
      var+=$PLUGIN_SEARCH_PATH
      var+=$DAQSERVICE_PLUGIN
      var+=$METRICS_PLUGIN
      var+=$CONFIG_PLUGIN
      var+=$DAQSERVICE_URI
      var+=$METRICS_URI
      var+=$CONFIG_URI
      var+=$DQM_URI
      var+=" --severity debug4"
    
      if [ -n "$MY_TERM" ]; then
        #echo \
        $MY_TERM -title $1 -e "$BINDIR/$@ $var"
      else
        #echo \
        eval "$BINDIR/$@ $var"
      fi
    }
    
    run_device $@
  • さらに、start_device.sh をコピーし、start_device_scr.sh をつくり、function run_device () の中のvar に var+=“–service-name ScrSink” という行を追加。
    #==============================================================================
    function run_device () {
      local var;
      var+=$PLUGIN_SEARCH_PATH
      var+=$DAQSERVICE_PLUGIN
      var+=$METRICS_PLUGIN
      var+=$CONFIG_PLUGIN
      var+=$DAQSERVICE_URI
      var+=$METRICS_URI
      var+=$CONFIG_URI
      var+=$DQM_URI
      var+=" --severity debug4"
      var+=" --service-name ScrSink"
      ...
  • topology_stbplayer_scr.sh, mq_param_stbplayer_scr.sh を実行。
    $ chmod +x topology_stbplayer_scr.sh
    $ chmod +x mq_param_stbplayer_scr.sh
    $ chmod +x start_device_scr.sh
    $ ./topology_stbplayer_scr.sh
    $ ./mq_param_stbplayer_scr.sh
  • ファイルを保存する場所を作成。
    $ mkdir scr scrdata data
  • /hoem/nestdaq/run ディレクトリで tmux を立ち上げ、4分割 (Ctrl-b % と Ctrl-b “ を使う。パネル移動は Ctrl-b o。)し、FairMQ デバイスを立ち上げる。
    <パネル 1>
    $ ./start_device.sh STFBFilePlayer --wait 1000 --in-file run000408_00_stf.dat
    <パネル 2>
    $ ./start_device.sh Scaler
    <パネル 3>
    $ ./start_device_scr.sh FileSink
    <パネル 4>
    $ ./start_device.sh FileSink

    ちなみに、STFBFilePlayer –wait 1000 は 1000 ms wait している。wait がないと一瞬でファイルを読んでしまう。ただし、mq_param.sh で STFBFilePlayer-0 に wait を設定していると、それで上書きされる。実行時のオプションより redis のパラメータの方が優先されるので注意。redis をクリアする必要あり。

  • 手元のパソコンで web ブラウザを立ち上げ、http://saho-a:5920 にアクセスしする。
  • RUN number の New value: に任意の数字を入力し、 [ Send ] ボタンを押す。
  • [Init Device and Connection] > [ Init Task ] > [ Run ] ボタンを順次押すと、実行される。
  • DAQ のストップは [ Stop ] ボタンを押す。DAQ を終了する場合は、さらに [ Reset Task ], [ Reset Device ] を押す。
  • FairMQデバイスも終了する場合は [ End ] ボタンを押す。

SlowDash のインストール

  • ダウンロードした SlowDash-230608.tgz を /home/nestdaq/nestdaq/src/ にコピーし、解凍。
    $ cp $HOME/Downloads/SlowDash-230608.tgz $HOME/nestdaq/src/
    $ cd $HOME/nestdaq/src
    $ tar zxvf SlowDash-230608.tgz
  • SlowDash-230608/system ディレクトリに行き、make する。
    $ cd $HOME/nestdaq/src/SlowDash-230608/system/
    $ make
  • 試しに実行してみる。
    $ source /home/nestdaq/nestdaq/src/SlowDash-230608/bin/slowdash-bashrc
    $ slowdash --port=5922
    <Ctrl-c で終了。>

  • 毎回 source コマンドを実行するのは面倒なので、PATH を .bashrc で設定する。以下の行を /home/nestdaq/.bashrc に追記。
    # For SlowDash 2023.10.02
    export PATH=${PATH}:${HOME}/nestdaq/src/SlowDash-230608/bin

SlowDash で Scalerから Redis に投げたヒストグラムなどを表示する

  • SlowDash の Project 用のディレクトリを作成
    $ mkdir $HOME/nestdaq/src/SlowDash-230608/Projects/Test_Redis_Histo
    $ cd $HOME/nestdaq/src/SlowDash-230608/Projects/Test_Redis_Histo
  • SlowDash の SlowdashProject.yaml ファイルを作成
    slowdash_project:
      name: RedisTest
      title: Redis Test, Simple version
    
      data_source:
        type: Redis
        parameters:
          url: redis://localhost:5921/
          time_series: {db: 1}
          object: { db: 3 }
  • ここに移動し、試しに起動。ただ、起動前に python3 のredis パッケージが必要だった。
    $ pip3 install redis
    $ slowdash --port=5922
  • web ブラウザで http://saho-a:5922 にアクセス。

メモ

  • Raspberry Pi で FairMQ を make するとき、atomic ライブラリのリンクでエラーとなっていたが、Ubuntuではエラーにならない。Raspberry Pi では cmake コマンドのオプションに -DCMAKE_CXX_LINK_FLAGS=”-Wl,–no-as-needed -latomic“としていたが、Ubuntuでは必要なかった。atomic はデフォルトでリンクされるようだ?
  • nestdaq-user-impl make 時のエラー。
    [ 34%] Linking CXX executable FileSink
    /usr/bin/ld: CMakeFiles/FileSink.dir/FileSink.cxx.o: warning: relocation against `_ZN5boost9iostreams5bzip210stream_endE' in read-only section `.text._ZN5boost9iostreams16symmetric_filterINS0_6detail21bzip2_compressor_implISaIcEEES4_E5closeINS0_20non_blocking_adapterINS2_16linked_streambufIcSt11char_traitsIcEEEEEEEvRT_St13_Ios_Openmode[_ZN5boost9iostreams16symmetric_filterINS0_6detail21bzip2_compressor_implISaIcEEES4_E5closeINS0_20non_blocking_adapterINS2_16linked_streambufIcSt11char_traitsIcEEEEEEEvRT_St13_Ios_Openmode]'
    /usr/bin/ld: CMakeFiles/FileSink.dir/FileSink.cxx.o: in function `boost::detail::sp_counted_impl_p<boost::iostreams::symmetric_filter<boost::iostreams::detail::bzip2_compressor_impl<std::allocator<char> >, std::allocator<char> >::impl>::dispose()':
    FileSink.cxx:
    ...
    /usr/bin/ld: CMakeFiles/FileSink.dir/FileSink.cxx.o: in function `void boost::iostreams::detail::close_all<boost::iostreams::basic_bzip2_compressor<std::allocator<char> >, boost::iostreams::detail::linked_streambuf<char, std::char_traits<char> > >(boost::iostreams::basic_bzip2_compressor<std::allocator<char> >&, boost::iostreams::detail::linked_streambuf<char, std::char_traits<char> >&)':
    FileSink.cxx:(.text._ZN5boost9iostreams6detail9close_allINS0_22basic_bzip2_compressorISaIcEEENS1_16linked_streambufIcSt11char_traitsIcEEEEEvRT_RT0_[_ZN5boost9iostreams6detail9close_allINS0_22basic_bzip2_compressorISaIcEEENS1_16linked_streambufIcSt11char_traitsIcEEEEEvRT_RT0_]+0x49): undefined reference to `boost::iostreams::detail::bzip2_base::end(bool)'
    /usr/bin/ld: CMakeFiles/FileSink.dir/FileSink.cxx.o: in function `nestdaq::Compressor::CreateFilter(nestdaq::Compressor::Format, int)':
    FileSink.cxx:(.text._ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi[_ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi]+0x692): undefined reference to `boost::iostreams::detail::bzip2_base::bzip2_base(boost::iostreams::bzip2_params const&)'
    /usr/bin/ld: FileSink.cxx:(.text._ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi[_ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi]+0xaa2): undefined reference to `boost::iostreams::detail::bzip2_base::end(bool, std::nothrow_t)'
    /usr/bin/ld: FileSink.cxx:(.text._ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi[_ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi]+0xaaa): undefined reference to `boost::iostreams::detail::bzip2_base::~bzip2_base()'
    /usr/bin/ld: FileSink.cxx:(.text._ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi[_ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi]+0xaec): undefined reference to `boost::iostreams::detail::bzip2_base::end(bool, std::nothrow_t)'
    /usr/bin/ld: FileSink.cxx:(.text._ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi[_ZN7nestdaq10Compressor12CreateFilterENS0_6FormatEi]+0xaf4): undefined reference to `boost::iostreams::detail::bzip2_base::~bzip2_base()'
    /usr/bin/ld: warning: creating DT_TEXTREL in a PIE
    collect2: error: ld returned 1 exit status
    make[2]: *** [CMakeFiles/FileSink.dir/build.make:131: FileSink] Error 1
    make[1]: *** [CMakeFiles/Makefile2:205: CMakeFiles/FileSink.dir/all] Error 2
    make: *** [Makefile:136: all] Error 2

    boot のコンパイル時に bzip2 が no になっていたのが原因のようだ。

        - zlib                     : yes (cached) [5]
        - bzip2                    : no  (cached) [5]
        - lzma                     : no  (cached) [5]
        - zstd                     : yes (cached) [5]
        - lzma                     : no  (cached) [5]
        - has_lzma_cputhreads builds : no  (cached) [9]

    sudo apt install libbz2-dev としてから、/home/nestdaq/nestdaq/src/boost ディレクトリを全部削除してから、コンパイルし直した。そうしないと、bzip2 : yes (cached) [5] とならない(他に良い方法あるんだろうか?)。boost をコンパイルし直したあと、ZeroMQ, fmtlib, FairLogger, FairMQ, hiredis, redis-plus-plus, nestdaq, redisinsight を make し直す必要はないようだ。

softwares/nestdaq/installation_saho_2023.1697202566.txt.gz · 最終更新: 2023/10/13 22:09 by kobayash
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0