x86システム上での効率的なARMコンテナビルド
課題
より高速な開発のために、AXCF2152またはAXCF1152向けのARMベースのコンテナをx86ハードウェア上で作成したいと考えています。このために、通常のPC上で実行されるDebianまたはUbuntuベースの仮想マシンを使用します。
エミュレーターが必要
x86システム上でARMバイナリコードを実行するには、それを可能にするエミュレーターが必要です。
QEMUは、ARMバイナリコードをエミュレートし、x86向けにコンパイルできる数少ないハイパーバイザーの1つです。ホストシステムにQEMUをインストールし、エミュレーターを有効化するだけで済みます。UbuntuまたはDebianへのQEMUインストール:
apt-get update && apt-get install -y --no-install-recommends qemu-user-static binfmt-support update-binfmts --enable qemu-arm update-binfmts --display qemu-arm
使用例
QEMUを使用するには、コンテナに拡張、つまりバイナリ/usr/bin/qemu-arm-staticが必要です。コンテナでこれを使用する方法はいくつかあります。
拡張が一時的にのみ必要で、ローカルに存在する場合、単純にコンテナに渡せます。必要なバイナリをコンテナにマウントします。
docker run -it --restart always \ -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static \ arm32v7/debian /bin/sh
これによりコンテナが起動し、コンテナ内のシェルに移動します。必要な変更をすべて行えます。変更は後でcommitでイメージに転送できます。
docker commit ...
コンテナビルドの場合、バイナリがコンテナ内に存在する必要があります。これには2つの方法があります。
1. バイナリがすでに利用可能。Docker Hubにはこのためのプレファブリケートイメージがあります。https://hub.docker.com/u/multiarch/
2. バイナリをコンテナイメージに追加。Dockerfileの例:
From debian:armhf COPY qemu-arm-static /usr/bin/qemu-arm-static RUN .....
COPY行は、FROMの直後の2番目のコマンドとして直接記述する必要があります。これはすべてのビルドツールで機能します。
1つのコンテナですべてに対応
AXCF3152にQEMU拡張をインストールすると、同じコンテナを両方のシステム(x86とARM)で使用できます。パフォーマンスについては十分なテストが必要です。
産業技術