kobar9568のブログ

技術的なメモやその他諸々

Ubuntu Server 18.04でdump1090とfr24feedを動かす

御託

上空を飛行している航空機は、空中衝突を防止する為のシステムが備わっている。
航空業界の黎明期、今より規則やシステムが未熟だった頃にグランドキャニオン上空で起きた空中衝突事故をはじめ、数件の空中衝突事故があり、これを教訓として空中衝突を防止するシステムが構築された。
航空機衝突防止装置(ACAS; Airborne Collision Avoidance System)の実装である、
空中衝突防止装置(TCAS; Traffic alert and Collision Avoidance System)をはじめ、空中衝突を防止するシステムが構築されている。
TCASはトランスポンダのモードSを利用して周囲の航空機と通信を行い、位置関係や速度から衝突の危険があると判断すれば回避する操縦を行うよう指示を出す。
通信は質問と応答に分かれており、質問信号を1030MHzで送信、それに対する応答信号を1090MHzで返信するプロトコルになっている。
更に、トランスポンダが対応していてシステムが有効であれば、航空機の現在位置、速度、上昇率・降下率、進行方向等の追加情報を放送(ブロードキャスト)する自動従属監視放送(ADS-B; Automatic Dependent Surveillance-Broadcast)として追加情報がTCASの応答信号と同じ1090MHzで送信される。
TCASとADS-Bを組み合わせることでより遠距離から危険性を検知出来る。

はじめに

  • 航空機から1090MHzでブロードキャストされるTCAS, ADS-Bのデータを受信してFlightradar24にfeedする。
  • Flightradar24にfeedすると$499.9/yearのBusinessプランをタダで利用できる。
  • 今年の5月からUbuntu搭載モデルのIntel Compute Stickを使ってfeedしていたが、これをメインサーバーに収容する。
  • 特殊なハードとして1090MHzを受信出来るアンテナ、受信した信号をUSBで送ってくれるドングル、アンテナとドングルを接続するケーブルが必要となるが、これは海外のテレビ規格であるDVB-TのUSBTVチューナーを利用できる。

  • 付属のアンテナは1090MHzに最適なものではないが、一応受信可能。1500円前後のこのセットだけで始められる。
  • 有志が作成したドライバを利用することで、DVB-TのTVチューナーをSDRチューナー(SDR; Software-defined radio)として利用できるので、これで1090MHzにチューニングして航空機からの放送を傍受する。

注意点

  • 半年前ろくにドキュメント化せず適当に構築した環境を移行する流れだったのだが、結構苦労した。

fr24feedのsegfault

  • dump1090からデータを取得し、Flightradar24にfeedする為のソフトウェア、fr24feedだが、1.0.24-5Debian package amd64/x86_64を試したところ、私の環境だと起動直後にFlightradar24に接続まで行かず、segfaultで落ちてしまう現象があった。
  • 毎回発生するらしく、こうなると、掴んだdump1090を取り残して落ちてしまう。
  • 使い物にならないので、前回の構築時に使っていた1.0.18-5を使う事にした。
  • ダウンロードページからはダウンロード出来ないが、2019-12-25時点でファイルのリンクは生きていた。
  • あまり褒められた事ではないが、直リンはこれ
  • 1.0.18-5を使ったところ、問題なくfeed出来た。

dump1090のForkとバージョン

  • SDRレシーバーとなったドングルを使ってADS-Bを取得してくれる、dump1090だが、このソフトは多くのForkが存在する。
  • 大本がこれ
  • メンテナンスされなくなっているが、"mutability版"と呼ばれるFork。fr24feedの.debに含まれるのもこれ
  • dump1090-faと呼ばれる、FlightAwareのFork

前回はmutability版を使っていた。今回試しにdump1090-faを使ってみようと思ったのだが、依存パッケージに最新バージョンのものを要求するため、テスト用のKubuntu 19.04でしか動作しなかった。

メンテナンスされていないコードを使用するのはあまり良くないが、前回と同じくmutability版を使うことにした。

  • mutability版は、releasesからダウンロードしたソースはビルド出来ない。
  • リポジトリをcloneし、unmaintainedブランチのものを使う必要がある。

dump1090-mutabilityのビルド

  • ビルド用にDockerでビルド用コンテナを用意したので、細かめ。
  • debパッケージに固める。
# 取り敢えずパッケージリストのアップデート
sudo apt update

# gitのインストール
sudo apt install git

# ソースコードのclone
git clone https://github.com/mutability/dump1090.git
cd dump1090/
git checkout unmaintained # ブランチ切り替え

# ツール郡と依存ライブラリを用意
sudo apt install make gcc pkg-config               # ビルドに必要なツール郡
sudo apt install librtlsdr-dev libusb-1.0-0-dev # 依存ライブラリ
sudo apt install debhelper                               # .debに固める場合は追加で必要

# バイナリだけ作る場合
make # dump1090の実行ファイルが生成される

# .debに固める場合
dpkg-buildpackage -b # 一個上のディレクトリにdump1090-mutability_1.15~dev_amd64.debが生成される

dump1090のインストール

$ sudo apt install ./dump1090-mutability_1.15~dev_amd64.deb
  • debパッケージにしておけば、一発で入れられる。
  • 途中で自動起動の有効/無効を聞かれる。 fr24feedから使うなら、noにしておく。

fr24feedのインストール

$ wget http://feed.flightradar24.com/linux/fr24feed_1.0.18-5_amd64.tgz
$ tar -zxvf fr24feed_1.0.18-5_amd64.tgz

$ sudo cp fr24feed_amd64/fr24feed /usr/bin/

$ sudo chown root.root /usr/bin/fr24feed
$ sudo chmod 755 /usr/bin/fr24feed
  • 落としてきたアーカイブにバイナリが入っているので、適当な場所にコピーしておく。

fr24feedまわりの設定

  • /etc/fr24feed.iniにconfigの一部が保存される。
    • 環境移行の場合は、コピーして設置しておく。
  • /usr/lib/fr24/dump1090を用意する
  • ログファイルを吐くディレクトリを作っておく
$ sudo mkdir /usr/lib/fr24/
$ sudo ln -s /usr/bin/dump1090-mutability /usr/lib/fr24/dump1090
$ sudo mkdir /var/log/fr24feed/

実行

  • ここまで用意したら、適当な方法でfr24feedのバイナリを走らせればfeedされる。/etc/fr24feed.iniがあれば、初回設定はなしですぐにfeedに入る。

追記: Docker

  • で、結構面倒だったので最近触り始めたDockerの習得の意味も含めてDockerに閉じ込めることにした。

GitHub

  • バイナリの再配布がライセンス的によくわからないので含めていないが、resources/にビルドしたdump1090-mutability_1.15~dev_amd64.debと落としてきたfr24feedを設置してコンテナをbuildし、runすることでfeed出来る環境を用意した。