Docker上でOpenWrtのビルドを行う。

先日、自宅ラック勉強会に参加しました。しかも珍しいOpenWrtについての勉強会です。
自宅ラック勉強会 #4.0 2015 ダンボー、OpenWRT、SoftEther、さぁハックの時間です。
家庭用ルーターを中心としてOpenWrtについてアレコレ、なかなか濃い勉強会になりました。

その際、OpenWrtのビルドを行う必要があったのですが、どうにもビルド環境を作るのが苦手なので、当初はOpenWrt Buildroot環境が整った既存のDockerイメージ(noonien/openwrt-buildroot – Docker Hub)を使うことにしました。

が、問題もあって、OpenWrt Barrier Breaker 14.07用であったり、Dockerfileのベースイメージであるubuntu:14.10がLTSではないためにapt-getしてもリポジトリが無くなっていました。

そこで、どうせなら自分用にDockerfileを作ってみようと思い立ち、試行錯誤しながら作成しました。勉強会後に手直ししています。
falms/docker-openwrt-buildroot – GitHub
安定志向のため、masterではなく15.05ブランチを使っていますので、PLANEX DB-WRT01のサポートは入っていませんのでご注意ください。
SoftEther VPNもインストールする想定であったため、el1nさん作成のOpenWRT-package-softetherもデフォルトで入れてみました。

勉強会では、持参したMacBook Air Mid 2012に入れておいたDocker Toolbox上でビルドを行いました。
ローカルに作成したDockerfileをもとにdocker build後、docker runして、あとは通常のOpenWrtビルドと同様です。

今から実施するのであれば、以下のような手順でしょうか。

git clone https://github.com/falms/docker-openwrt-buildroot.git
cd docker-openwrt-buildroot
docker build --tag openwrt-buildroot .
docker run -it openwrt-buildroot sudo -iu openwrt bash

ビルド時は時間がかかりますが、これでDockerコンテナが立ち上がるはずです。

cd openwrt
./scripts/feeds update
./scripts/feeds install luci
./scripts/feeds install softethervpn
make defconfig
make prereq
make menuconfig

立ち上がったメニューでTarget SystemやSubtargetなど指定し、softethervpnパッケージにチェックを入れ、Exit時にSaveします。

make -j2

適宜-j2の部分はCPUコア数に応じて変更するとして、後はビルドが完了まで待つのみ。1時間くらいかかります。

今回はDocker Toolbox上で行いましたが、Docker Toolboxで使われるVirtualBoxの仮想マシンのスペックが低めのため、割り当てコア数はデフォルトの1から2に変更しておきました。メモリも余裕があるなら、4GBくらい割り当てておいた方がよさそうでした。

勉強会ではローカルのMacBook Airでビルド中に、VPSでも同じDockerfileを使ってビルドを実行させていたのですが、VPSは1GBしかメモリがなかったため、ビルド途中にコケてしまい、何度再開しても進まなくなってしまいました。

こんな感じで、(CPUとメモリがあるDocker環境なら)どこでもOpenWrt Chaos Calmer 15.05をビルドできる環境ができました。オーバーヘッドがあるとはいえ、Dockerはとても便利ですね。

コメントを残す

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