内容へ移動
Installation on Raspberry Pi 4
-
KobaWiki@RCNP
トレース:
文書の表示
管理
最近の変更
サイトマップ
ログイン
検索
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
===== Installation 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 インストール <code> $ sudo apt install emacs </code> * RedisTimeSeries をmake する際、python3 が必要になる。Raspberry Pi OS に Python3 がデフォルトではいっており、AlmaLinux 9.2 などのように追加で python3 をインストールする必要はないようだ。 * Boost をインストールする前に FileSink で使用する zstd と libzstd-devを入れておく。さらに python3-dev を入れておきたいところだが、すでに入っていた。<code> $ sudo apt install zstd libzstd-dev </code> * ZeroMQ を build する際、cmake が必要なので cmake をインストール<code>$ sudo apt install cmake $ cmake --version cmake version ?.??.? ... </code> * FairMQデバイスを複数立ち上げるため、tmux をインストールしておくとよい。<code>$ sudo apt install tmux</code> * Boost のビルドは結構メモリが必要なので、swap 領域を増やしておく。Increasing Swap on a Raspberry Pi - Pi My Life Up https://pimylifeup.com/raspberry-pi-swap-file/ を参考に swap を デフォルトの 100 MB から 2048 MB に増やす。<code>$ 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 </code> ちなみに、2048 MBytes 以上はエラーになりそう。<code> $ sudo dphys-swapfile setup want /var/swap=8192MByte, restricting to config limit: 2048MBytes, checking existing: deleting wrong size file (104857600), generating swapfile ... of 2048MBytes</code> これで再起動。<code>$ sudo reboot</code> ==== インストール ==== * 2023年8月2日(水)現在、NestDAQのインストール方法に関するドキュメントはいくつかある。本家の GitHub のリポジトリの以下のインストール方法が公式と思われるが、CMAKE_PREFIX_PATHの指定が不要なところもあり、新しめのインストール方法のメモを見るのが良さそう。 * https://github.com/spadi-alliance/nestdaq/blob/main/INSTALL.md * 新しいインストール方法のメモとしては、e50server01 のインストールログを見るのが良い。 * https://docs.google.com/document/d/1LXQejEye76UJv8ahEP6n4tAMXi1fC9YXGf0zSLDs3NI/edit# * SELinux は大抵問題を引き起こすので、切っておく。VNCServer などで問題が起きる。デフォルトで切れているようだ? * さらに、一般に、DAQの開発段階ではfirewall は切っておく。デフォルトでは切れているようだ?以下のように ufw をインストールして disable しても良いかもしれないが、そもそも ufw をインストールしなければ、firewall は有効にならないかも。<code> $ sudo apt install ufw $ sudo ufw disable </code> 参考: Step-by-Step Guide: Configuring a Firewall on Raspberry Pi https://raspberrytips.com/configure-firewall-raspberry-pi/ === redis のインストール === * git でソースをダウンロードしてコンパイル<code> $ mkdir -p /home/nestdaq/nestdaq/src $ cd /home/nestdaq/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 </code> * 設定ファイルを $HOME/nestdaq/etc にコピー<code> $ mkdir $HOME/nestdaq/etc $ cp $HOME/nestdaq/src/redis/redis.conf $HOME/nestdaq/etc/ </code> * daemon mode をオンにする。<code> $ emacs -nw $HOME/nestdaq/etc/redis.conf #daemonize no daemonize yes </code> === RedisTimeSeries をインストール === * <code> $ 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/ </code> * time make -j2 とすると、エラーとなる。<code> $ 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 </code> === Boot をインストール === * Boost をダウンロードしてきてmake <code>$ 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 </code> === ZeroMQをインストール === * ZeroMQ を持ってきてコンパイル<code>$ 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 </code> === fmtlib をインストール=== * <code>$ 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 </code> === FairLogger をインストール=== * <code>$ 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 </code> === FairMQ をインストール (v1.4.55) === * <code>$ 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 </code> === hiredis のインストール (v1.1.0) === * <code>$ 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 </code> === redis-plus-plus のインストール (1.3.6) === * <code>$ 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 </code> === nestdaq のインストール === * <code>$ 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 </code> === redisinsight のインストール === * 普通のLinuxマシンでは、バイナリをダウンロードしてきてRedisInsight が動くが、現状ではラズパイ用のバイナリはない? * === スクリプトなどの設定 === * run ディレクトリ作成<code>$ mkdir $HOME/run </code> * 初期設定ファイル nestdaq.sh を /home/nestdaq/run に作成<code>$ cd $HOME/run $ emacs nestdaq.sh </code>中身は以下。<code>#!/bin/bash export NESTDAQ=$HOME/nestdaq export PATH=$NESTDAQ/bin:$PATH </code>さらに、$HOME/.bashrc に以下の行を追記。<code> # For NestDAQ 2023.08.02 source $HOME/run/nestdaq.sh </code> * redis の立ち上げのためのファイル作成<code>$ cd $HOME/run $ emacs init.sh </code>中身は以下。<code>#!/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 & </code>さらに、実行権限を付与<code> $ chmod +x ./init.sh </code> * NestDAQ起動のためのスクリプトをコピー<code>$ cd $HOME/run $ cp $HOME/nestdaq/scripts/*.sh ./ </code> ==== 動かしてみる ==== * run ディレクトリに移動<code> cd $HOME/run </code> * .bashrcをソースし、init.sh を実行する。<code> $ source $HOME/.bashrc $ ./init.sh </code>もし間違って .init.sh を複数回実行した場合、redis と daq-webctl のプロセスを殺す。プロセスの殺し方は色々あるが、<code>$ killall redis-server $ killall daq-webctl </code>とすれば、全部殺せる。このようなスクリプトを用意しておいても良いかも。または、init.sh を編集し、すでにプロセスが立ち上がっていたら新たに立ち上げないとか、既存のプロセスを殺してから立ち上げるとか、賢い感じに編集しても良い。 * これで Firefox などのブラウザを立ち上げ、http://localhost:8080/にアクセス * web ブラウザ上で、 任意の Run Number を入力 * tmux を立ち上げ、ウィンドウを分割。Ctl-b " で上下方向分割、Ctl-b % で左右方向分割。ウィンドウ間の移動は Ctl-b o。emacs のショートカットに近いものに設定しても良い。 * tmux 上で 3 分割くらいにして、以下のスクリプトを実行。<code> --------------------------------------- $ ./topology-1-1.sh ... --------------------------------------- $ ./start_device.sh Sampler ... --------------------------------------- $ ./start_device.sh Sink ... --------------------------------------- </code> * この状態で、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を使用するとフリーズした。<code>... 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 ここでめっちゃ遅くなる。 </code> * 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" とすれば良い。 *
文書の表示
以前のリビジョン
メディアマネージャー
文書の先頭へ