少し前まで、D-Link DIR-320ルーターでのOpenVPNサーバーの台頭に戸惑いました。 しかし、OpenWRTファームウェアをインストールした後、ルーターの4メガバイトUSBフラッシュドライブにOpenVPNをインストールするための十分なスペースがないことが判明しました。 状況から抜け出す方法は、
Image Generatorを使用して独自のバージョンのファームウェアを組み立てることで、これにより、同じパッケージセットでより小さなファームウェアを取得できました。
アセンブリの説明を続ける前に、ルートOpenWRTファイルシステムの配置について少し説明します。 これは、他の2つのファイルシステムを透過的に統合するmini_foファイルシステムです。不変のSquashFSが/ romにマウントされ、可変のJFFS2が/オーバーレイにマウントされます。 ファームウェアのインストール後に作成または変更されたすべてのファイルは、/ overlayにあります。 元々ファームウェアにあったファイルを削除するとき、mini_foは単にそれらを削除済みとしてマークし、ファイル自体は/ romに残り、スペースを占有し続けます。 SquashFSとJFFS2はどちらも圧縮を使用しますが、SquashFSはより高い圧縮率を提供するため、必要なすべてのパッケージを一度に/ romに入れるとファームウェアが小さくなります。 ファームウェアから不要なパッケージを除外することにより、フラッシュドライブ上の貴重なスペースを節約することもできます。
カスタムファームウェアをビルドするには、ImageBuilderアーカイブをダウンロードする必要があります。 私のルーターにはアーカイブのi686バージョンしかありませんでしたが、64ビットGentooに問題はありませんでした。 ファームウェアに接続されているすべてのものについて、〜/ dir-320ディレクトリを作成し、その中に使用されているOpenWRTファームウェアのバージョンに対応する10.03ディレクトリを作成し、ImageBuilderアーカイブを解凍しました。 最小限のイメージは
make imageコマンドを使用し
て構築され、それに加えて3つの変数も指定できます。
- PROFILEは、ファームウェアに含める追加パッケージのリストを定義するアセンブリプロファイルです。 プロファイルのリストは、 make infoを使用して取得できます。 何らかの理由で、変数は私に影響を与えず、ルーターに必要なパッケージのリストを手動で指定する必要がありました。
- パッケージ-追加または削除するパッケージのリスト。 削除する必要のあるパッケージの名前には接頭辞が付きます。 アセンブリ中に、パッケージの依存関係が計算され、これもファームウェアに追加されます。
- ファイル-ファームウェアに含めるための追加ファイルがあるディレクトリへのパス。
再利用を容易にするために、make_image.shスクリプトを作成し、必要な変数値で
make imageを呼び出します。
ファームウェアイメージにファイルを追加する機能は非常に便利であることがわかりました。 すべての新規および変更されたファイルが/ overlayにあるという事実を利用して、そのようなファイルをデバイスから抽出するbackup.shスクリプトを作成しました。
/ overlayの
META_ *ファイルは
mini_foファイルシステムのユーティリティファイルであり、
除外する必要があります。 ファイルを除外するためにbusyboxに組み込まれたtarアーカイバは-Xオプションのみをサポートしているため、次の内容でルーターに/ etc / backup_excludeファイルを作成する必要があります。
META_*
スクリプトと同じディレクトリに、アーカイブが保存されるバックアップサブディレクトリを作成します。
FILES変数によって参照されるディレクトリに新しいファイルと変更されたファイルを配置し、サブディレクトリ構造を保持します。 make_image.shスクリプトを実行し、必要なすべてのソフトウェアが含まれるbinディレクトリに事前設定されたファームウェアを取得します。