[technology][OpenWrt] EXTROOT化してたおかげで助かりました
OpenWrtネタです。
日本でOpenWrtユーザーってマジな話、何人くらい居るんでしょうね?
100人オーダー?1,000人オーダー?なんとなく10,000人とかは居ない気がするんですが...
それはさておき、一昨日の夜の話です。
自分はバッファローのBHR-4GRVをOpenWrt化して、L2SW兼Proxyサーバーとして使っています。
ちょっとUbuntu PCとラズパイ使ってLinuxのネットワーク設定の実験をしていて、それに伴いBHR-4GRVのVLAN関連の設定を変更。
軽い気持ちでエイヤ!っとやったんですが、想定した通りに動かない...どころかIP unreachableになって、Proxyとかssh接続とか使えない状態になってしまいました。
内蔵されているHWスイッチは生きていて、単なるL2SWとしては動いていたのですが、ssh接続出来ないので設定をロールバック出来ない。
基盤からシリアルの引き出しとかもやっていないので、ああ、これはもう設定初期化して全部設定やり直すしか無いかなと一瞬諦め。(OpenWrtはboot中のとあるタイミングでAPSボタン等を長押しするとfailsafe modeになり、そこから設定の初期化等を実行できます)
しかし良く良く考えると、うちのBHR-4GRVはEXTROOT化していたのでした。
EXTROOT化とはUSBをサポートしているOpenWrt搭載機にUSBメモリを挿して、その上にRootファイルシステムを作る事です。
OpenWrtはラズパイ等にもインストール出来ますが、多くの場合flashメモリの容量が少ない市販Wi-Fiルーター(BHR-4GRVだと8MB、安い機種だと4MBのものも多かった。最近の機種はどうなんだろう?)にインストールする事が多く、基本構成はインストールできても追加パッケージを少し足しただけでflashメモリの容量がいっぱいになります。
OpenWrt自体は普通のLinuxディストリビューションに近く、ストレージ容量があればopkgコマンド使って公式リポジトリから追加パッケージをがんがんインストール可能でCPUとRAMの許す範囲でたいていのLinux用オープンソースソフトウェアが稼働します。メモリ(RAM)が使用量 数100M〜GBオーダーなものはもちろん無理ですが、ネットワーク関係のパッケージ等はだいたいなんとかなります。
そこでUSBメモリ上にExt4ファイルシステムを構築して、rootファイルシステムをコピーし、bootの早い段階でUSBメモリ上のExt4ファイルシステムをマウントしてrootファイルシステムとして使う仕組みになっています。
rootファイルシステムがUSBメモリ上にあるなら、別のLinuxマシンに挿してマウントすれば簡単に設定をロールバックできるじゃん!!という考えて見れば至極当たり前の事に気づき、速攻で環境の修復に成功しました。
OpenWrtを載せるHWって、上述の通り、VGA等のIFが無く、シリアル等も無い場合が多いので、仮にHW内蔵のストレージ容量が十分にあったとしてもUSBが使えるならEXTROOT化がお勧め。
例えばflashメモリが32MBとか64MBとかあれば、普通のWi-Fiルーターの機能の範囲で使うには概ね十分なんですけど、設定ミスってネットワークからアクセス出来なくなり、事実上の文鎮化した際にEXTROOT化してあれば復旧処理がめちゃ容易だよ..という割としょうも無い気づきでした。
EXTROOT化の手順は弊ブログの下記エントリ(本題はOpenWrtのアップグレード手順)に含まれています。
なおOpenWrtのfailsafeモードについてはこちらの公式サイト参照。
https://openwrt.org/docs/guide-user/troubleshooting/failsafe_and_factory_reset