文書の過去の版を表示しています。
Installation 2023 on Raspberry Pi 4
環境
- 本体: Raspberry Pi 4 Model B 4GB RAM
- OS: Raspberry Pi OS (64-bit)
- A port of Debian Bullseye with the Raspberry Pi Desktop (Compatible with Raspberry Pi 3/4/400)
- Released: 2023-05-03
- Online - 0.8 GB download
OS の準備
- アカウント名は nestdaq にする。
- Emacs インストール
$ sudo apt install emacs
- RedisTimeSeries をmake する際、python3 が必要になる。Raspberry Pi OS に Python3 がデフォルトではいっており、AlmaLinux 9.2 などのように追加で python3 をインストールする必要はないようだ。
- Boost をインストールする前に FileSink で使用する zstd と libzstd-devを入れておく。さらに python3-dev を入れておきたいところだが、すでに入っていた。
$ sudo apt install zstd libzstd-dev
- ZeroMQ を build する際、cmake が必要なので cmake をインストール
$ sudo apt install cmake $ cmake --version cmake version ?.??.? ...
- FairMQデバイスを複数立ち上げるため、tmux をインストールしておくとよい。
$ sudo apt install tmux
- Boost のビルドは結構メモリが必要なので、swap 領域を増やしておく。Increasing Swap on a Raspberry Pi - Pi My Life Up https://pimylifeup.com/raspberry-pi-swap-file/ を参考に swap を デフォルトの 100 MB から 2048 MB に増やす。
$ sudo dphys-swapfile swapoff $ sudo emacs -nw /etc/dphys-swapfile ... CONF_SWAPSIZE=100 | | | V V V CONF_SWAPSIZE=2048 $ sudo dphys-swapfile setup want /var/swap=2048MByte, checking existing: keeping it $ sudo dphys-swapfile swapon
ちなみに、2048 MBytes 以上はエラーになりそう。
$ sudo dphys-swapfile setup want /var/swap=8192MByte, restricting to config limit: 2048MBytes, checking existing: deleting wrong size file (104857600), generating swapfile ... of 2048MBytes
これで再起動。
$ sudo reboot
インストール
- 2023年8月2日(水)現在、NestDAQのインストール方法に関するドキュメントはいくつかある。本家の GitHub のリポジトリの以下のインストール方法が公式と思われるが、CMAKE_PREFIX_PATHの指定が不要なところもあり、新しめのインストール方法のメモを見るのが良さそう。
- 新しいインストール方法のメモとしては、e50server01 のインストールログを見るのが良い。
- SELinux は大抵問題を引き起こすので、切っておく。VNCServer などで問題が起きる。デフォルトで切れているようだ?
- さらに、一般に、DAQの開発段階ではfirewall は切っておく。デフォルトでは切れているようだ?以下のように ufw をインストールして disable しても良いかもしれないが、そもそも ufw をインストールしなければ、firewall は有効にならないかも。
$ sudo apt install ufw $ sudo ufw disable
参考: Step-by-Step Guide: Configuring a Firewall on Raspberry Pi https://raspberrytips.com/configure-firewall-raspberry-pi/
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 $ time make -j2 PREFIX=$HOME/nestdaq real 3m38.510s user 5m48.072s sys 0m48.158s $ 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 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 0m17.742s user 0m22.763s sys 0m3.196s $ mkdir $HOME/nestdaq/lib $ cp $HOME/nestdaq/src/RedisTimeSeries/bin/linux-arm64v8-release/redistimeseries.so $HOME/nestdaq/lib/
- time make -j2 とすると、エラーとなる。
$ time make -j2 make[1]: 警告: 副次 make で -j0 を強制指定しました: jobserver モードをリセットします. Submodule path 'deps/RedisModulesSDK': checked out 'c0740b8209abae38775adc6f3fefe05a520be55b' Submodule path 'deps/readies': checked out '32e37e68f6ffa66f5a6e41cb37794147e84c38cb' ../deps/readies/mk/main:67: /home/nestdaq/nestdaq/src/RedisTimeSeries/deps/readies/mk/cfg: そのようなファイルやディレクトリはありません make[1]: *** ターゲット '/home/nestdaq/nestdaq/src/RedisTimeSeries/deps/readies/mk/cfg' を make するルールがありません. 中止. make: *** [Makefile:31: build] エラー 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 9m39.702s user 5m33.512s sys 1m30.524s $ time ./bootstrap.sh ... real 1m10.282s user 0m59.716s sys 0m8.422s $ time ./b2 install \ link=static,shared \ threading=single,multi \ cxxstd=17 \ variant=release,debug \ --layout=tagged \ -j2 \ --prefix=$HOME/nestdaq ... ...updated 22097 targets... real 142m20.642s user 239m57.392s sys 22m37.588s
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 -j2 ... real 5m14.673s user 8m28.175s sys 1m24.294s $ 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 -j2 ... $ 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 -j2 ... real 2m7.246s user 3m32.083s sys 0m12.081s $ 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" \ -DCMAKE_CXX_LINK_FLAGS="-Wl,--no-as-needed -latomic" \ -B build \ -S . $ cd build $ time make -j2 ... real 22m26.581s user 40m8.427s sys 2m51.098s $ 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 0m7.662s user 0m6.718s sys 0m0.801s
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 -j2 install ... real 1m44.972s user 3m13.542s sys 0m14.668s
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 -j2 install ... real 4m44.129s user 8m20.577s sys 0m43.707s
redisinsight のインストール
- 普通のLinuxマシンでは、バイナリをダウンロードしてきてRedisInsight が動くが、現状ではラズパイ用のバイナリはない?
スクリプトなどの設定
- 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.08.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 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 を実行すると、以下のようなエラーが出る。
...
もし間違って .init.sh を複数回実行した場合、redis と daq-webctl のプロセスを殺す。プロセスの殺し方は色々あるが、
$ killall redis-server $ killall redisinsight-linux64 $ killall daq-webctl
とすれば、全部殺せる。このようなスクリプトを用意しておいても良いかも。または、init.sh を編集し、すでにプロセスが立ち上がっていたら新たに立ち上げないとか、既存のプロセスを殺してから立ち上げるとか、賢い感じに編集しても良い。
- これで Firefox などのブラウザを立ち上げ、http://localhost:8080/にアクセス
- 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 ボタンを押す。
メモ
- 2GB メモリの Raspberry Pi を使っている場合、boost のコンパイルでメモリ不足になり、大抵ほぼフリーズ状態になる。swap 領域がデフォルトで100 MB なので、これを 2GB などにすれば、boost のコンパイルもできるようになる。4 GB のタイプでも、64 bit OSを使用するとフリーズした。
... link.mklink boost/aligned_storage.hpp gcc.archive bin.v2/libs/regex/build/gcc-10/release/cxxstd-17-iso/link-static/visibility-hidden/libboost_regex-a64.a link.mklink boost/compressed_pair.hpp link.mklink boost/detail/compressed_pair.hpp common.copy /home/nestdaq/nestdaq/lib/libboost_regex-a64.a link.mklink boost/is_placeholder.hpp link.mklink boost/visit_each.hpp link.mklink boost/graph/graphml.hpp mklink-or-dir boost/property_tree ここでめっちゃ遅くなる。
- FairMQ の make 時にエラーとなる。Web で調べると、CMAKE_CXX_LINK_FLAGS に -latomic を設定せよと書いてあるがうまくいかない。make VERBOSE=1 として、リンク時のコマンドを確認すると、-latomic は入っているが、リンクがうまくいっていない。これは Debian/Ubuntu 系の Linux でコンパイルしたときの問題のように見える。 Debian/Ubuntu 系 ではデフォルトでリンカに –as-needed オプションが渡されるため、しばしばライブラリやオブジェクトをコマンド上で並べる順番によってリンクできない場合がある。この場合、リンカに –no-as-needed オプションを与えれば良い。 具体的には cmake コマンドのオプションに -DCMAKE_CXX_LINK_FLAGS=”-Wl,–no-as-needed -latomic“ とすれば良い。