カスタムOpenWRTファームウェアを構築する

少し前まで、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つの変数も指定できます。



再利用を容易にするために、make_image.shスクリプトを作成し、必要な変数値でmake imageを呼び出します。

#!/bin/bash make image PROFILE="Broadcom-b43" PACKAGES="kmod-b43 kmod-b43legacy -wpad-mini wpad ip iptables-mod-conntrack-extra ntpclient miniupnpd openvpn ddns-scripts nano" FILES="files/"
      
      





ファームウェアイメージにファイルを追加する機能は非常に便利であることがわかりました。 すべての新規および変更されたファイルが/ overlayにあるという事実を利用して、そのようなファイルをデバイスから抽出するbackup.shスクリプトを作成しました。

 #!/bin/bash DATE=`date +%Y-%m-%dT%H:%M:%S` BACKUP="backup-$DATE.tar.gz" ROUTER=172.22.222.1 BASEDIR=`dirname $0` FILELIST="etc/" ssh root@$ROUTER tar -czf /tmp/$BACKUP -C /overlay -X /etc/backup_exclude $FILELIST scp root@$ROUTER:/tmp/$BACKUP $BASEDIR/backup/$BACKUP
      
      





/ overlayのMETA_ *ファイルはmini_foファイルシステムのユーティリティファイルであり、 除外する必要があります。 ファイルを除外するためにbusyboxに組み込まれたtarアーカイバは-Xオプションのみをサポートしているため、次の内容でルーターに/ etc / backup_excludeファイルを作成する必要があります。

 META_*
      
      





スクリプトと同じディレクトリに、アーカイブが保存されるバックアップサブディレクトリを作成します。



FILES変数によって参照されるディレクトリに新しいファイルと変更されたファイルを配置し、サブディレクトリ構造を保持します。 make_image.shスクリプトを実行し、必要なすべてのソフトウェアが含まれるbinディレクトリに事前設定されたファームウェアを取得します。



All Articles