もっと詳しく

初代 Raspberry Pi で動く PiAware がシステムクラッシュ。破損ファイルが複数ある中、通常ならば新しいSDカードでのシステム再構築がセオリーなのですが、他にも様々なタスクを運用している機器なので、修復して問題なく使えるように 手動ビルド インストールしてみました。

システムクラッシュ後復帰しないPiAware

以前、PiAware 5.0へアップグレードした(パッケージ版)、初代Raspberry Piで運用しているADB-Sサイトに対して、メールでFeeder Offlineの警告通知を受け、Flight Awareのマイページで状況を確認するも、やはりオフラインのまま。

図1.マイADS-Bページもオフライン警告

図1.マイADShttps://servercan.net/blog/2021/12/%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e3%82%af%e3%83%a9%e3%83%83%e3%82%b7%e3%83%a5%e3%81%97%e3%81%9f%e3%83%91%e3%83%83%e3%82%b1%e3%83%bc%e3%82%b8%e7%89%88piaware%e3%82%926-1%e3%81%b8%e6%89%8b%e5%8b%95/-Bページもオフライン警告

この機体は手の届く範囲にあるので、電源切入して強制再起動させると、一見問題なくシステムは動いているように見えて、PiAware関連は次のようなエラーが返って来てしまいます。

$ sudo piaware-status
application-specific initialization failed: missing close-brace: possible unbalanced brace in comment
Can't find a usable itcl.tcl in the following directories:
    /usr/share/tcltk/itcl3.4 /usr/bin/../lib/itcl3.4 /usr/bin/../library /usr/bin/../../library /usr/bin/../../itcl/library /usr/bin/../../../itcl/library
This probably means that Itcl/Tcl weren't installed properly.
If you know where the Itcl library directory was installed,
you can set the environment variable ITCL_LIBRARY to point
to the library directory.
    while executing
"error $msg"
    (procedure "_find_init" line 49)
    invoked from within
"_find_init"
    (in namespace eval "::itcl" script line 52)
    invoked from within
"namespace eval ::itcl {
    proc _find_init {} {
        global env tcl_library
        variable library
        variable version
        rename _find..."
    invoked from within
"load /usr/lib/arm-linux-gnueabihf/libitcl3.4.so.1 Itcl"
    ("package ifneeded Itcl 3.4" script)
    invoked from within
"package require Itcl"
    (file "/usr/lib/piaware_packages/piaware.tcl" line 10)
    invoked from within
"source /usr/lib/piaware_packages/piaware.tcl"
    ("package ifneeded piaware 1.0" script)
    invoked from within
"package require piaware"
    (file "/usr/lib/piaware-status/main.tcl" line 18)
    invoked from within
"source /usr/lib/piaware-status/main.tcl"
    ("uplevel" body line 1)
    invoked from within
"uplevel #0 source $path"
    from tcllauncher running "piaware-status"

$ piaware-config --showall
- 略 -

一度アンインストールしてから、6.1現行版をaptパッケージマネージャでインストールしてみますが、不具合は解消しません。

$ sudo apt update
$ sudo apt remove piaware tcl tcllib
$ sudo apt autoremove
$ sudo apt install piaware

 

PiAwareパッケージビルドスクリプト

debパッケージをビルドするために必要な依存パッケージ類をインストールの上、FlightAware公式GitHubで公開されているPiAwareのソースファイルからビルド、インストールしてくれるシェルスクリプトが有志により公開されています(パッケージ版PiAware専用で、SDイメージ版への適用は絶対に不可)。

Piaware 6 (or latest) with Adaptive Gain Control The scripts below have been tested to successfully built & install piaware, dump1090-fa, dump978-fa, and piaware-web on following: (1) PC x86_64: Ubuntu 20 amd 64, Debian 10 amd64, Debian 11 amd64, Kali 2021 amd64 (2) RPi Models 2, 3 & 4: Raspbian Buster (32-bit and 64-bit) (3) OrangePI PC: Armbian Buster (4) Raspberry Pi Desktop for PC ( Debian Buster with Raspberry Pi Desktop) (5) PC x86_64: Arch Linux amd64 (Click Here)   CAU…
Piaware ver 6 with Adaptive Gain Control – Install it on x86_64 Machines with… – FlightAware Discussions

Raspberry Pi上に適当な作業フォルダを作成し、その中でバッチスクリプトをコピペで実行するだけで簡単なのですが、がっつりビルドするので非力な初代Raspberry Piでは1時間程度かかりました。

$ mkdir Piaware6
$ cd Piaware6
$ sudo bash -c "$(wget -O - https://raw.githubusercontent.com/abcd567a/piaware-ubuntu20-amd64/master/piaware.sh)"
- 略 -
dpkg-buildpackage: info: source package piaware
dpkg-buildpackage: info: source version 6.1dpkg-buildpackage: info: source distribution stable
dpkg-buildpackage: info: source changed by Oliver Jowett <oliver.jowett@flightaware.com>
dpkg-buildpackage: info: host architecture armhf
 dpkg-source --before-build .
 debian/rules clean
dh clean --with=systemd
"my" variable $full_sequence masks earlier declaration in same scope at /usr/share/perl5/Debian/Debhelper/SequencerUtil.pm line 456.
Unrecognized character \xE5; marked by <-- HERE after quenceStat<-- HERE near column 50 at /usr/share/perl5/Debian/Debhelper/SequencerUtil.pm line 457.
Compilation failed in require at /usr/share/perl5/Debian/Debhelper/Sequence.pm line 12.
BEGIN failed--compilation aborted at /usr/share/perl5/Debian/Debhelper/Sequence.pm line 14.
Compilation failed in require at /usr/bin/dh line 16.
BEGIN failed--compilation aborted at /usr/bin/dh line 16.
make: *** [debian/rules:95: clean] Error 255
dpkg-buildpackage: error: debian/rules clean subprocess returned exit status 2
grep: debian/piaware/DEBIAN/control: No such file or directory
Installing piaware package
dpkg: error: cannot access archive 'piaware__*.deb': No such file or directory
Synchronizing state of piaware.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable piaware

PIAWARE INSTALLATION COMPLETED 

If you already have  feeder-id, please configure piaware with it 
Feeder Id is available on this address while loggedin: 
    https://flightaware.com/adsb/stats/user/ 

    sudo piaware-config feeder-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 
    sudo piaware-config allow-manual-updates yes 
    sudo piaware-config allow-auto-updates yes 
    sudo systemctl restart piaware 

If you dont already have a feeder-id, please go to Flightaware Claim page while loggedin 
    https://flightaware.com/adsb/piaware/claim

スクリプトは完走したものの、エラーハンドリングなどはされていないので、途中エラーでコケても構わず最後まで走り切るようになっています。上記の実行出力のうち、

"my" variable $full_sequence masks earlier declaration in same scope at /usr/share/perl5/Debian/Debhelper/SequencerUtil.pm line 456.
Unrecognized character \xE5; marked by <-- HERE after quenceStat<-- HERE near column 50 at /usr/share/perl5/Debian/Debhelper/SequencerUtil.pm line 457.

と指摘されているところで、当該ファイルを開いてみると化け文字になっている部分がありました。始めのうちは正常なファイルを探して手作業で修正していましたが、次々と見つかる同様のエラーに完走の見込みが立たない状況に。

 

次回起動時に強制fsck

このようにビルドの過程で破損ファイルが多く見つかることや、コマンド入力履歴

.bash_history

がセッション終了後に追記されないことから一旦ビルドを中断し、ファイルシステムの破損を疑って次回起動時の強制チェックを設定してみます。

まず、再起動時に

fsck

を強制する次のコマンドを入力して再起動するも、どうも

fsck

 を実行せずに通常起動してしまう模様。

$ sudo touch /forcefsck

そこで起動オプションを記述する

/boot/cmdline.txt

に次のオプションを追記して(長くても改行入れず一行で)、再起動させました。

fsck.mode=force fsck.repair=yes

このオプションを有効にした状態では起動にだいぶ時間が掛かったので

fsck

 してくれたようです。チェック後は少なくとも

fsck.mode=force

を消さないと、起動の度に

fsck

 が走ることになり、時間が掛かるので注意が必要です。

 

次のページでは手動でのパッケージビルドで引き続き破損ファイルをこつこつ潰し、遂には復帰するPiAwareの新機能アダプティブゲインをチェックしてみます。

 

投稿 システムクラッシュしたパッケージ版PiAwareを6.1へ手動ビルドインストールFun Scripting 2.0 に最初に表示されました。