この記事では OpenWrt の更新に関して概要的な内容を記載しています。実際の手順はまた別の記事に起こす予定です。
なぜ更新運用を (真面目に) 考えなければならなかったのか
OpenWrt におけるざっくりとした更新方式
私が調べた範囲では大きく分けて以下の二つの方式に大別されます。
- アップデート
- 新規インストール&設定残し
ただ、両方の方式が全てのプラットフォームに等しく提供されているわけではありません。 例えば、私が持っているプラットフォームで言うと、x86 (ミニ PC や VMware 仮想マシン) ではアップデートは行えません。 新規インストール用のイメージしか提供されていないためです。
sysupgrade.bin という名前のファイルがアップデート用のファイルなのですが、 プラットフォームのダウンロードページに存在しない場合、できないということになります。
【アップデート用のイメージが提供されている場合 (sysupgrade.bin が提供されている)】
【アップデート用のイメージが提供されていない場合 (sysupgrade.bin が提供されていない)】
自分でインストールしたパッケージは消滅する運命
アップデート/新規インストールいずれの手法を採用したとしても自分でインストールしたパッケージは消えてなくなります。 誤解なきように伝えると、公式/非公式関係なく自分で導入したパッケージが消えるのです。
IPIP6 パッケージが消滅するとインターネットには接続できなくなる問題
以前の記事で投稿したように、私の環境では V6 プラスで固定 IP を実施するために有志が作成したモジュールをインストールしています。 cube309b.hatenablog.com
このモジュールも当然アップデートに伴って消滅していますので、設定が残っていようといまいとモジュール再インストールまでの間インターネットには接続できなくなってしまいます。 ところが、このモジュールはインターネットを含むネットワークから完全に途絶した状態では導入がかなり難しいです。(※)
※ .ipk ファイルを使ってローカルでインストールしようにも、今度は依存関係のあるモジュールもインストールが必要で。。。
これは、インターネットに接続するためのモジュールを手に入れるためにインターネットが必要という、絵にかいたような「ニワトリが先かタマゴが先か」問題なのです。
一時的に別のルーターの配下に入れてアップデートをする?
そのままやろうとするとこの方法しかありません。つまり、一時的に別のルーターにインターネット接続を行わせ、 その下でアップデートを終えたルーターを切り替えるという流れです。
- 対象機のネットワーク情報 (LAN 側のアドレスなど) を一時的なものに変更
- 一時機を設置しインターネットに接続できる環境を作成
- 対象機をアップデートし、本番の設定を復元 (LAN の情報は復元しない)
- 一時機を停止
- 対象機のネットワーク情報 (LAN 側のアドレスなど) を正式なものに変更
ルーターの機種変更等であれば動作検証のためにこのようなやり方もありでしょうが、毎回のアップデートでこんな時間をかけるわけにはいきません。
OpenWrt のインストールイメージを自分でビルドすることで解決
こうなると出来合いのインストールイメージだと問題は解決できないため、自分でインストールイメージを作る必要が発生します。 自分でインストールイメージを作る際に IPIP6 のパッケージも込みで作成すればよいということで手法を調査することになりました。
その 1:Image Builder を用いたイメージ作成
自作 PC でいう BTO に近いイメージです。Linux カーネルという基本部分はあらかじめビルドが完了しているものを使って、 上に乗せるパッケージや設定ファイルを足し引きして自分だけのイメージを作る形です。
実際にはビルド用の Linux 環境を用意して、ビルドに関連するツールをインストールした後にビルドします。 WSL の環境でも動くには動きそうですが、そもそも OpenWrt 自体 WSL でビルドすることを明確に非推奨にしているようです。
その 2:一からビルドするイメージ作成
自作 PC でいうカスタムメイド PC に近いイメージで、Linux カーネルという基本部分から全てパラメーターを決めて一から作る形になります。 設定に関しては GUI っぽいメニューもあるのでわかりやすい方ではあります。
なお、こちらの方式は CPU の性能次第でビルド時間が 30 分から数時間と延びるようなので、ビルドマシンの性能が今一つな場合、採用は難しいかもしれません。 アップデートの度にこれやるんですか?という質問の回答になるので・・・。
Image Builder の場合と同様にビルド用の Linux 環境を用意して、ビルドに関連するツールをインストールした後にビルドします。 WSL の注意事項も同じです (非推奨)。
検討を終えて
両方試した結果、私は前者の Image Builder 方式でビルドすることにしました。続く
Note |
---|
・ 当ブログは個人主催であり、ブログ中のすべての情報は個人的な観点となります。 ・ 情報については正確な内容となるよう努めますが、完全性や正確性、有用性、安全性、最新性について一切保証できかねます。 |