文書の過去の版を表示しています。
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メモリしかなかったため、これにした)
- 以下のUSBメモリの書き込み方法のページを参考に、dd コマンドで isoイメージを書き込み。以前 boot用のUSB メモリを作ったときに、dd コマンドの出力がバッファされてisoイメージが正しく書き込まれない時があったので、おまじないの sync コマンドも打っておく。USBメモリのデバイス名 (/dev/sdX) の部分は dmesg コマンドや sudo fdisk -l コマンドなどで適宜調べる。
$ 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の指定が不要なところもあり、新しめのインストール方法のメモを見るのが良さそう。
- 新しいインストール方法のメモとしては、e50server01 のインストールログを見るのが良い。
- 内部ネットワークなので、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
- スクリプトなどの設定
- 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 ]
- これで 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 ... ---------------------------------------