AirNav RadarBox24のMLATインストールとログの停止

#この記事が解決したいこと
いくつかの ADS-Bサイトの中で AirNav RadarBox24は何か異色な、少し詰めが甘いような感じを受けるサイトです。RasberryPi + buster での経験が役に立てばと書き留めました。
###1. MLATのインストールがうまくいかない
MLATは、位置情報がないADS-Bの電波の複数局への到着時間差を逆算して航空機の位置を求める画期的な技術です。有効にできれば見える航空機の量を**多少**増やすことができます。しかし、どうやらサクサクとは導入されてくれないようです。実際、MLATが有効になっている局は半分程度です。MLATマークがついてると少しカッコ良いです。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651488/cdfeb102-3374-efe0-d77c-8b4351c055d0.png)

###2.ログが多すぎてSD容量とか寿命の心配
ほかのフィーダーと比べて、ログが頻繁に吐かれます。そしてログを止める際にトラップも見つかりました。SDカード寿命を延ばすために、動作が安定したら盛られているドクいやログを停止してしまいましょう。

この記事では、これら2つの課題の解決法を書いていきます。AirNav RadarBox24は以後略してRB24と書きます。

#1. MLATのインストール
RB24のフィードをしようとして、MLATで失敗し、ちょっと頑張っている人に見つけてほしい記事です。
MLATが稼働してなくても**多少**の差しかないですからRB24側もユーザー側もそこまでの執着は無いのかもしれないですが、ここに来たあなたはその執着を持った人ですね。
公式では、手順として以下の2行が示されています、2行目を実行すると MLATが動作するはず……なのですが。

```
$ sudo bash -c "$(wget -O - http://apt.rb24.com/inst_rbfeeder.sh)"
$ sudo apt-get install mlat-client
```
私の場合は、以下のようなエラーになりました。そもそもスクリプトが 2つに分かれてる時点で、何か公式の自信の無さというか嫌な予感を察知しないといけなかったのかも。

```
W: The repository 'https://apt.rb24.com buster Release' does not have a Release file.
N: Data from such a repository can't be authenticated and is therefore potentially dangerous to use.
N: See apt-secure(8) manpage for repository creation and user configuration details.
E: Failed to fetch https://apt.rb24.com/dists/buster/main/binary-armhf/Packages  The HTTP server sent an invalid reply header
E: Some index files failed to download. They have been ignored, or old ones used instead.
```
すごーく基本的な匂いのするエラーです。これが一つ目のトラップ。
このエラーを解決するには、mlat-clientをソースからコンパイルするか、先人がコンパイルしたものをもらいます。ここでは楽なほうの後者、
https://forum.radarbox24.com/index.php?topic=103271.msg443131#msg443131
に記載の方法を使います。

```sh
## Remove broken mlat-client
$ sudo dpkg --purge mlat-client 

## Download mlat-client package for BUSTER
$ wget https://github.com/abcd567a/mlat-client-package/releases/download/v1/mlat-client_0.2.11_BUSTER_armhf.deb   

## Install downloaded package
$ sudo dpkg -i mlat-client_0.2.11_BUSTER_armhf.deb   

$ sudo systemctl restart rbfeeder
```
今回のインストールは正常に終わったはずです。一歩前進です。
しかし、rbfeederの状態を見てみると

```sh
$ sudo systemctl status rbfeeder
```
以下のように mlat-clientでエラーが発生しています。二つ目のトラップです。

```
Traceback (most recent call last):
   File "/usr/bin/mlat-client", line 25, in <module>
     from mlat.client.receiver import ReceiverConnection
   File "/usr/lib/python3/dist-packages/mlat/client/receiver.py", line 26, in <module>
     import _modes
ImportError: No module named '_modes'
```
この '_modes' というモジュールが存在しないエラーですが、pythonのバージョンの違いによるものでした。/usr/bin/mlat-client は単独では正常起動しますが、systemdからだとこのエラーになります。それはこれを呼びだすところで変なことをしているから。
解決法ですが、rbfeederの設定を変更します。

```sh
$ sudo nano /etc/rbfeerder.ini
```
[mlat]の最後に記載されている一文を修正します。Pythonのバージョンを3.5から3.7に変更。

```ini
[mlat]
autostart_mlat=true
#mlat_cmd=/usr/bin/python3.5 /usr/bin/mlat-client
mlat_cmd=/usr/bin/python3.7 /usr/bin/mlat-client
```
編集が終わったら、

```
$ sudo systemctl restart rbfeeder
$ sudo systemctl status rbfeeder
```
で、正常に mlat-clientが起動できているか確認しておいてください。

https://www.radarbox.com/stations/EXTRPIxxxxxx
自局を入れた上記のURLで、左上の白枠に MLAT active (xx stations synced)
と出ていたら成功です。動作していないときは、MLATの項目自体が存在しなくなります。

###追記(2020/6/28) まだトラップがあった！
再インストールしたら謎の問題に遭遇、上記を再度行ってもダメ。ログも全部再開したが情報つかめず。
mlat-clientが起動していないことが判明。しかし、エラーなどは全くなし。
/usr/bin/rbfeeder が、/usr/bin/mlat-clientを引数付きで呼びだす仕組みだとわかり、そして、どうやらその起動に失敗しているらしいというのに辿り着くのが大変でした。
mlat-clientを別途インストールした場合には、単体で動作させるためのsystemdのスクリプトや設定が存在していて、混乱に拍車をかけます。例えば /etc/default/mlat-client は使用されない設定ファイルですが、私はそれにも惑わされました。RB24はこれらを使わず、rbfeederから mlat-clientを呼びだすんです。

そして驚きの原因ですが……。最終的に発見したのは、なんとアンテナの設置場所の海抜alt=(m)。
ここには、小数点以下を記載してはいけません(笑)。lat=やlon=には小数点以下を記載できますが、alt= だけは整数で。例えば以下のように書くと、 mlat-clientが密かに死んでいたという私と同じ結果となります。

```ini
[client]
 :
lat=xxx.xxxxxx
lon=xxx.xxxxxx
alt=36.7
```
わかりにくすぎるー。これは他にもありそう不親切仕様。

#2. ログを停止
+ RB24はログを多数出力します。
    + /var/log/syslog に 30秒に一回 4行程度
    + /var/log/rbfeeder.log にも同じ頻度で同じ内容

ADS-Bに使っている環境は、電力の問題でPCにしたくない、そして放置運用される前提でできるだけノーメンテで長生きしてほしい、というような過酷な要求の下で運用されていると思います。頻繁なログファイルの書き込みはシステム内で寿命が最も短いSDカードへの最大のストレスになります。  
どうして同様のログが2か所にでるのかも不明です。片方だけ止めて安心している事例もありました。RB24って本当にトラップが多いです。

### /var/log/rbfeeder.log への出力を止める

rbfeederの設定を変更します。設定ファイルを編集します。

```sh
$ sudo nano /etc/rbfeerder.ini
```
[client]の最後の一行のログファイルの設定を、修正します。

```ini
[client]
  :
#log_file=/var/log/rbfeeder.log
log_file=/dev/null
```
設定を変えたら rbfeederの再起動を行ってください。続いて2つめのログ削除も行う場合はここでの再起動はスキップして最後にまとめてでも構いません。

```
$ sudo systemctl restart rbfeeder
```

### /var/log/syslog への出力を止める
systemdの設定を開き、

```
$ sudo nano /lib/systemd/system/rbfeeder.service
```
[Service] の最後に一行を付け足します。

```ini
[Service]
  :
StandardOutput=null
```
設定を変えたら以下のようにdaemon設定の再読み込みと rbfeederの再起動を行ってください。

```sh
$ sudo systemctl daemon-reload
$ sudo systemctl restart rbfeeder
```

最後に、ログの更新が無くなっていることを確認しておいてください。

＃これが私のQiita初記事でした。