docker を使うと 簡単にOS環境を準備できるので、比較的楽に imagebuilder 環境を作ることができます。
今度は OpenWrt Projectが配布している docker imageを利用する方法を紹介します。
docker の準備
Docker IDの準備
Dockerで作成されたコンテナイメージの集積所として公式のDocker Hubがあります。
Linuxディストリビューションのパッケージリポジトリのようなものです。
TAGの確認
Docker Hubには各Version/targetごとのimagebuilder Docker Imageが置いてあり、それぞれTAG付けされて管理されています。
このDocker image には最初からimagebuilder自身がインストールされています。加えて動作に必要なLibraly、pkgなど(Linux Kernel以外)が含まれています。
例)
ath79 generic Targetの Version 19.07.1 であれば ath79-generic-19.07.1
MT7621 で Version 18.06.7 であれば ramips-mt7621-18.06.7 になります。
docker image ダウンロード(pull)
Dockerの用語ではimageのダウンロードのことを pullと呼びます。。
あらかじめ構築されたimagebuilder用Docker imageをdocker hubからpullします。
以下のように実行します。
例)MT7621 で 19.07.1 の場合
docker pull openwrtorg/imagebuilder:ramips-mt7621-19.07.1
(TAGを確認したときのページにpull時のコマンドラインも記載されています)
pull した imageの確認
以下のコマンドで正常にpullできたかどうかわかります。
docker images
コンテナ起動
pullしたDocker imageを「IMAGEBUILDER」というコンテナ名で起動します。
docker run --rm -v "$(pwd)"/bin/:/home/build/openwrt/bin --name IMAGEBUILDER -it openwrtorg/imagebuilder:ramips-mt7621-19.07.1
(起動したディレクトリにbinディレクトリが作成され、それがコンテナ内OSの/home/build/openwrt/bin にマッピングされます。
つまり生成物はホストOS側のbinディレクトリ内に作成されます)
※Docker Desktop for Windows では、-v オプションでホストOS側ディレクトリにアクセスさせるためには
DockerデスクトップメニューでResources > FILE SHARING オプションを設定してください
また、$(pwd)の部分はフルパスで記載してください。
プロンプト名が
build@xxxxxx:~/openwrt$
などというように変化したら、起動したコンテナイメージ内のbashに移行しています。
OpenWrt image build
あとは 通常のimagebuilder と同様に make image でimage作成をしますが、
ホストOS側ディレクトリの関係でpermission Error が表示される場合は sudo make image で実行します。
例)
sudo make image PROFILE="wsr-600" PACKAGES="kmod-mt7603 -kmod-rt2800-pci -wpad-mini -iwinfo -kmod-usb-core \
-kmod-usb-ledtrig-usbport -kmod-usb3 -kmod-cfg80211 -hostapd-common -kmod-mac80211 -kmod-mt7603 -wireless-regdb uhttpd luci"
生成が終わったら、exit でshellを終了させると、ホストOS側に戻ります。
生成されたファームウェアはコンテナ内のホストOS側のbinディレクトリ内に残されています。
作業後の後片付け
停止したdocker コンテナの削除
- rm オプションを付けてdocker runしているため、exitした時にコンテナは削除されます。
通常は不要ですが、万が一異常終了して、コンテナが残っている場合には、以下のようにして停止・削除してください。
docker ps -a
docker stop IMAGEBUILDER
docker rm IMAGEBUILDER
docker ps -a
pullしたDocker imageが不要ならdocker rmi (IMAGEID)または docker rmi (リポジトリ名:TAG名)コマンドで削除してください。
例)
docker images
docker rmi openwrtorg/imagebuilder:ramips-mt7621-19.07.1
docker images
最終更新:2020年02月29日 12:25