ここでは NestDAQ 本体および NestDAQ User Implementaion のインストール方法を解説する。NestDAQ 本体をインストールするには、以下のGitHubのインストールのページを参考にすれば良いが、このページは比較的玄人向け、もしくは開発者向けの記述になっている。
そのため、このマニュアルでは簡略化されたインストール方法を記述する。ライブラリのバージョンを切り替えて NestDAQ の動作検証などを行いたい場合は、公式のインストールのページを参考にするのがよいだろう。また、ネット上には NestDAQ のインストール方法に関するドキュメントがいくつかある。J-PARC MARQ spectrometer T103 実験 (白鳥 et al.) のサーバーマシンのインストール方法のメモとしては、e50server01 のインストールログがある。
NestDAQ User Implementation のインストール方法は、以下のドキュメントに従えば良い。
インターネットを漁ると、以下のような NestDAQ 利用者のページも参考にできるだろう。
インストールを行う環境は2024年9月30日時点で最新の AlmaLinux 9.4 を想定する。AlmaLinux 9.X であれば、ほぼ同じインストール手順になるはずである。AlmaLinux 9.4 の環境としては、サーバー環境として Graphical User Interface (GUI) がなくてもインストールできるがずであるが、GUIがあると便利であるため、GUI 環境のインストールを仮定する。さらに、言語は英語 (US) を仮定する。また、NestDAQ に必要なパッケージは以下である。
さらに、nestdaq-user-impl では、以下のパッケージが必要になるため、これもインストールしておく。これらがないと、コンパイル時にエラーとなる。
パッケージをインストールするには、sudo dnf install zstd libzstd-devel bzip2-devel などとする。現在インストールされているパッケージを確認する場合は、dnf list といったコマンドがある。このあたりのコマンドは、Google で調べれば出てくるはず。
SELinux は大抵問題を引き起こすので、切っておきたい。以下のコマンドで切れているか確認可能。
$ getenforce Disabled
SELinux の切り方は Google で "AlmaLinux 9 SELinux 切り方" などと調べればたぶん出てくるだろう。以下、参考例のページ。
具体的には、以下のような編集を行い、再起動。
$ vi /etc/selinux/config SELINUX=enforcing | | | V V V #SELINUX=enforcing SELINUX=disabled
setenforce コマンドを用いて一時的に SELinux を enforcing から permissive に変更することはできるが、恒久的に disabled にするには、このファイルを編集して、再起動するしかない模様。また、この方法は上記参考ページによると "SELinux は起動するがポリシーがロードされていない状態"であるそうだが、我々の使用用途の場合これで問題ないだろう。気になる場合は kernel パラメータを与えて、SELinux を完全に無効化することもできるらしい。
さらに、一般に DAQ の開発段階では firewall は切っておくとデバッグが捗り、労力削減になる。そのため、LAN 環境などでは、最初は firewall を切って動作検証することを推奨とする。例えば、
を参考に
# systemctl stop firewalld
で一時的にファイアウォールを切る。さらに、
# systemctl disable firewalld
で次回起動時以降もファイアウォールを切る。
NestDAQ のインストールでは管理者権限 (いわゆる root 権限) は必要なく、どのディレクトリにインストールしても構わない。ただ、本マニュアルでは Linux 初心者向けに推奨のディレクトリ構造を紹介する。いくつかのスクリプトでは、ディレクトリのパスをベタ書きしているところがあるため、他のディレクトリにインストールを行うと、修正項目が増える場合がある。2024年9月30日以前のインストール先は実験毎に変わっている場合があったが、本マニュアルでは spadi アカウントを作成し、ホームディレクトリ以下にインストールを行うことをデフォルトとする。
/home/spadi/
ちなみに、2024年9月30日以前は nestdaq アカウントを作成し、/home/nestdaq ホームディレクトリ以下にインストールする場合が多かったが、SPADI Alliance のさまざまな活動により nestdaq に限らず、他のソフトウェアを利用することが増えてきたため /home/nestdaq ディレクトリではなく、spadi アカウントをデフォルトとする。また、公式の NestDAQ のスクリプトも順次 /home/spadi に対応させていくと良いと考えられる。
さらに、SPADI-A DAQ パッケージ関連の Git リポジトリやソースコードは
/home/spadi/repos
というディレクトリにクローンもしくはダウンロードし、ここでビルドすることを本マニュアルのデフォルトとする。また、インストール先は
/home/spadi/local/ |-- bin |-- share |-- include |-- lib `-- etc
をデフォルトとする。Linux に慣れている人であれば、このディレクトリでなくても運用できるであろう。
NestDAQ 本体のビルドに必要な以下のライブラリをまずインストールする。
ちなみに、Boost のビルドの前に、zstd, libzstd-devel, bzip2-devel パッケージをパッケージマネージャでインストールしておく必要がある。これらパッケージをインストールしていなくても Boost 自体のコンパイルはできてしまうが、nestdaq-user-impl のコンパイル時にエラーとなる。さらに、以下の redisinsight をインストールしてもよい。
このプログラムは Redis データベースの中身を便利に見るためのソフトウェアである。ただ、Redis デフォルトの CUI コマンド (redis-cli) でも Redis データベースの中身を見ることができるので、必ずしも redisinsight をインストールする必要はない。上記パッケージをインストールしたら、NestDAQ 本体のインストールを行う。以下、それぞれのライブラリのインストール方法を記述する。
git でソースをダウンロードしてコンパイル
$ mkdir $HOME/repos $ cd $HOME/repos $ git clone https://github.com/redis/redis.git $ cd redis $ git checkout -b 6.0.16 6.0.16 $ make -j10 PREFIX=$HOME/local $ make PREFIX=$HOME/local install
make の所要時間は 20 - 30秒程度。設定ファイルを $HOME/local/etc にコピー
$ mkdir $HOME/local/etc $ cp $HOME/repos/redis/redis.conf $HOME/local/etc/
daemon mode をオンにする。
$ emacs -nw $HOME/local/etc/redis.conf #daemonize no daemonize yes
さらに、コンピュータ外からのアクセスを有効にするために、以下の行をコメントアウト。
bind 127.0.0.1 | | | V V V #bind 127.0.0.1
bind 0.0.0.0 にすべしと解説しているweb サイトもあるが、redis.conf 内の設定方法の説明を読むと、単にコメントアウトだけで良い模様。また、プロテクトモードを無効にする。これをしないと、redis-cli などで外部コンピュータからアクセスはできるがデータベースの中身を見られない(たしか)。
protected-mode yes ||| VVV protected-mode no
$ cd $HOME/repos $ git clone --recursive https://github.com/RedisTimeSeries/RedisTimeSeries.git $ cd RedisTimeSeries $ git checkout -b v1.4.9 v1.4.9 $ make ... $ mkdir $HOME/local/lib $ cp $HOME/repos/RedisTimeSeries/bin/linux-x64-release/redistimeseries.so $HOME/local/lib/
make の所要時間は数秒程度。make 時に make -j2 とすると、以下のようなエラーとなるので、-jオプションは使わないようにすべし。
$ make -j2 make[1]: warning: -j0 forced in submake: resetting jobserver mode. Submodule path 'deps/RedisModulesSDK': checked out 'c0740b8209abae38775adc6f3fefe05a520be55b' Submodule path 'deps/readies': checked out '32e37e68f6ffa66f5a6e41cb37794147e84c38cb' ../deps/readies/mk/main:67: /home/spadi/repos/RedisTimeSeries/deps/readies/mk/cfg: No such file or directory make[1]: *** No rule to make target '/home/spadi/repos/RedisTimeSeries/deps/readies/mk/cfg'. Stop. make: *** [Makefile:31: build] Error 2
Boost をダウンロードしてきて make する。
$ cd $HOME/repos $ git clone https://github.com/boostorg/boost.git $ cd boost $ git checkout -b boost-1.80.0 boost-1.80.0 $ git submodule update --init --recursive $ ./bootstrap.sh $ ./b2 install \ link=static,shared \ threading=single,multi \ cxxstd=17 \ variant=release,debug \ --layout=tagged \ -j10 \ --prefix=$HOME/local ... ...updated 20451 targets...
早いコンピュータであれば、./b2 install の所要時間は 10 分程度。
ZeroMQ を持ってきてコンパイル
$ cd $HOME/repos $ git clone https://github.com/zeromq/libzmq.git $ cd libzmq $ mkdir build $ cmake \ -DCMAKE_INSTALL_PREFIX=$HOME/local \ -DCMAKE_CXX_STANDARD=17 \ -B ./build \ -S . $ cd build $ make -j10 $ make install
make -j10 の所要時間は20秒程度。
$ cd $HOME/repos $ git clone https://github.com/FairRootGroup/FairLogger.git $ cd FairLogger $ mkdir build $ cmake \ -DCMAKE_INSTALL_PREFIX=$HOME/local \ -DCMAKE_CXX_STANDARD=17 \ -DUSE_EXTERNAL_FMT=OFF \ -B build \ -S . $ cd build $ make -j10 $ make install
make -j10 の所要時間は20秒程度。
$ cd $HOME/repos $ 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/local \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_PREFIX_PATH="$HOME/local" \ -B build \ -S . $ cd build $ make -j10 $ make install
make -j10 の所要時間は2分程度。
$ cd $HOME/repos $ git clone https://github.com/redis/hiredis.git $ cd hiredis $ make PREFIX=$HOME/local install
make の所要時間は数秒程度。
$ cd $HOME/repos $ git clone https://github.com/sewenew/redis-plus-plus.git $ cd redis-plus-plus $ mkdir build $ cmake \ -DCMAKE_INSTALL_PREFIX=$HOME/local \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=$HOME/local \ -DREDIS_PLUS_PLUS_CXX_STANDARD=17 \ -DREDIS_PLUS_PLUS_BUILD_TEST=OFF \ -B ./build \ -S . $ cd build $ make -j10 install
make の所要時間は数秒程度。
$ cd $HOME/repos $ git clone https://github.com/spadi-alliance/nestdaq.git $ cd nestdaq $ mkdir build $ cmake \ -DCMAKE_INSTALL_PREFIX=$HOME/local \ -DCMAKE_PREFIX_PATH=$HOME/local \ -B ./build \ -S . $ cd build $ make -j10 install
make の所用時間は 20-30 秒程度。
redisinsight をもし使いたい場合はインストールする。このプログラムは Redis データベースの中身を便利に見るためのソフトウェアである。ただ、Redis デフォルトの CUI コマンド (redis-cli) でも Redis データベースの中身を見ることができるので、必ずしも redisinsight をインストールする必要はない。以前は wget コマンドでコンパイル済のバイナリを配布していたが、最近は web でアカウント登録してからバイナリをダウンロードする方式に変わったようだ?バイナリをダウンロードしたら、$HOME/local/bin ディレクトリにコピーして、chmod コマンドで実行権限を付与する。
$ mv <ダウンロードしたディレクトリ>/redisinsight-linux64 $HOME/local/bin $ cd $HOME/local/bin $ chmod +x redisinsight-linux64 $ ./redisinsight-linux64 <なにも表示されなければOK。Ctrl-Cで殺す。殺したときはいろいろメッセージが出る。> $
NestDAQ 本体をインストールしたら、 nestdaq-user-impl (ユーザーが実験ごとに編集するユーザーソース部分) をインストールする。基本的に公式のドキュメントに従えば良い。
nestdaq-user-impl を make するには、比較的新しめの ROOT が必要。ROOTのバージョンが古い場合は、新しいROOTをインストールする。
ROOT を CERN のページからインストールするか、もしくは dnf コマンドでインストールすればよい。dnf でインストールする場合、以下のようなコマンドを打てば良い。
sudo dnf install root root-tree-webviewer
dnf install root だけだと、THttpServer.h といったヘッダがインストールされず、cmake が通らない模様。
新しい ROOT をインストールしたら、nestdaq-user-impl をコンパイル。
cd $HOME/repos git clone https://github.com/spadi-alliance/uhbook git clone https://github.com/spadi-alliance/nestdaq-user-impl cd $HOME/repos/nestdaq-user-impl cmake -DCMAKE_INSTALL_PREFIX=$HOME/local \ -DCMAKE_PREFIX_PATH="$HOME/local;$HOME/repos/uhbook"\ -B ./build -S . cd build make make install
ただし、これをすると /home/spadi/local/bin 内の nestdaq のインストール時に作られた実行形式ファイル Sampler や Sink が上書きされる。nestdaq の 実行形式ファイルと nestdaq-user-impl の実行形式ファイルを別々に扱うには、インストール場所を変えるなどの対策が必要 (-DCMAKE_INSTALL_PREFIX を変えるとか)。
上記でソフトウェアのインストールは終了である。さらに、利便性のため $HOME/local/bin にパスを通しておくのが良いだろう。具体的には、$HOME/.bashrc に以下の行を書いておく。
# For NestDAQ Oct. 2, 2024 export PATH=$HOME/local/bin:$PATH
ちなみに、環境によっては、$HOME/.bash_profile に以下のような行を書いておかないといけないかもしれない。
# Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi
この後、NestDAQ 本体の動作確認、nestdaq-user-impl の動作確認などを行っても良いし、実験の本番セットアップのデータ読み出しを行っても良い。NestDAQ のスクリプトの設定、NestDAQ の動かし方は次の項目参照のこと。
NestDAQ はいくつかのライブラリ必要であるが、そのバージョンを切り替えて試したい時がある。そのような場合、ライブラリのバージョンに応じてインストール先を変えて用意しておき、ライブラリのリンクを変えることで、異なるライブラリを用いた動作確認を行う。ただ、Linuxにおけるリンク方法の知識が必要であるため、本マニュアルでは、慣れない人向けにより簡単なインストール方法を説明をしている。その代わり、異なるライブラリを試したい場合は、いちいちバージョンの異なるライブラリをインストールする必要があるだろう。