0

语境

我有一个 jenkins,它为树莓派 2 构建了一个 docker 映像。它在构建过程中使用 buildx 来模拟​​ ArmV7 环境。这一直很好,直到最近我在安装 apk 包时遇到了随机错误。

Dockerfile

FROM python:3-alpine

# picam python module
ARG PICAMERA_RELEASE_ADDRESS="{private_repo}"
# Ardafruit python module
ARG ARDAFRUIT_RELEASE_URL="{private_repo}"

WORKDIR /tmp

ENV LD_LIBRARY_PATH="/opt/vc/lib"

COPY ./files /app

RUN apk add --no-cache --verbose \
        raspberrypi-libs \
        bluez \
        bluez-deprecated \
        unzip \
        git \
        glib-dev \
        gobject-introspection-dev \
        cairo-dev \
        py3-cairo \
        openssl-dev \ 
        nano \
        bash \
        alpine-sdk \
    && git clone ${PICAMERA_RELEASE_ADDRESS} \
    && cd picamera \
    && su -c "python3 setup.py install" \
    && cd /tmp/ \
    && git clone ${ARDAFRUIT_RELEASE_URL} \
    && cd Adafruit_Python_DHT \
    && su -c "python3 setup.py install --force-pi2" \
    && cd /tmp/ \
    && CFLAGS="-fcommon" pip3 install \
        btlewrap==0.0.* \
        Flask==2.* \
        waitress==2.* \
        flask-cors==3.* \
        miflora==0.* \
        colorzero==2.* \
        RPi.GPIO==0.7.* \
    && cd /tmp/ \
    && chmod +x /app/main.py \
    && chmod +x /app/healthcheck.py \
    && chmod +x /app/harden.sh \
    && apk del \
        unzip \
        git \
        glib-dev \
        gobject-introspection-dev \
        cairo-dev \
        py3-cairo \
        openssl-dev \
        nano \
        bash \
        alpine-sdk \
        libc-utils \
    && rm -rf /tmp/* \
    && sh /app/harden.sh \
    && rm -f /app/harden.sh \
    && rm -f /bin/rm

# finalize
WORKDIR /app

EXPOSE 80

ENTRYPOINT [ "python3" ]

CMD [ "/app/main.py" ]

HEALTHCHECK --interval=1m --timeout=10s \
  CMD python3 /app/healthcheck.py

构建管道

pipeline {
  environment {
    registryCredential = ''
    registryURL = ''
    scmURL = ''
    scmCredential = ''
    dockerImage = ''
    working_branch = ''
    working_dir = ''
  }
  agent any
  stages {
    stage('Cloning Git') {
      steps {
        git(
            url: scmURL,
            credentialsId: scmCredential,
            branch: working_branch
        )
      }
    }
  stage('docker login') {
      steps {
        sh '$(aws ecr get-login --no-include-email --region eu-central-1)'
      }
    }
  stage('Build Image and push it') {
    steps{
        dir(working_dir){
            sh "docker build -t $registryURL:latest --platform linux/arm/v7 --push ."
        }
      }
    }
  }
}

詹金斯输出

#7 [3/5] COPY ./files /app
#7 DONE 0.0s

#8 [4/5] RUN apk fix && apk add --no-cache --verbose         raspberrypi-libs       bluez         bluez-deprecated      unzip         git       glib-dev        gobject-introspection-dev       cairo-dev       py3-cairo       openssl-dev         nano         bash         alpine-sdk     && apk fix     && git clone https://{private_repo}     && cd picamera     && su -c "python3 setup.py install"     && cd /tmp/     && git clone https://{private_repo}     && cd Adafruit_Python_DHT     && su -c "python3 setup.py install --force-pi2"     && cd /tmp/     && CFLAGS="-fcommon" pip3 install         btlewrap==0.0.*         Flask==2.*         waitress==2.*         flask-cors==3.*         miflora==0.*         colorzero==2.*         RPi.GPIO==0.7.*     && cd /tmp/     && chmod +x /app/main.py     && chmod +x /app/healthcheck.py     && chmod +x /app/harden.sh     && apk del      unzip         git       glib-dev        gobject-introspection-dev       cairo-dev       py3-cairo       openssl-dev         nano         bash         alpine-sdk         libc-utils     && rm -rf /tmp/*     && sh /app/harden.sh     && rm -f /app/harden.sh     && rm -f /bin/rm
#8 0.337 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/armv7/APKINDEX.tar.gz

#8 1.611 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/armv7/APKINDEX.tar.gz

#8 3.302 OK: 11 MiB in 37 packages
#8 3.581 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/armv7/APKINDEX.tar.gz

#8 4.617 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/armv7/APKINDEX.tar.gz

#8 6.349 (1/130) Installing fakeroot (1.25.3-r3)
#8 6.382 (2/130) Installing openssl (1.1.1l-r0)
#8 6.465 (3/130) Installing libattr (2.5.1-r0)
#8 6.487 (4/130) Installing attr (2.5.1-r0)
#8 6.517 (5/130) Installing libacl (2.2.53-r0)
#8 6.540 (6/130) Installing tar (1.34-r0)
#8 6.632 (7/130) Installing pkgconf (1.7.4-r0)
#8 6.667 (8/130) Installing patch (2.7.6-r7)
#8 6.715 (9/130) Installing libstdc++ (10.3.1_git20210424-r2)
#8 6.894 (10/130) Installing lzip (1.22-r0)
#8 6.929 (11/130) Installing brotli-libs (1.0.9-r5)
#8 7.062 (12/130) Installing nghttp2-libs (1.43.0-r0)
#8 7.101 (13/130) Installing libcurl (7.79.1-r0)
#8 7.185 (14/130) Installing curl (7.79.1-r0)
#8 7.244 (15/130) Installing abuild (3.8.0_rc4-r0)
#8 7.285 Executing abuild-3.8.0_rc4-r0.pre-install
#8 7.296 ERROR: abuild-3.8.0_rc4-r0.pre-install: script exited with error 1
#8 7.321 (16/130) Installing binutils (2.35.2-r2)

#8 7.910 (17/130) Installing libmagic (5.40-r1)
#8 8.140 (18/130) Installing file (5.40-r1)
#8 8.162 (19/130) Installing libgomp (10.3.1_git20210424-r2)
#8 8.226 (20/130) Installing libatomic (10.3.1_git20210424-r2)
#8 8.249 (21/130) Installing libgphobos (10.3.1_git20210424-r2)

#8 8.735 (22/130) Installing gmp (6.2.1-r0)
#8 8.805 (23/130) Installing isl22 (0.22-r0)
#8 8.991 (24/130) Installing mpfr4 (4.1.0-r0)
#8 9.056 (25/130) Installing mpc1 (1.2.1-r0)
#8 9.093 (26/130) Installing gcc (10.3.1_git20210424-r2)

#8 13.99 (27/130) Installing musl-dev (1.2.2-r3)
#8 14.57 (28/130) Installing libc-dev (0.7.2-r3)
#8 14.59 (29/130) Installing g++ (10.3.1_git20210424-r2)

#8 18.44 (30/130) Installing make (4.3-r0)
#8 18.48 (31/130) Installing fortify-headers (1.1-r1)
#8 18.50 (32/130) Installing build-base (0.5-r2)
#8 18.51 (33/130) Installing pcre2 (10.36-r0)
#8 18.58 (34/130) Installing git (2.32.0-r0)

#8 19.63 (35/130) Installing alpine-sdk (1.0-r1)
#8 19.65 (36/130) Installing bash (5.1.4-r0)

#8 19.80 Executing bash-5.1.4-r0.post-install
#8 19.82 ERROR: bash-5.1.4-r0.post-install: script exited with error 1
#8 19.82 (37/130) Installing dbus-libs (1.12.20-r2)
#8 19.88 (38/130) Installing dbus (1.12.20-r2)
#8 19.93 Executing dbus-1.12.20-r2.pre-install
#8 19.94 ERROR: dbus-1.12.20-r2.pre-install: script exited with error 1
#8 19.96 Executing dbus-1.12.20-r2.post-install
#8 19.97 ERROR: dbus-1.12.20-r2.post-install: script exited with error 1
#8 19.97 (39/130) Installing libblkid (2.37.2-r0)
#8 20.04 (40/130) Installing libmount (2.37.2-r0)
#8 20.09 (41/130) Installing pcre (8.44-r0)
#8 20.15 (42/130) Installing glib (2.68.3-r0)
#8 20.46 (43/130) Installing json-c (0.15-r1)
#8 20.52 (44/130) Installing eudev-libs (3.2.10-r0)
#8 20.59 (45/130) Installing bluez (5.58-r2)

#8 20.91 (46/130) Installing bluez-deprecated (5.58-r2)
#8 21.06 (47/130) Installing libxau (1.0.9-r0)
#8 21.08 (48/130) Installing libmd (1.0.3-r0)
#8 21.11 (49/130) Installing libbsd (0.11.3-r0)
#8 21.14 (50/130) Installing libxdmcp (1.1.3-r0)
#8 21.16 (51/130) Installing libxcb (1.14-r2)
#8 21.27 (52/130) Installing libx11 (1.7.2-r0)
#8 21.57 (53/130) Installing libxrender (0.9.10-r3)
#8 21.59 (54/130) Installing libxext (1.3.4-r0)
#8 21.61 (55/130) Installing libpng (1.6.37-r1)
#8 21.65 (56/130) Installing freetype (2.10.4-r1)
#8 21.76 (57/130) Installing fontconfig (2.13.1-r4)
#8 21.86 (58/130) Installing pixman (0.40.0-r2)
#8 21.94 (59/130) Installing cairo (1.16.0-r3)

#8 22.10 (60/130) Installing cairo-tools (1.16.0-r3)
#8 22.20 (61/130) Installing expat-dev (2.4.1-r0)
#8 22.23 (62/130) Installing brotli-dev (1.0.9-r5)
#8 22.26 (63/130) Installing zlib-dev (1.2.11-r3)
#8 22.30 (64/130) Installing libpng-dev (1.6.37-r1)
#8 22.34 (65/130) Installing freetype-dev (2.10.4-r1)
#8 22.46 (66/130) Installing blkid (2.37.2-r0)
#8 22.50 (67/130) Installing libcap-ng (0.8.2-r0)
#8 22.52 (68/130) Installing setpriv (2.37.2-r0)
#8 22.55 (69/130) Installing libsmartcols (2.37.2-r0)
#8 22.60 (70/130) Installing findmnt (2.37.2-r0)
#8 22.64 (71/130) Installing mcookie (2.37.2-r0)
#8 22.67 (72/130) Installing hexdump (2.37.2-r0)
#8 22.70 (73/130) Installing lsblk (2.37.2-r0)
#8 22.75 (74/130) Installing libfdisk (2.37.2-r0)
#8 22.84 (75/130) Installing sfdisk (2.37.2-r0)
#8 22.87 (76/130) Installing cfdisk (2.37.2-r0)
#8 22.91 (77/130) Installing partx (2.37.2-r0)
#8 22.95 (78/130) Installing flock (2.37.2-r0)

#8 22.97 (79/130) Installing logger (2.37.2-r0)
#8 23.00 (80/130) Installing uuidgen (2.37.2-r0)
#8 23.02 (81/130) Installing libeconf (0.3.8-r1)
#8 23.04 (82/130) Installing util-linux (2.37.2-r0)
#8 23.37 (83/130) Installing util-linux-dev (2.37.2-r0)
#8 23.57 (84/130) Installing fontconfig-dev (2.13.1-r4)
#8 23.60 (85/130) Installing xorgproto (2021.4-r0)
#8 23.82 (86/130) Installing libxau-dev (1.0.9-r0)
#8 23.85 (87/130) Installing xcb-proto (1.14.1-r2)
#8 23.91 (88/130) Installing libxdmcp-dev (1.1.3-r0)
#8 23.93 (89/130) Installing libxcb-dev (1.14-r2)

#8 24.08 (90/130) Installing xtrans (1.4.0-r1)
#8 24.13 (91/130) Installing libx11-dev (1.7.2-r0)
#8 24.18 (92/130) Installing libxext-dev (1.3.4-r0)
#8 24.22 (93/130) Installing libxrender-dev (0.9.10-r3)
#8 24.25 (94/130) Installing pixman-dev (0.40.0-r2)
#8 24.27 (95/130) Installing util-macros (1.19.3-r0)
#8 24.30 (96/130) Installing xcb-util (0.4.0-r3)
#8 24.32 (97/130) Installing xcb-util-dev (0.4.0-r3)
#8 24.35 (98/130) Installing cairo-gobject (1.16.0-r3)
#8 24.38 (99/130) Installing mpdecimal (2.5.1-r1)
#8 24.42 (100/130) Installing python3 (3.9.5-r1)

#8 28.02 (101/130) Installing gettext-asprintf (0.21-r0)
#8 28.04 (102/130) Installing libunistring (0.9.10-r1)
#8 28.25 (103/130) Installing gettext-libs (0.21-r0)
#8 28.39 (104/130) Installing libxml2 (2.9.12-r1)
#8 28.57 (105/130) Installing gettext (0.21-r0)
#8 28.70 (106/130) Installing gettext-dev (0.21-r0)
#8 28.95 (107/130) Installing bzip2-dev (1.0.8-r1)
#8 28.97 (108/130) Installing libxml2-utils (2.9.12-r1)
#8 29.00 (109/130) Installing libgpg-error (1.42-r0)
#8 29.07 (110/130) Installing libgcrypt (1.9.4-r0)

#8 29.22 (111/130) Installing libxslt (1.1.34-r1)
#8 29.28 (112/130) Installing docbook-xml (4.5-r6)
#8 29.47 Executing docbook-xml-4.5-r6.post-install
#8 29.47 ERROR: docbook-xml-4.5-r6.post-install: script exited with error 1
#8 29.48 (113/130) Installing docbook-xsl (1.79.2-r2)

#8 30.38 Executing docbook-xsl-1.79.2-r2.post-install
#8 30.39 (114/130) Installing linux-headers (5.10.41-r0)
#8 30.39 ERROR: docbook-xsl-1.79.2-r2.post-install: script exited with error 1
#8 31.04 (115/130) Installing libffi-dev (3.3-r2)
#8 31.09 (116/130) Installing libpcre16 (8.44-r0)
#8 31.14 (117/130) Installing libpcre32 (8.44-r0)
#8 31.19 (118/130) Installing libpcrecpp (8.44-r0)
#8 31.22 (119/130) Installing pcre-dev (8.44-r0)

#8 31.40 (120/130) Installing glib-dev (2.68.3-r0)
#8 31.68 (121/130) Installing cairo-dev (1.16.0-r3)
#8 31.72 (122/130) Installing libltdl (2.4.6-r7)
#8 31.76 (123/130) Installing libtool (2.4.6-r7)
#8 31.99 (124/130) Installing gobject-introspection (1.68.0-r1)
#8 32.10 (125/130) Installing gobject-introspection-dev (1.68.0-r1)

#8 32.61 (126/130) Installing nano (5.7-r2)
#8 32.68 (127/130) Installing openssl-dev (1.1.1l-r0)
#8 32.84 (128/130) Installing py3-cairo (1.20.1-r0)
#8 32.87 (129/130) Installing raspberrypi-libs (0.20200813-r0)
#8 33.12 (130/130) Installing unzip (6.0-r9)
#8 33.19 Executing busybox-1.33.1-r6.trigger
#8 33.33 Executing dbus-1.12.20-r2.trigger

#8 33.48 Executing glib-2.68.3-r0.trigger
#8 33.66 No schema files found: doing nothing.
#8 33.75 5 errors; 167 packages, 603 dirs, 10399 files, 282 MiB

#8 ERROR: process "/dev/.buildkit_qemu_emulator /bin/sh -c apk fix && apk add --no-cache --verbose         raspberrypi-libs \t\tbluez         bluez-deprecated \t\tunzip         git \t\tglib-dev \t\tgobject-introspection-dev \t\tcairo-dev \t\tpy3-cairo \t\topenssl-dev \t\tnano         bash         alpine-sdk     && apk fix     && git clone ${PICAMERA_RELEASE_ADDRESS}     && cd picamera     && su -c \"python3 setup.py install\"     && cd /tmp/     && git clone ${ARDAFRUIT_RELEASE_URL}     && cd Adafruit_Python_DHT     && su -c \"python3 setup.py install --force-pi2\"     && cd /tmp/     && CFLAGS=\"-fcommon\" pip3 install         btlewrap==0.0.*         Flask==2.*         waitress==2.*         flask-cors==3.*         miflora==0.*         colorzero==2.*         RPi.GPIO==0.7.*     && cd /tmp/     && chmod +x /app/main.py     && chmod +x /app/healthcheck.py     && chmod +x /app/harden.sh     && apk del \t\tunzip         git \t\tglib-dev \t\tgobject-introspection-dev \t\tcairo-dev \t\tpy3-cairo \t\topenssl-dev \t\tnano         bash         alpine-sdk         libc-utils     && rm -rf /tmp/*     && sh /app/harden.sh     && rm -f /app/harden.sh     && rm -f /bin/rm" did not complete successfully: exit code: 5

如您所见,在安装 abuild、bash、dbus、docbook-xml 和 docbook-xsl 时出现错误,但这些错误并不一致,在运行之前它只是 docbook-xsl(唯一一致的错误)在运行之后, abuild 和 dbus 安装成功。

我不确定是什么导致了问题,或者如何获取有关错误的更多信息。当然,直接在树莓派上运行构建是可行的,因此错误似乎位于多架构配置中的某个位置,但我不确定会发生什么变化。

4

1 回答 1

1

好的,看起来我在这里找到了我的解决方案: https ://gitlab.alpinelinux.org/alpine/aports/-/issues/12406

来自莱尔富兰克林的引述:

尝试从 AMD64 主机构建跨平台 ARM64 docker 映像时遇到此错误。但是,docker run --rm --privileged linuxkit/binfmt:v0.8 or update-binfmts --enable在运行构建之前运行似乎可以避免该问题。我的理解 Docker 将尝试使用上游 QEMU,如果它已安装并注册到内核,否则 Docker 将回退到使用 QEMU 的内置分叉版本。上面的构建错误只出现在分叉的 QEMU 中。

因此,如果我再次遇到错误,我可能会添加docker run --rm --privileged linuxkit/binfmt:v0.8 && update-binfmts --enable到我的管道文件中,现在运行它一旦解决了问题。

于 2021-11-22T13:28:13.993 回答