5 votes

Impossible de construire un Dockerfile pour arm64 en raison d'un défaut de segmentation de libc-bin

J'obtiens l'erreur suivante lorsque j'essaie de créer un fichier Docker pour le système de gestion de l'environnement. linux/arm64 plate-forme :

#5 58.06 Processing triggers for libc-bin (2.31-11) ...
#5 58.12 qemu: uncaught target signal 11 (Segmentation fault) - core dumped
#5 58.33 Segmentation fault (core dumped)
#5 58.35 qemu: uncaught target signal 11 (Segmentation fault) - core dumped
#5 58.69 Segmentation fault (core dumped)
#5 58.70 dpkg: error processing package libc-bin (--configure):
#5 58.70  installed libc-bin package post-installation script subprocess returned error exit status 139
#5 58.70 Processing triggers for ca-certificates (20210119) ...
#5 58.87 Updating certificates in /etc/ssl/certs...
#5 71.86 0 added, 0 removed; done.
#5 71.86 Running hooks in /etc/ca-certificates/update.d...
#5 71.89 done.
#5 71.98 Errors were encountered while processing:
#5 71.98  libc-bin
#5 72.06 E: Sub-process /usr/bin/dpkg returned an error code (1)

J'ai coupé mon Dockerfile jusqu'au contenu ci-dessous :

FROM kalilinux/kali-rolling
ARG DEBIAN_FRONTEND=noninteractive
ARG TARGETPLATFORM
RUN apt update && \
    apt install wget -y

Tentative de solution n°1

La première chose qui m'est venue à l'esprit est la suivante : https://stackoverflow.com/questions/59139453/repository-is-not-signed-in-docker-build/66215465#66215465 . J'ai rencontré ce problème lors d'une installation sur un processeur ARM 32 bits, et j'ai donc essayé d'ajouter les mêmes dépendances dans ce Dockerfile, sans succès. Ces dépendances étaient :

Cependant, le problème persiste.

Tentative de solution n° 2

Je suis tombé sur https://github.com/docker/for-linux/issues/1131 et j'ai essayé d'ajouter -o APT::Immediate-Configure=0 pour obtenir mon apt install mais cela n'a pas fonctionné non plus.

Tentative de solution n° 3

Ensuite, je suis tombé sur cette réponse : https://askubuntu.com/a/1035226/269349 . Lorsque j'ai modifié mon Dockerfile pour qu'il ressemble à ceci :

FROM kalilinux/kali-rolling
ARG DEBIAN_FRONTEND=noninteractive
ARG TARGETPLATFORM
RUN apt update && \
  rm /var/cache/ldconfig/aux-cache && \
  /sbin/ldconfig && \
  apt install wget -y -o APT::Immediate-Configure=0

l'erreur suivante que j'ai commencé à recevoir est la suivante :

 => ERROR [2/2] RUN apt update &&   rm /var/cache/ldconfig/aux-cache &&   /sbin/ldconfig &&   apt install wget -y -o APT::Immediate-Configure=0                                                                                                                                                                                                                       77.8s
------
 > [2/2] RUN apt update &&   rm /var/cache/ldconfig/aux-cache &&   /sbin/ldconfig &&   apt install wget -y -o APT::Immediate-Configure=0:
#5 0.203
#5 0.204 WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
#5 0.205
#5 1.055 Get:1 http://mirrors.jevincanders.net/kali kali-rolling InRelease [30.5 kB]
#5 3.496 Get:2 http://mirrors.jevincanders.net/kali kali-rolling/non-free arm64 Packages [157 kB]
#5 4.211 Get:3 http://mirrors.jevincanders.net/kali kali-rolling/main arm64 Packages [17.5 MB]
#5 67.37 Get:4 http://mirrors.jevincanders.net/kali kali-rolling/contrib arm64 Packages [87.3 kB]
#5 71.57 Fetched 17.8 MB in 1min 11s (249 kB/s)
#5 71.57 Reading package lists...
#5 76.73 Building dependency tree...
#5 77.44 Reading state information...
#5 77.51 4 packages can be upgraded. Run 'apt list --upgradable' to see them.
#5 77.55 qemu: uncaught target signal 11 (Segmentation fault) - core dumped
#5 77.74 Segmentation fault (core dumped)
------
Dockerfile:4
--------------------
   3 |     ARG TARGETPLATFORM
   4 | >>> RUN apt update && \
   5 | >>>   rm /var/cache/ldconfig/aux-cache && \
   6 | >>>   /sbin/ldconfig && \
   7 | >>>   apt install wget -y -o APT::Immediate-Configure=0
   8 |
--------------------

Tentative de solution n° 4

J'ai essayé la réponse juste en dessous de celle de la réponse précédente (réinstallation de libc-bin), mais j'ai ensuite rencontré ce problème :

#4 25.05 Get:1 http://mirrors.jevincanders.net/kali kali-rolling/main arm64 libc-bin arm64 2.31-11 [735 kB]
#4 27.93 debconf: delaying package configuration, since apt-utils is not installed
#4 28.12 Fetched 735 kB in 2s (295 kB/s)
(Reading database ... 6748 files and directories currently installed.)
#4 28.30 Preparing to unpack .../libc-bin_2.31-11_arm64.deb ...
#4 28.32 Unpacking libc-bin (2.31-11) over (2.31-11) ...
#4 28.84 Setting up libc-bin (2.31-11) ...
#4 28.98 qemu: uncaught target signal 11 (Segmentation fault) - core dumped
#4 29.20 Segmentation fault (core dumped)
#4 29.22 qemu: uncaught target signal 11 (Segmentation fault) - core dumped
#4 29.42 Segmentation fault (core dumped)
#4 29.42 dpkg: error processing package libc-bin (--configure):
#4 29.42  installed libc-bin package post-installation script subprocess returned error exit status 139
#4 29.43 Errors were encountered while processing:
#4 29.43  libc-bin
#4 29.51 E: Sub-process /usr/bin/dpkg returned an error code (1)

Voici la commande que j'exécute : docker buildx build --platform linux/arm64 .

Toute aide serait grandement appréciée.

0voto

elboulangero Points 554

D'après ce rapport de bogue, il semble s'agir d'un bogue dans le noyau, et il devrait être résolu en mettant à jour le noyau à la dernière version : https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/1928075

Je peux reproduire ce bogue dans GitLab CI, et il semble que seule l'architecture arm64 déclenche le bug. armhf est très bien : https://gitlab.com/arnaudr/test-binfmt-misc/-/pipelines/356065926/builds

0voto

J'ai pu résoudre ce problème sur Ubuntu 20.04 en passant à la dernière version de qemu 5 en utilisant

sudo add-apt-repository ppa:jacob/virtualisation (for Ubuntu 20.04)
sudo apt-get update && sudo apt-get install qemu qemu-user qemu-user-static

0voto

alberto56 Points 101

Cette erreur m'est arrivée en exécutant ARM sur émulation en utilisant QEMU sur une machine virtuelle AMD.

Voici un exemple de commande qui fonctionne pour moi :

FROM php:7.4

# See also https://forums.linuxmint.com/viewtopic.php?p=1871690
RUN apt-get update && \
  apt-get install -y libc-bin && \
  apt-get update && \
  apt-get install -y --no-install-recommends mariadb-client git zip || true && \
  dpkg --purge --force-all libc-bin && \
  apt-get install -y --no-install-recommends mariadb-client git zip && \
  rm -rf /var/lib/apt/lists/*

0voto

MariusSiuram Points 157

Il semble y avoir des problèmes entre certaines combinaisons de version du noyau et de version de qemu.

De plus amples informations sont disponibles dans docker buildx Repo GitHub .

Il y a un commentaire qui a résolu mes problèmes :

$ docker pull tonistiigi/binfmt:latest
$ docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
$ docker run --privileged --rm tonistiigi/binfmt --install all)

Ne sautez pas le --uninstall marche !

Cette étape a résolu mon problème, qui semble correspondre à celui décrit par la question.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X