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 또는 유사) 또는 파일 시스템 쓰기 권한. 컨테이너가 장치에 쓸 수 없기 때문에 세 번째일 수 있다고 생각합니다.

답변4

나는 다음과 같이 이 문제를 해결했습니다.

1-스톱 lxc.

lxc stop <container-name>

2- 보안 권한을 true로 조정합니다.

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

3- 컨테이너를 다시 시작합니다.

lxc start 

관련 정보