文書の過去の版を表示しています。


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 ????? targets...
    
    

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	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 -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	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" \
       -DCMAKE_CXX_LINK_FLAGS="-Wl,--no-as-needed -latomic" \
       -B build \
       -S .
    $ cd build
    $ time make -j2
    ...
    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 -j2 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 -j2 install
    ...
    real	0m18.452s
    user	2m23.000s
    sys	0m9.292s

redisinsight のインストール

  • 普通のLinuxマシンでは、バイナリをダウンロードしてきてRedisInsight が動くが、現状ではラズパイ用のバイナリはない?

スクリプトなどの設定

  • 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.08.02                                                       
    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 を実行すると、以下のようなエラーが出る。

    ...

    もし間違って .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“ とすれば良い。
softwares/nestdaq/installation_2023_on_raspberry_pi_4.1690991509.txt.gz · 最終更新: 2023/08/03 00:51 by kobayash
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0