OpenWrtのBusyBoxアプレットが一部消えているのを修復

公開

NanoPi R2S上で動かしている OpenWrt のDynamic DNSサービスが動かなくなってしまいました。原因は BusyBox の アプレット が一部 消え てしまい、grepコマンドが使えなくなったためと分かり、パッケージファイルをダウンロードして手動で修復しました。

DDNSサービスが動かない

自宅のセカンダリルータ FriendlyElec NanoPi R2S OpenWrtで設定しているはずのDynamic DNSサービスが数日コケたままになっていました。

図1.DDNS Service Not Running

図1.DDNS Service Not Running

システム再起動後、自動起動に失敗していることはよくあるも、今回は手動起動もできないのでログを確認すると、

 

grepがいないエラー

このログだけではよく分からないので、DDNSスクリプトを直接動かしてみてその原因が判明。 grep が使えません。

そう言えば、ターミナルログイン時にも、同じエラーが挙がっていました。

 

BusyBoxパッケージの再インストールは怖い

OpenWrtにおける grep はBusyBoxのアプレットであり、そのBusyBoxはOpenWrtの基本パッケージの一つに当たるため、これを再インストールしようとすると次のような警告を受けてしまいます。

インストール前のアンインストール後、インストール作業が正しく実行されるか疑わしいことから、パッケージマネージャによる再インストールは断念。

 

ダウンロードしたパッケージから手作業で修復

また、OpenWrtに入っているBusyBoxはかなりミニマム仕様でビルドしてあるのか、サポートされるコマンド一覧が得られないほか、アプレットのシンボリック・リンクを生成するオプションも実装されていません。

そこで、レポジトリから直接パッケージをダウンロードして、中身を確認してみます。

BusyBoxは base レポジトリに収録されており、そのURLはOPKG Configurationで得られます。

図2.OpenWrt OPKG Configuration

図2.OpenWrt OPKG Configuration

レポジトリURLをブラウザで開いて、BosyBoxの ipk パッケージファイルをUbuntuデスクトップPCにダウンロード。

図3.OpenWrt Baseレポジトリページ

図3.OpenWrt Baseレポジトリページ

ダウンロードした ipk ファイルは単なる圧縮ファイルなので、アーカイブマネージャでその中にある data.tar.gz を開きます。

図4.パッケージファイルの中身

図4.パッケージファイルの中身

その ./bin の中に、BusyBoxとそのアプレット群のシンボリック・リンクが揃っているので、これをNanoPi R2Sと比較。

図5.data.tar.gzの中身

図5.data.tar.gzの中身



消えてしまっているシンボリック・リンクは、次の2つであることが判明。

これをネットワーク越しに scp でコピーするだけと思ったら、BusyBoxバイナリがシンボリック・リンク名でコピーされてしまいました。

ここまできたら、もう ln コマンドでシンボリック・リンクを貼り直せば済むのでしょうが、シンボリック・リンクをシンボリック・リンクのままコピーするにはどうすればいいのか知りたくて、こちらのフォーラム回答に載っていたワンライナーを試してみました。

NanoPi R2S側には、シンボリック・リンクのままコピーされました。

タイムスタンプが他と異なるのが気持ち悪いものの、シンボリック・リンクのタイムスタンプは touch で触れないことや、解凍時にタイムスタンプを保持する tar -p オプションが未サポートなことから、悪あがきはここまで。

最後に、 grep が使えることを確認。

コケていたDDNSサービスも、正常に動作するようになりました。

図6.DDNS Service Running

図6.DDNS Service Running

 

そもそも、BusyBoxアプレットの一部リンクが消えてしまったのは、おそらくNanoPi R2Sのシステムが入ったSDカードメディアがそろそろ寿命なのかと。以前にもファイルシステム障害に見舞われたこともあるので、メディアを入れ替えるつもりです。

 

created by Rinker
¥8,990 (2024/04/30 02:31:09時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA