===== Installation 2023 =====
==== 環境 ====
* 本体: Dell PowerEdge R630 (筐体、マザーボードをヤフオクで購入 10,980円 2023/7/1)
* CPU: Intel Xeon E5-2660v4 x 2 at メルカリ 7,660円 2023/7/4
* メモリ: Samsun PC4-17000P (DDR4-2133P) ECC Registered 16 GB x 8 17,960円 ヤフオク 2023/7/1
* SSD: KIOXIA SSD 240 GB
* NIC: Dell SFP+ Intel eBay 2023/7/1
* OS: AlmaLinux release 9.2
$ cat /etc/os-release
NAME="AlmaLinux"
VERSION="9.2 (Turquoise Kodkod)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="9.2"
PLATFORM_ID="platform:el9"
PRETTY_NAME="AlmaLinux 9.2 (Turquoise Kodkod)"
ANSI_COLOR="0;34"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:almalinux:almalinux:9::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"
ALMALINUX_MANTISBT_PROJECT="AlmaLinux-9"
ALMALINUX_MANTISBT_PROJECT_VERSION="9.2"
REDHAT_SUPPORT_PRODUCT="AlmaLinux"
REDHAT_SUPPORT_PRODUCT_VERSION="9.2"
* GCC version 11.3.1$ gcc --version
gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4)
...
==== AlmaLinux 9.2 のインストール ====
* AlmaLinux 9.2 のminimal インストールイメージをダウンロード (8 GB のUSBメモリしかなかったため、これにした)
* https://repo.almalinux.org/almalinux/9/isos/x86_64/AlmaLinux-9.2-x86_64-minimal.iso
* 以下のUSBメモリの書き込み方法のページを参考に、dd コマンドで isoイメージを書き込み。以前 boot用のUSB メモリを作ったときに、dd コマンドの出力がバッファされてisoイメージが正しく書き込まれない時があったので、おまじないの sync コマンドも打っておく。USBメモリのデバイス名 (/dev/sdX) の部分は dmesg コマンドや sudo fdisk -l コマンドなどで適宜調べる。
* https://wiki.almalinux.org/documentation/installation-guide.html#write-an-image-on-a-usb
* $ sudo dd if=./AlmaLinux-9.1-x86_64-dvd.iso of=/dev/sdX status=progress
$ sync
* SSDを物理的にインストールしたら、まず仮想ディスクを作らないとLinuxのインストール時にディスクを認識しないようだ。https://www.dell.com/support/kbdoc/ja-jp/000139093/how-to-initialize-and-create-a-virtual-disk-with-a-dell-poweredge-raid-controller-perc あたりを参考に、仮想ディスクを作成。
* USBメモリを挿してUSBメモリからインストーラを起動する。初めUSBメモリをBoot可能なデバイスとして認識しなかった。これはよくあることのようで Boot Settingsで Boot mode を BIOS から UEFI に変更。これで USBメモリをboot デバイスとして認識し、ここからブートできるようになった。
* インストールは通常通りの手順を行う。インストール先として、仮想ディスクを参照したはず。パーティションの割り当ては自動。この時点でパッケージの追加インストールは行わず、後で行う。
* root のパスワードを設定しておき、root によるログインを許可する。
* AlmaLinuxのインストール後、再起動
* GUIをインストール。dnf grouplist コマンドで利用可能なグループを検索し、Server with GUI グループをインストールした。
* さらに以下を参考に GUI が立ち上がるようにした。
* 【AlmaLinux】GUIデスクトップインストール・起動手順(Mac・VMwareFusion12)https://genchan.net/it/server/3528/# dnf groupinstall "Server with GUI"
# systemctl set-default graphical.target
* さらに、# dnf groupinstall "Development Tools"
# dnf install emacs
* nestdaq ユーザーも作っておく。sudo ユーザーにも加える# useradd nestdaq
# passwd nestdaq
Changing password for user nestdaq.
New password:
Retype new password:
# usermod -aG wheel nestdaq
==== インストール ====
* 2023年6月9日(日)現在、NestDAQのインストール方法に関するドキュメントはいくつかある。本家の GitHub のリポジトリの以下のインストール方法が公式と思われるが、CMAKE_PREFIX_PATHの指定が不要なところもあり、新しめのインストール方法のメモを見るのが良さそう。
* https://github.com/spadi-alliance/nestdaq/blob/main/INSTALL.md
* 新しいインストール方法のメモとしては、e50server01 のインストールログを見るのが良い。
* https://docs.google.com/document/d/1LXQejEye76UJv8ahEP6n4tAMXi1fC9YXGf0zSLDs3NI/edit#
* 内部ネットワークなので、firewall をひとまずdisableにする。systemctl status でfirewalld がdisable になっていることを確認。
$ su
Password:
# systemctl stop firewalld
# systemctl disable firewalld
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
# systemctl status firewalld
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; prese>
Active: inactive (dead)
Docs: man:firewalld(1)
...
* redis のインストール
* git でソースをダウンロードしてコンパイル
$ pwd
/home/nestdaq
$ mkdir -p nestdaq/src
$ cd nestdaq/src
$ git clone https://github.com/redis/redis.git
$ cd redis
$ git checkout -b 6.0.16 6.0.16
$ make PREFIX=$HOME/nestdaq
$ 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 $HOME/nestdaq/etc/redis.conf
#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
$ make
$ mkdir $HOME/nestdaq/lib
$ cp $HOME/nestdaq/src/RedisTimeSeries/bin/linux-x64-release/redistimeseries.so $HOME/nestdaq/lib/
* 最初 make した時に$ make
deps/readies/mk/main:49: *** Cannot find python3 interpreter.
You can install one by running 'make setup'.. Stop.
と言われた。
$ ./deps/readies/bin/getpy3
を実行すればよい? (参考: https://github.com/RedisLabsModules/readies/issues/101 ) ただ、sudo になれず失敗した気もする。getpy3 を実行したり、sudoers に nestdaq を追加したり、ログアウトしてログインしなおしたりと色々したらエラーなく make できるようになった。何が効いたかよくわからない。
* Boot をインストール
* Boost をインストールする前に FileSink で使用する zstd を入れておきたいところだが、すでに入っていた。
$ su
Password:
# dnf install zstd libzstd-devel
...
Package zstd-1.5.1-2.el9.x86_64 is already installed.
Package libzstd-devel-1.5.1-2.el9.x86_64 is already installed.
...
* Boost をダウンロードしてきてmake $ su
Password:
# dnf install python python3-devel
# exit
$ 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
$ git submodule update --init --recursive
$ time ./bootstrap.sh
$ time ./b2 install \
link=static,shared \
threading=single,multi \
cxxstd=17 \
variant=release,debug \
--layout=tagged \
-j50 \
--prefix=$HOME/nestdaq
...
...updated 20718 targets...
real 8m22.452s
user 104m50.154s
sys 8m11.127s
* ./b2 のとき 以下のメッセージが気になったので、# dnf install python としたら直った。...
- Has Large File Support : yes [4]
- Has attribute init_priority : yes [4]
warning: No python installation configured and autoconfiguration
note: failed. See http://www.boost.org/libs/python/doc/building.html
note: for configuration instructions or pass --without-python to
note: suppress this message and silently skip all Boost.Python targets
- libbacktrace builds : no [4]
- libbacktrace builds : no [6]
...
* ./b2 のとき以下のエラーが出たが、# dnf install python3-devel としたら直った。...
./boost/python/detail/wrap_python.hpp:57:11: fatal error: pyconfig.h: No such file or directory
* ./b2 のとき $HOME/nestdaq/lib というファイル (ディレクトリではなく) というファイルが間違って生成されていたため、以下のエラーが出ていた。...
...
mkdir: cannot create directory ‘/home/nestdaq/nestdaq/lib’: Not a directory
...
* ZeroMQをインストール
* cmake をインストール$ su
Password:
# dnf install cmake
# cmake --version
cmake version 3.20.2
...
# exit
* 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 -j50
...
real 0m9.800s
user 4m16.739s
sys 0m30.115s
$ make install
* 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 -j50
$ 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 -j50
...
real 0m21.608s
user 1m2.594s
sys 0m2.767s
$ 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 -j50
...
real 1m41.157s
user 14m14.481s
sys 0m42.518s
$ make install
* 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.300s
user 0m2.123s
sys 0m0.173s
* 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 install
...
real 0m57.939s
user 0m54.182s
sys 0m3.452s
* 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 -j50 install
...
real 0m18.452s
user 2m23.000s
sys 0m9.292s
* redisinsight のインストール$ cd $HOME/nestdaq/bin
$ wget https://downloads.redisinsight.redislabs.com/latest/redisinsight-linux64
$ chmod +x redisinsight-linux64
$ ./redisinsight-linux64
<なにも表示されなければOK。Ctrl-Cで殺す。殺したときはいろいろ言われる。>
$
* スクリプトなどの設定
* run ディレクトリ作成$ mkdir $HOME/run
* 初期設定ファイル nestdaq.sh を /home/nestdaq/run に作成$ cd $HOME/run
$ emacs nestdaq.sh
中身は以下。#!/bin/sh
export NESTDAQ=$HOME/nestdaq
export PATH=$NESTDAQ/bin:$PATH
さらに、.bashrc に以下の行を追記。
# For NestDAQ 2023.06.09
source $HOME/run/nestdaq.sh
* redis の立ち上げのためのファイル作成$ cd $HOME/run
$ emacs init.sh
中身は以下。#!/bin/sh
redis-server $NESTDAQ/etc/redis.conf --loadmodule $NESTDAQ/lib/redistimeseries.so
RIHOST=0.0.0.0 redisinsight-linux64 &
#daq-webctl >& $NESTDAQ/log/daq-webctl.log &
daq-webctl >& /dev/null &
さらに、実行権限を付与
$ 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
2回以上 ./init.sh を実行すると、以下のようなエラーが出る。
$ ERROR 2023-07-09 00:50:12,338 redisinsight_startup Error running web app
Traceback (most recent call last):
File "startup.py", line 138, in run_web_app
...
OSError: [Errno 98] Address already in use
ERROR 2023-07-09 00:50:12,338 redisinsight_startup Error in main()
Traceback (most recent call last):
File "startup.py", line 565, in main
...
OSError: [Errno 98] Address already in use
[149481] Failed to execute script 'entry.prod' due to unhandled exception!
もし間違って .init.sh を複数回実行した場合、redis と daq-webctl のプロセスを殺す。プロセスの殺し方は色々あるが、$ killall redis-server
$ killall redisinsight-linux64
$ killall daq-webctl
とすれば、全部殺せる。このようなスクリプトを用意しておいても良いかも。または、init.sh を編集し、すでにプロセスが立ち上がっていたら新たに立ち上げないとか、既存のプロセスを殺してから立ち上げるとか、賢い感じに編集しても良い。
* リモートで作業をするために、VNCサーバーもインストールしておく。SELinux もdisable しておく。$ su
Password:
# dnf install tigervnc tigervnc-server
# emacs /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
# reboot
ちなみに、SELinux を殺さない場合、macOS からVNCクライアント (RealVNCの VNC Viewer) でログインはできてデスクトップも表示されるが、ウィンドウを立ち上げようとすると、以下のようなエラーが出てvncserverが落ちる。
On no! Something has gone wrong.
A problem has occurred and the system can't recover.
Please log out and try again.
[ Log Out ]
{{:softwares:nestdaq:vncerver_error_almalinux9_20230609.png?400|}}
* これで Firefox などのブラウザを立ち上げ、http://localhost:8080/にアクセス
* web ブラウザ上で、 任意の Run Number を入力
* デバイスを複数立ち上げるため、まず tmux をインストール$ su
Password:
# dnf install tmux
# exit
* tmux を立ち上げ、ウィンドウを分割。Ctl-b " で上下方向分割、Ctl-b % で左右方向分割。ウィンドウ間の移動は Ctl-b o。emacs のショートカットに近いものに設定しても良い。
* tmux 上で 3 分割くらいにして、以下のスクリプトを実行。
---------------------------------------
$ ./topology-1-1.sh
...
---------------------------------------
$ ./start_device.sh Sampler
...
---------------------------------------
$ ./start_device.sh Sink
...
---------------------------------------