FlightAwareにフィードする

週の前半に見た週間天気予報ではせっかくの週末が天気悪いということだったが、土曜日は夕方まで雨が降らずむしろ晴れていたくらいで、これ幸いにアンテナを屋根の高さに上げた。

コリニアアンテナを屋根に上げた
事情があって、前回とは屋根自体が違う。倉庫の鉄筋から単管をドーンと外に突き出した形。⌀48.6ミリのありふれた単管と⌀32ミリの細めの単管を直交クランプで交差し、そこに「なんちゃってコリニアアンテナ」を留めた。パイプの太さが違う用の筋交金具は見つけられなかったので支え無し。直交クランプだけだとちょっと強度が心配ではある。単管はそれぞれキャップを付けた。(上下の単管の下端は無し)
アンテナを屋根に上げるまでは、アンテナの入ったJ管の上端を自己融着テープで防水してビニールテープで保護して地上に置いたアンテナポールに建てていたのだが、親からの報告によると、鳥が留っていたのと、野良猫の子供がアンテナにじゃれていたとのことで、短期間であったにも関わらずビニールテープの保護部がみごとに破壊されていた。そこで、融着テープとビニールテープの保護をやりなおした上で、鳥の足で破壊されないようパイプキャップを被せてさらにビニールテープを巻きつけて固定した。(キャップの耐候性が心配だった)

カバレッジ
アンテナを上げてからフィードの準備のためにdump1090-faを停めるまで数時間ほど取得したカバレッジ。このカバレッジはアンテナを上げてから新規に取得し直したものなので北西方向はアンテナが地上にあったときよりも50kmほど狭くなっている。カバレッジを見るなら少なくとも24時間は取得した方が良さそう。で、東北東側は長野県まで到達し、南西側も和歌山・奈良に突入した。しかし、期待される見晴らしよりもまだだいぶ狭い。まぁ、想定されるカバレッジの内側ぎりぎりを航空機が飛んでくれないとカバレッジとして描かれないので、取得開始から僅か数時間では無理というものではある。

フィードしたい

dump1090-faと受信データをマップにプロットするアプリで航空機の飛行状況をPCで見て薄気味悪くニヤニヤできるようになったわけだが、せっかくなのでデータを共有することにしたい。フィード先は大手だとFlightradar24、FlightAware、planetfinder、RadarBox (RadarBox24)、ADS-B Exchangeとか? dump1090-faを使っているからというわけではないが、今回はFlightAwareに参加することにした。
Raspberry Piを使っていたら、それ用に提供されているイメージファイルをMicroSDカードに焼くだけとかパッケージをインストールするだけとかとにかく簡単なのだろうが、arm64のOrange Pi Zero Plusなので少しだけ手間がかかる。

FlightAwareにデータをフィードするにはクライアントのアプリケーションとしてPiAwareが必要。受信用のdump1090-faは前回そのまま。 そのPiAwareがOrange Pi Zero Plus + Armbian (Debian Buster)ではそこら辺からダウンロードしてインストールして終わりとはいかない部分。 まぁ、ビルドするだけなんだけど。

PiAwareのビルド

必要なパッケージをインストールする。dump1090-faをビルドしたときにインストールしたパッケージが残っているものとする。

$ sudo apt install tcl8.6-dev python3-venv      ← README.mdで必要とされているもの
$ sudo apt install libboost-system-dev libboost-program-options-dev libboost-regex-dev libboost-filesystem-dev devscripts python3-dev     ←おそらく他に足りないもの

インストールするパッケージが依存する他のパッケージもそれなりにインストールされる。

$ git clone https://github.com/flightaware/piaware_builder.git
$ cd piaware_builder
$ ./sensible-build.sh buster   ←重要
使用中のOS(ArmbianのDebian)のバージョンを引数として指定。今回は buster を付けた。
暫く進行して以下の表示で終われば正常。 Ok, package is ready to be built in ./package-buster
run 'dpkg-buildpackage -b' there (or move it to a Pi and do so there, or use pbuilder, etc)

flightaware_builderディレクトリの下にpackage-busterディレクトリが作成されている。

$ cd ~/piaware_builder/package-buster   ←最後のbusterは自身の使用中のOSに合うものを(というか上のメッセージに書かれているのに従う)。
ここまでがビルドの準備。
ビルド
$ dpkg-buildpackage -b --no-sign

中略

make[2]: Entering directory '/home/hoge/piaware_builder/package-buster/dump978'
g++ -g -O2 -fdebug-prefix-map=/home/hoge/piaware_builder/package-buster=. -fstack-protector-strong -Wformat -Werror=format-security -std=c++11 -Wall -Wno-psabi -Werror -O2 -g -Ilibs -Wdate-time -D_FORTIFY_SOURCE=2 -DVERSION=\"3.8.0\"  -c -o faup978_main.o faup978_main.cc
g++: fatal error: Killed signal terminated program cc1plus
compilation terminated.
make[2]: *** [: faup978_main.o] Error 1
make[2]: Leaving directory '/home/hoge/piaware_builder/package-buster/dump978'
make[1]: *** [debian/rules:54: build_dump978] Error 2
make[1]: Leaving directory '/home/hoge/piaware_builder/package-buster'
make: *** [debian/rules:95: build] Error 2
dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2

ビルド失敗。メモリが足りてなくて停まったっぽい。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:          479Mi       101Mi       260Mi       2.0Mi       117Mi       366Mi
Swap:         239Mi          0B       239Mi

うわっ少なっ! まぁ登載メモリが512MBでストレージがMicroSDカードなシングルボードコンピュータだからこんなもんだよね。こりゃ「空きメモリ使い切り+スワップ使い果たし」も仕方ない。

Linuxの作法はよく知らないけどスワップを一時的に拡張することにした。
現在のスワップを停止。

$ sudo swapoff -a
$ free -h
              total        used        free      shared  buff/cache   available
Mem:          479Mi       101Mi       259Mi       2.0Mi       118Mi       366Mi
Swap:            0B          0B          0B

スワップをオフにしたので当然0バイトになった。
臨時スワップ用のイメージファイルを1GBで作成する。

$ sudo dd if=/dev/zero of=/swap.img bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 55.3854 s, 19.4 MB/s

ファイル作成にはちょっと時間がかかるかも。

$ sudo chmod 600 /swap.img  おそらくパーミッションを変更しないと次がNG
$ sudo mkswap /swap.img 作成したファイルをスワップファイルに指定。
$ sudo swapon /swap.img  作成したスワップをオンにする。
$ free -h
              total        used        free      shared  buff/cache   available
Mem:          479Mi       102Mi        59Mi       2.0Mi       316Mi       364Mi
Swap:         1.0Gi          0B       1.0Gi

これで1GBのスワップが有効になった。
これは設定ファイルを書き込んではいないのでシステム再起動で変更前に戻る。ただし、1GBの/swap.imgは残るので不要になったら消す。

2020年5月21日追記:
大物ビルド時ではなく通常時のためのスワップ設定について。
システム負荷が低いときでも遠慮せずにガンガンSwapするのが最近のArmbainの初期値みたい。昔のSLCならともかく最近のTLCのようなアホみたいに耐久性の低いmicroSDカードでスワップしまくると早々に壊れる可能性がある。そこで、本当のメモリ不足(非常時)のためのスワップは活かしたまま、普段はなるべくスワップさせない設定。
変更するファイル /etc/sysctl.conf (追記または修正 1行)
vm.swappiness=1
Armbianだと何故か初期値100で書かれているかもしれないので1にする。0にはしない。
$ sudo sysctl vm.swappiness=1 (システム起動後に手動でただちに設定を反映させたい場合)

再ビルドする。

$ cd ~/piaware_builder/package-buster
$ dpkg-buildpackage -b
今度は正常にビルドできた。

1階層上の~/piaware_builderに戻るとpiawareのパッケージが出来ているのでそれをインストールする。
今回はpiaware_3.8.0_arm64.deb

$ sudo dpkg -i piaware_3.8.0_arm64.deb
Selecting previously unselected package piaware.
(Reading database ... 53203 files and directories currently installed.)
Preparing to unpack piaware_3.8.0_arm64.deb ...
Unpacking piaware (3.8.0) ...
dpkg: dependency problems prevent configuration of piaware:
 piaware depends on tclx8.4; however:
  Package tclx8.4 is not installed.
 piaware depends on tcllib; however:
  Package tcllib is not installed.
 piaware depends on tcl-tls; however:
  Package tcl-tls is not installed.
 piaware depends on itcl3; however:
  Package itcl3 is not installed.

dpkg: error processing package piaware (--install):
 dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.28-10) ...
Processing triggers for systemd (241-7~deb10u3) ...
Processing triggers for rsyslog (8.1901.0-1) ...
Processing triggers for man-db (2.8.5-2) ...
Errors were encountered while processing:
 piaware

まだパッケージが足りないとかいってる。しかも、古いバージョンを要求してる。面倒ねぇ。

$ apt install tclx8.4 tcllib tcl-tls itcl3
$ apt install --fix-broken

$ sudo dpkg -i piaware_3.8.0_arm64.deb
(Reading database ... 55491 files and directories currently installed.)
Preparing to unpack piaware_3.8.0_arm64.deb ...
Unpacking piaware (3.8.0) over (3.8.0) ...
Setting up piaware (3.8.0) ...
Processing triggers for libc-bin (2.28-10) ...
Processing triggers for systemd (241-7~deb10u3) ...
Processing triggers for rsyslog (8.1901.0-1) ...
Processing triggers for man-db (2.8.5-2) ...
今度は大丈夫。

「今度は大丈夫」なのはPiAware3.8の場合で、4.0ではtcl-tlsが専用版が要るみたい。そのビルドについてはdump1090-faとPiAwareをVersion 4.0に更新に書いている。

$ sudo piaware-config allow-auto-updates yes
$ sudo piaware-config allow-manual-updates yes

これで設定ファイルの/etc/piaware.confに設定が2行追加される。
flightaware.com側からの操作が受け付けられる。(後のMLATの設定で使われる)
その他の設定はPiAware 3 Advanced Configurationを参照。特に何か無ければ追加指定する必要はなさそうだけど。

起動中のPiAwareの未指定値含めて全オプション状態を表示するなら piaware-config -showall (これはこの記事では省略)

$ piaware-status
PiAware master process (piaware) is running with pid 1321.
PiAware ADS-B client (faup1090) is running with pid 1352.
PiAware ADS-B UAT client (faup978) is not running (disabled by configuration settings)
PiAware mlat client (fa-mlat-client) is running with pid 15669.
Local ADS-B receiver (dump1090-fa) is running with pid 1117.

dump1090-fa (pid 1117) is listening for ES connections on port 30005.
faup1090 is connected to the ADS-B receiver.
piaware is connected to FlightAware.

dump1090 is producing data on localhost:30005.

Your feeder ID is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (from /var/cache/piaware/feeder_id)
稼働中のステータス表示はこんなの。動いているべきもの停まってるべきものを確認する。

システムを再起動してpiawareが自動起動することを確認する。

FlightAware.com参加

ブラウザでhttps://ja.flightaware.com/にアクセスして会員登録する。
会員としてログインした状態でhttps://ja.flightaware.com/adsb/piaware/claimを開く。

FlightAware.com参加 1
グローバルIPアドレスを見てるのかな?シングルボードコンピュータのpiawareと同じNATにいるPCでアクセスしたら特に何もせずに自動的にアカウントとPiAwareが紐付けられた。(っていうことはPiAwareはそれまで勝手にflightaware.comに接続してたってこと? ヨクナイゾ)

LAN側のファイアウォールで外部との通信をブロックしているとかがなければ、これでフィードが始まっている。なお、他のアプリなどでdump1090-faからデータを引いているとフィードが停まることがあるようなので、そういう場合は要対策。

FlightAware.com参加 2
flightaware.comの最上部にある「My ADS-B」で自身のフィード状況のページを開き、サイト情報のすぐ上にあるサイト番号のかかれたバー(オレンジ?)の右にあるギアアイコンを開き、「MLATが有効です」が選択されていることを確認。そして、「場所設定」と「高さを設定して下さい」でアンテナの場所と高さを入力。[Save]で保存。これで「MLAT」が有効になり緑になる筈。(piaware-configでallow-mlatをno指定していないこと)

FlightAware.com参加 3
で、FlightAwareのフィーダーになったわけだけど、これでFlightAwareの会員クラスが普通の無料会員であるBasicからEnterpriseに自動的に変わって、月々$89.95の会費が無料ということなんだけど、会員のクラスが上がったところで、そもそもFlightAwareで見れる情報って何故かあまり楽しくないように思う。特にフィーダーの楽しみがない。(FlightRadar24はFlightAwareよりもさらにフィーダー向け情報が楽しくなかったことを追記しておきます。FR24の方は自分の順位付近のランキング見るのも大変だし)
もう少し見せ方があるんじゃないかしら?

FlightAware.com参加 4
フィードしたデータとは関係なく、FlightAwareで特定の航空機のフライト情報の例。緑〜黄色のモニャモニャしたのは雨雲。

関連記事: