初代 Raspberry Pi で動く PiAware がシステムクラッシュ。破損ファイルが複数ある中、通常ならば新しいSDカードでのシステム再構築がセオリーなのですが、他にも様々なタスクを運用している機器なので、修復して問題なく使えるように 手動ビルド インストールしてみました。
システムクラッシュ後復帰しないPiAware
以前、PiAware 5.0へアップグレードした(パッケージ版)、初代Raspberry Piで運用しているADB-Sサイトに対して、メールでFeeder Offlineの警告通知を受け、Flight Awareのマイページで状況を確認するも、やはりオフラインのまま。
この機体は手の届く範囲にあるので、電源切入して強制再起動させると、一見問題なくシステムは動いているように見えて、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 に最初に表示されました。