dump1090-fa 6.0とpiaware 6.0への更新

地球一周
©いらすとや.

9月4日にPiAware V6.0の案内が来た。
実際にはその前の8月末にpiaware 6.0がリリースされていることを確認していたが、その時点では5.0からの変更点が不明だった。
そして、piaware 6.0の存在を確認すると共にdump1090-faの更新の有無を確認。この時点ではdump1090-fa 6.0のリリースは無し。
piaware 6.0のリリースを認識した状態ではあったが変更点が不明なので更新はしないでいた。
しかし、9月3日になるとFlightAwareのウェブの自身のフィードステータス画面に「piaware 6.0が出てるよ」という表示がデカデカと出るようになったので変更点不明なままpiawareをOrangePi Zero2用にパッケージビルドして更新。
そしたらその翌日に最初の行に書いた案内が届いた。その案内に書かれていた更新内容を見てみたらdump1090-faに大きな変更があるらしいことが判り改めて確認したところ9月2日頃にはdump1090-fa 6.0もリリースされていた。
piawareとdump1090-faはどうせセットなんだろうからリリース日を合わせてくれないかな?

Piaware 6.0変更内容

Adaptive Gain:
レシーバーのゲインを自動的に調整して、ローカルRF環境に適したゲイン設定を見つけます。
Adaptive Gainは、新規インストールでのみデフォルトで有効になっています。古いバージョンから6.0にアップグレードされた既存のシステムの場合、適応ゲインはデフォルトで無効になっています。適切なゲインがすでに選択されている既存のシステムを壊したくありません。これらの既存のシステムでは、必要に応じて、アップグレード後にAdaptive Gainを手動で有効にすることができます。
Adaptive Gainは現在、rtlsdrタイプ(FlightAware Prostickなど)のドングルを使用する1090MHzレシーバーでのみサポートされています。
アダプティブゲインは、手動で調整することなく適切なゲイン設定を選択することを目的としていますが、検出されたゲイン設定が必ずしもすべての場合に最適な設定であるとは限りません。手動のゲイン調整は引き続き役立ちます。
詳細については、GitHubを参照してください

dump1090-faを低速のCPU(Pi Zero / Pi Zero W / Pi 1、またはその他のARM v6システム)で実行すると、CPU負荷を軽減するために、デフォルトでより高価なデコードオプションが無効になります。このデフォルトは、SDカードインストールの場合は `slow-cpu` piaware-config設定で、パッケージインストールの場合は` /etc/default/dump1090-fa`の `SLOW_CPU`設定で上書きできます。

パッケージのインストールでは、 `/etc/default/dump1090-fa`構成ファイルの形式が変更されました。 5.0からアップグレードすると、既存の構成ファイルが新しい形式に自動的に変換されます。

上は、Piaware 6.0の変更点ということになっていますが、おそらくSDカードイメージ用のことで実際には殆どdump1090-faの変更点です。ただし、Adaptive Gain周りの設定ははpiawareにも一応あるようです。piawareでAdaptive Gainがどう使われるのかは不明です。

PiAware LCDイメージの更新: 液晶パネルが付いたSBC用イメージファイル向けの変更点なので割愛
その他マイナーな変更:
dump1090-fa:
  • -no-fix-dfが使用されている場合、CPU使用率をさらに削減します
  • DF24 Comm-D ELMメッセージを復調しないでください(これらは一般的ではなく、dump1090ではもう使用しません)。復調を再度有効にするには、-enable-df24を使用します。
  • SDRドングルウェッジがあれば、すぐに終了して再起動します
  • -enable-antenna-power HackRFオプションを追加(@VasiliyTurchenko / PR#123による)
  • Meteorological Routine Air Report(MRAR)Comm-Bメッセージのデコード。 dump1090-faはこれらのメッセージをデコードしますが、一般的ではなく、データはまだSkyAwareに表示されません。
  • 一部のComm-Bメッセージタイプの認識が改善されました
  • 以前はゲイン「-10」を設定することで有効になっていたrtlsdrのAGCゲイン設定は、約60dBのゲインでの単なる別のゲインステップと見なされるようになりました。従来の-10の値はまだ理解されています。
  • Stratux形式の出力には現在のゲイン設定が含まれます(@b3nn0 / PR#144による)
  • jsonファイルの書き込み中に発生したエラーを報告する
  • 64ビットARMでもrtlsdrバウンスバッファーのゼロコピーパフォーマンスの回避策を有効にします(@wiedehopfによる)
マイナー変更といいつつ上のagcゲインの設定の扱いの変更は重要じゃないかと。

SkyAware:
  • オーバーレイレンダリングをカバーされた領域に制限します(@wiedehopf / PR#137による)
  • 航空機データベースを20210817に更新
  • ICAOアドレスからオーストラリアの登録を見つけるための決定論的ルールを追加します。オーストラリアの航空機タイプデータを改善する

PiAware sdcard:
  • セキュリティの脆弱性CVE-2021-23358に対処するために、Underscore JSライブラリをv1.13.1に更新します(ただし、piaware-webによるライブラリの使用はこの脆弱性を公開しないと考えています)
  • 何らかの理由で失敗した場合に再起動するように構成されたdhcpcd
  • PiAwareソフトウェアのバージョン管理がPiAwareWebステータスページに表示されます

Piaware 6.0への更新 (自動)

Piaware 6.0更新 1
Piawareのイメージファイルを焼いて使っているユーザーは基本的にはflightaware.comの自身のMy ADS-B Statsページ (https://ja.flightaware.com/adsb/stats/user/ユーザー名)を開いて(歯車)からコントロールパネルを開き、「Upgrade and Restart PiAware」を実行すればリモート更新ができるよう。(6.0向けの設定は別途?)
こちらは「がとらぼ」の中の人が使っていないものなのでよくわかりません。

自分でdump1090-faやpiawareをビルドしてインストールしている場合は過去と同じくdump1090-fa 6.0とpiaware 6.0をビルドして(更新)インストール。

dump1090-faの更新

まず、/etc/default/dump1909-fa (設定ファイル)と /lib/systemd/system/dump1090-fa.service (systemd用サービス起動/停止用ファイル)の2つのファイルのバックアップを取る。(重要)

dump1090-faのビルド(おさらい)

$ cd ~
$ git clone https://github.com/flightaware/dump1090 dump1090-fa
$ cd dump1090-fa

$ dpkg-buildpackage -b --no-sign
またはRTL-SDR系レシーバ専用なら↓
$ dpkg-buildpackage -b --no-sign --build-profiles=custom,rtlsdr

基本的には上でdebian用のパッケージが出来る。(dump1090-faを参照)

$ cd ~ 
$ sudo dpkg -i dump1090-fa_6.0_arm64.deb
上の例ではarm64環境なのでdump1090-fa_6.0_arm64.debというパッケージが出来ていますが、環境によってarm64ではないかもなのでその辺は自身の環境に合わせてください。

必要に応じて /lib/systemd/system/dump1090-fa.service ファイルを変更してください。特にmicroSDカードやeMMCなどのフラッシュメモリをストレージとして使用しているSBCではdump1090-faデフォルトのjsonファイルの出力先 /run/dump1090-fa が非常によろしくないので要調整。出力先をRAMディスクに変更したりRAMディスクへのシンボリックリンクにしたり、その辺りは好みの方法で。

また、上のjsonファイルの出力先の調整をした場合は合わせて
/etc/lighttpd/conf-available/89-dump1090-fa.conf
/etc/lighttpd/conf-available/89-skyaware.conf
のウェブ用設定ファイルも要変更。でないとウェブの地図上に航空機が表示されなくなる。
この辺りはdump1090 Prometheus ExporterでADS-B受信状況を監視するの中段に黃文字で書いてるので参照いただければ。

dump1090-fa 6.0の設定

dump1090-fa 6.0では設定ファイルが大変更になっているのでよく調べて1から再設定するくらいの勢いの方が良いかも。

/etc/default/dump1090-fa
# dump1090-fa configuration
# This is sourced by /usr/share/dump1090-fa/start-dump1090-fa as a
# shellscript fragment.

# dump1090-fa won't automatically start unless ENABLED=yes
ENABLED=yes   dump1090-faを起動するなら必ずyes

# SDR device type. Use "none" for a net-only configuration
RECEIVER=rtlsdr  レシーバがRTL-SDR系なら
# serial number or device index of device to use (only needed if there is more than one SDR connected)
RECEIVER_SERIAL=
# Initial receiver gain, in dB. If adaptive gain is enabled (see below) the actual gain
# may change over time
RECEIVER_GAIN=60 AGCの値が変わってるので注意

# Adjust gain to try to achieve optimal dynamic range / noise floor?
ADAPTIVE_DYNAMIC_RANGE=yes   6.0で追加されたAdaptive Gainを使うならyes
# Target dynamic range in dB (leave blank to autoselect based on SDR type)
ADAPTIVE_DYNAMIC_RANGE_TARGET=
# Reduce gain when loud message bursts from nearby aircraft are seen?
ADAPTIVE_BURST=no
# Gain range to allow when changing gain, in dB (empty = no limit)
ADAPTIVE_MIN_GAIN=
ADAPTIVE_MAX_GAIN=

# Turn on options to reduce load on slower CPUs, at the expense of slightly worse decoder performance.
# Setting "auto" will enable these options only if the CPU appears to be a slow CPU (currently this
# means armv6 only, e.g. Pi Zero)
SLOW_CPU=auto   6.0で追加になった非力なSBC向けCPU負荷軽減機能 auto 以外は調べて
# Local wisdom file used to select DSP implementations; uses built-in ranking if the file is missing
WISDOM=/etc/dump1090-fa/wisdom.local

# Correct CRC errors where possible
ERROR_CORRECTION=yes

# Receiver location, used for some types of position decoding. Provide the location as
# signed decimal degrees. If not given here, dump1090 will also try to read a receiver
# location from /var/cache/piaware/location.env (written automatically by PiAware, if installed)
RECEIVER_LAT= アンテナ設置場所の緯度 ただしpiaware動かしてるなら値は空で大丈夫
RECEIVER_LON= アンテナ設置場所の経度 ただしpiaware動かしてるなら値は空で大丈夫
# Maximum range, in NM. Positions more distant than this are ignored. No limit if not set.
MAX_RANGE=360

# Network ports to listen on for connections
NET_RAW_INPUT_PORTS=
NET_RAW_OUTPUT_PORTS=30002
NET_SBS_OUTPUT_PORTS=30003
NET_BEAST_INPUT_PORTS=30004,30104
NET_BEAST_OUTPUT_PORTS=30005

# Accuracy of location written to JSON output
JSON_LOCATION_ACCURACY=1

# Additional options can be added here:
EXTRA_OPTIONS=""

# If OVERRIDE_OPTIONS is set, only those options are used; all other options
# in this config file are ignored.
OVERRIDE_OPTIONS=""

# This is a marker to make it easier for scripts to identify a v6-style config file
CONFIG_STYLE=6

FlightAwareにフィードしてる(つまりpiawareを使ってる)なら /var/cache/piaware/location.env にアンテナ設置場所の座標が書かれている筈なので dump1090-fa の設定に座標を指定する必要は無い。piawareを使っていないなら座標を指定。
ADAPTIVE_BURSTは上の例では no (無効)にしているが、これは yes で近くの航空機が信号が強すぎて正常に受信できないのをゲインを低くして受信できるようにするものらしい。ゲインを下げれば当然遠くの航空機の信号が受信できないかもしれない。どちらを取るかは好みで。「がとらぼ」の人の好みはすぐ近くを通る航空機より遠く優先で no。
最後のCONFIG_STYLE=6というのがdump1090-fa 6.0の新しい設定の書き方であることを示すものらしい。dump1090-fa 5.0までの「どこに何を指定すれば良いのかまるで書き方の判らない」のと比べると新しい設定ファイルはだいぶ進化したというかようやく普通になったという感じ。

dump1090-faの起動

$ sudo systemctl daemon-reload  これは/lib/systemd/system/dump1090-fa.serviceを弄ったなら実行

$ systemctl start dump1090-fa dump1090-faを起動
または
$ systemctl restart dump1090-fa dump1090-faを再起動

$ systemctl start lighttpd lighttpdを起動
または
$ systemctl restart lighttpd lighttpdを再起動

dump1090-faのウェブUIであるローカルのSkyAware画面が上手く表示されない場合はlighttpdを再起動。それでも上手く行かなければ一旦dump190-faとlighttpdを削除して両方再インストールする荒業が有効。もちろん、 /lib/systemd/system/dump1090-fa.serviceのjson ファイル出力先とlighttpd向けの設定ファイル /etc/lighttpd/conf-available/89-dump1090-fa.conf と /etc/lighttpd/conf-available/89-skyaware.conf 、さらに実際に出力先にjsonファイルが出力されていることも要確認。また、lighttpdが何故か起動しない場合はlighttpdのログ出力先のパーミッションの設定も再チェック。aptでパッケージからインストールしたlighttpdはログファイルのオーナーが何故かrootになっていてlighttpdがログを書き込めません。ログを書き込めないエラーでlighttpdが起動しません。

詳しくはdump1090-fa 5.0のウェブ表示ができない問題を参照してください。lighttpdが起動できないのはdump1090-fa 6.0でも発生する問題です。

piaware 6.0への更新

念の為現在のpiawareの設定をメモっておく。
$ piaware-config --showall
出力された内容をテキストファイルなどに貼っておく。
/lib/systemd/system/piaware.service も内容を確認。変更しているなら一応バックアップ。

/var/cache/piaware のバックアップを取っておく。これが更新で失われることはほぼ無いとは思われるがpiawareの重要ファイルの在り処なので。

piaware 6.0のビルドとインストール
$ cd ~/      (ここではホームディレクトリでビルドするということで)
$ git clone https://github.com/flightaware/piaware_builder.git
$ cd piaware_builder
$ ./sensible-build.sh buster   ←Debian Buster系の場合
$ cd ~/piaware_builder/package-buster  ←Debian Buster系の場合
$ dpkg-buildpackage -b --no-sign
正常にビルドできたらインストール
$ cd ..
$ sudo dpkg -i piaware_6.0_arm64.deb

上の例ではarm64環境なのでpiaware_6.0_arm64.debというパッケージが出来ていますが、環境によってarm64ではないかもなのでその辺は自身の環境に合わせてください。

そもそもdebian系のLinuxを使っていない、debian系Linuxだけどパッケージは作らずビルドしたいということであれば https://github.com/flightaware/piaware_builder ではなく https://github.com/flightaware/piawareの方から自身の環境に合う方法でビルドしてください。

piawareの起動

$ sudo systemctl daemon-reload  これは/lib/systemd/system/piaware.serviceの内容が変わったら実行

$ systemctl start piaware piawareを起動
または
$ systemctl restart piaware piawareを再起動

最近の1GB,2GB,4GBのようなメモリ容量に余裕があるSBCでは既存のサービスを起動した状態でビルド・インストールしてサービス再起動でダウンタイムをほぼゼロにすることができますが、古いラズパイや非力なSBCではメモリが足りなくてビルトすらままならないことがあるのでそのようなSBCではdump1090-faやpiaware、他にfr24feedなどADS-B関係のサービスは全て停めた状態でビルドしてください。メモリが512MB以下の場合は512MB以上程度のスワップファイルを一時的に用意するとビルドできるようになることがあります。

必要に応じてまたは好みでpiawareの設定ファイルに変更を加えるなどしてください。

dump1090-fa 6.0, piaware 6.0で目玉のAdaptive Gainの効き目はまだ不明です。また、Adaptive Gain周りの設定を何をどうすると、より効き目があるかというのも不明です。オススメの設定があればお教えください。

2021年9月9日追記:

dump1090-fa 6.0とpiaware 6.0に更新後

Piaware 6.0更新後
上のグラフの画像はdump1090-exporterで出力した統計情報をPrometheusに溜めてGrafanaで出力した7日間の推移。Grafanaは複数のグラフで時間軸が揃わないという謎仕様のためdump1090-faとpiawareの更新で停止していた時間帯(赤い帯部分)がグラフ毎にズレているが、この赤帯の左(更新前)と赤帯の右(更新後)で比較いただければ。
dump1090-fa 6.0とpiaware 6.0で何か変わったか、Adaptive Gainを有効にして運用してみたが、それによって何か大きく変わるというのは無い様子。Signal Strangthで差が出るものと勝手に期待していたのでちょっと残念。
ただし、CPUの使用率は2割ほど下がっている模様。(dump1090-faをSLOW_CPU=autoで運用)非力なSBCを使っているフィーダーさんには朗報。