Dockerを使用してBuildrootでLinuxカーネルをビルドしようとしています。簡単なDockerイメージを作成しました。
_FROM debian:7
MAINTAINER OrangeTux
RUN apt-get update && \
apt-get install -y \
build-essential \
bash \
bc \
binutils \
build-essential \
bzip2 \
cpio \
g++ \
gcc \
git \
gzip \
make \
libncurses5-dev \
patch \
Perl \
python \
rsync \
sed \
tar \
unzip \
wget
WORKDIR /root
RUN git clone git://git.buildroot.net/buildroot
WORKDIR /root/buildroot
CMD ["/bin/bash"]
_
コンテナが停止したときに_dl/
_と_output/build/
_を保持したいので、毎回すべての依存関係をダウンロードしてコンパイルする必要はありません。ホストにビルド製品も必要です。したがって、私は次のようにコンテナを開始します。
$ docker run -ti -v $(pwd)/dl:/root/buildroot/dl -v \ $(pwd)/output/build:/root/buildroot/output/build -v \ $(pwd)/output/images:/root/buildroot/output/images orangetux/buildroot
Buildrootの構成をビルドする_make menuconfig
_を実行できます。デフォルトにいくつか変更を加えました。 _make savedefconfig
_の出力は次のとおりです。
_BR2_arm=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_DEFCONFIG="at91_dt"
_
次のステップは、_linux-menuconfig
_をビルドすることです。このアクションは失敗し、何が問題になっているのかわかりません。
_ $ make linux-menuconfig
/usr/bin/make -j1 HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" silentoldconfig
make[1]: Entering directory `/root/buildroot'
BR2_DEFCONFIG='' KCONFIG_AUTOCONFIG=/root/buildroot/output/build/buildroot-config/auto.conf KCONFIG_AUTOHEADER=/root/buildroot/output/build/buildroot-config/autoconf.h KCONFIG_TRISTATE=/root/buildroot/output/build/buildroot-config/tristate.config BR2_CONFIG=/root/buildroot/.config BR2_EXTERNAL=support/dummy-external SKIP_LEGACY= /root/buildroot/output/build/buildroot-config/conf --silentoldconfig Config.in
*** Error during update of the configuration.
make[1]: *** [silentoldconfig] Error 1
make[1]: Leaving directory `/root/buildroot'
make: *** [/root/buildroot/output/build/buildroot-config/auto.conf] Error 2
_
ファイル_/root/buildroot/output/build/buildroot-config/auto.conf
_は存在しません。
ファイルが存在しないのはなぜですか?_linux-menuconfig
_をビルドするにはどうすればよいですか?
徹底的なデバッグの結果、ホストシステムの/root/buildroot/output/
にフォルダをマウントすると問題が発生することがわかりました。このマウントを取り外すと、make linux-menuconfig
が可能になります。
さらにデバッグすると、コンテナの/root/buildroot/output/build
にホストフォルダをマウントすることが問題であることが明らかになりました。理由はわかりません。
これは権限の問題のように聞こえます。ユーザー権限(chmodまたはacl)、MAC(強制アクセス制御、多くの場合selinuxなど)またはファイルシステムの書き込み権限のいずれか。コンテナがデバイスに書き込めないという点で、おそらく3番目だと思います。
私はそれを次のように解決しました:
1-lxcを停止します。
lxc stop <container-name>
2-特権のセキュリティをtrueに調整します。
lxc config set <container-name> security.privileged true
3-コンテナを再起動します。
lxc start