ここでは 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) を仮定する。また、AlmaLinux9.4を minimal でインストール状態から、NestDAQ と user implementation に必要なパッケージを一括でインストールするには、以下のようにインストールすればよい。
$ su Password: <root のパスワード> # dnf install git-core python3-pip gcc-c++ cmake zlib-devel zstd libzstd-devel bzip2-devel epel-release # dnf install root-tree-webviewer
以下、各パッケージを説明する。まず、NestDAQのインストールに必要なパッケージは、以下のものである。
さらに、nestdaq-user-impl では、以下のパッケージが必要になるため、これもインストールしておく。これらがないと、コンパイル時にエラーとなる。
これらのパッケージをインストールするには、sudo コマンドを使うか、以下のように su コマンドで root ユーザーになり、dnf コマンドでパッケージをインストールする。
$ su Password: <root のパスワード入力> # dnf install zlib-devel zstd libzstd-devel bzip2-devel
現在インストールされているパッケージを確認する場合は、dnf list といったコマンドがある。このあたりのコマンドは、Google で調べれば出てくるはず。
さらに、nestdaq-user-impl をインストールするには、CERN ROOT が必要。ROOTのバージョンはそれなりに新しいものが必要で ROOT v6.1X などはコンパイルが通らなかったはず。ROOT は CERN のページからソースをダウンロードしてインストールするか、dnf コマンドで以下のパッケージをインストールすればよい。
dnf でインストールする場合、まず Extra Packages for Enterprise Linux (EPEL) リポジトリを有効にする必要がある。EPELリポジトリが有効になったら、パッケージのインストールを行う。具体的には以下のようなコマンドを打てば良い。
$ su root のパスワード入力 # dnf install epel-release # dnf install root root-tree-webviewer
root パッケージだけだと、THttpServer.h といったヘッダがインストールされず、nestdaq-user-impl の cmake が通らない。
root & root-tree-webviewer パッケージをインストールすることで、cmake が通るようになる。cmake 時に Warning (?) メッセージが大量に出るが気にしない。
SELinux は大抵問題を引き起こすので、切っておきたい。以下のコマンドで切れているか確認可能。
$ getenforce Disabled
SELinux の切り方は Google で "AlmaLinux 9 SELinux 切り方" などと調べればたぶん出てくるだろう。以下、参考例のページ。
具体的には、以下のような編集を行い、再起動。
$ su Password: <root のパスワード入力> # 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 |-- etc |-- include |-- lib |-- lib64 |-- scripts `-- share
をデフォルトとする。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 をオンにする。$HOME/local/etc/redis.confをエディタで開いて、以下のように編集。
daemonize no | | | V V V #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 \ --prefix=$HOME/local \ -j10
というようにコマンドを打つ。 という感じになる。git submodule update --init --recursive が数分程度(?)時間がかかる。早いコンピュータであれば、./b2 install の所要時間は 10 分程度。./b2 install の最後は
...updated 20399 targets...
という感じになる。zlib-devel, zstd, libzstd-devel, bzip2-devel パッケージをインストールし忘れて boost のコンパイルとインストールを行った場合、これらのパッケージをインストールして再度コンパイルしようとしても、うまく行かない模様。なんらかのキャッシュが残っているようだ?少なくとも boost ディレクトリを削除して、git clone からやり直すとうまく行く。
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 (ユーザーが実験ごとに編集するユーザーソース部分) をインストールする。基本的に公式のドキュメントに従えば良い。
準備の項目を参考に CERN 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 -j10 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/.bashrc 内のどこに書いてもいいが、普通は下の方に書く。ちなみに、環境によっては、$HOME/.bash_profile に以下のような行を書いておかないといけないかもしれない。
# Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi
AlmaLinux 9.4 で useradd コマンドでユーザーディレクトリ (例えば /home/spadi) を作った際は /home/spadi/.bash_profile がデフォルトでできて、上記内容も書き込まれている。
.bashrc の追記ができたら、準備完了。この後、NestDAQ 本体の動作確認、nestdaq-user-impl の動作確認などを行っても良いし、実験の本番セットアップのデータ読み出しを行っても良い。NestDAQ のスクリプトの設定、NestDAQ の動かし方は次の項目参照のこと。
NestDAQ はいくつかのライブラリ必要であるが、そのバージョンを切り替えて試したい時がある。そのような場合、ライブラリのバージョンに応じてインストール先を変えて用意しておき、ライブラリのリンクを変えることで、異なるライブラリを用いた動作確認を行う。ただ、Linuxにおけるリンク方法の知識が必要であるため、本マニュアルでは、慣れない人向けにより簡単なインストール方法を説明をしている。もし、異なるライブラリを試したい場合は、いちいちバージョンの異なるライブラリをインストールするか、インストール先のディレクトリを分けるなどの工夫が必要である。NestDAQ の公式のインストール方法では、異なるディレクトリにインストールしているため、バージョンの切り替えが容易になっている。
2024/10/18 小林 信之 (大阪大学RCNP)