linux-menuconfigをビルドすると、「***設定の更新中にエラーが発生しました」が発生します。

linux-menuconfigをビルドすると、「***設定の更新中にエラーが発生しました」が発生します。

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

これを実行make menuconfigしてBuildrootの構成を構築できます。デフォルト値をいくつか修正しました。出力は次のとおりです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

答え1

多くのデバッグの最後に、ホストシステムにフォルダをマウントすると/root/buildroot/output/問題が発生することがわかりました。このマウントを取り外すこともmake linux-menuconfig可能です。

/root/buildroot/output/build追加のデバッグにより、コンテナにホストフォルダをマウントすることが問題であることがわかりました。理由はわかりません。

答え2

Jenkinsエージェントで実行されているDockerコンテナを使用して同じ問題が発生しました。ただし、ローカルシステムでコンテナを実行してコンテナにマウントすると、問題が発生する可能性があります。私はちょうど私の経験をここに記録したいと思いました。

Dockerコンテナはに保存されたビルドデータを準備しました/home/jenkins/data。このデータへのシンボリックリンクは/home/jenkins/workspace/<ourproject>/buildroot/output/build/(コンテナにインストールされているフォルダ)に作成されます。

Jenkinsパイプラインで "customWorkspace"を使用すると、次のようにDockerコンテナに自動的にインストールされます。

$ docker run -t -d -u 1001:1001 -w /home/jenkins/workspace -v /home/jenkins/workspace:/home/jenkins/workspace:rw,z -v /home/jenkins/workspace@tmp:/home/jenkins/workspace@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** ***.***.net/***/jenkins/build-images/***-builder:latest cat

このインストールのワークスペースフォルダで作業しています/home/jenkins/workspace/(ビルドルートを確認してビルドしようとしています)。元の質問で述べたのと同じエラーが発生します。

    jenkins@cec47254b4d1:~/workspace/clip/buildroot$ cat br.log 
2022-08-11T17:43:47 >>>   Buildroot 2021.02.9 Collecting legal info
2022-08-11T17:43:47 COPYING: OK (sha256: 9755181e27175cb3510b4da8629caa406fb355a19aa8e7d55f06bf8ab33323c4)
2022-08-11T17:43:47 /usr/bin/make -j1 O=/home/jenkins/workspace/clip/buildroot/output/beme HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" syncconfig
2022-08-11T17:43:47 GEN     /home/jenkins/workspace/clip/buildroot/output/beme/Makefile
2022-08-11T17:43:47 
2022-08-11T17:43:47 *** Error during update of the configuration.
2022-08-11T17:43:47 
2022-08-11T17:43:47 make[2]: *** [Makefile:1019: syncconfig] Error 1
2022-08-11T17:43:47 make[1]: *** [Makefile:592: /home/jenkins/workspace/clip/buildroot/output/beme/build/buildroot-config/auto.conf] Error 2
2022-08-11T17:43:47 make: *** [Makefile:84: _all] Error 2

ただし、「customWorkspace」を使用せずにホストマウントフォルダで作業するのではなく、/home/jenkins/workspaceDockerコンテナファイルシステム内の同じフォルダ構造()で作業すると、すべてがうまく機能します。ホストからDockerコンテナとしてマウントされたフォルダにリンクが作成されていない場合は、準備されたデータのリンク作成が正常に機能します。

前述のように、M Y特権モードでDockerコンテナを起動してみました(args "--privileged"JenkinsfileのDockerエージェントオプションにオプションを追加)。これは私の問題を解決できませんでした。

インストールされたフォルダ内のファイルは、コンテナが起動されたのと同じユーザーID 1001のJenkinsユーザーによって所有されます。

主な問題は呼び出しですmake syncconfig

実行すると、make clean準備されたビルドデータが削除され、問題が解決します。

答え3

権限の問題のようです。ユーザー権限(chmodまたはacl)、MAC(必須アクセス制御、通常selinuxなど)、またはファイルシステムへの書き込み権限。コンテナがデバイスに書き込むことができないので、3番目になると思います。

答え4

私は次のようにこの問題を解決しました。

1-ストップlxc。

lxc stop <container-name>

2- セキュリティ権限を true に調整します。

 lxc config set <container-name> security.privileged true

3- コンテナを再起動します。

lxc start 

関連情報