From 0485295b550d68ffb2f7fb807c3edf143f3b5589 Mon Sep 17 00:00:00 2001 From: Quentin Date: Tue, 11 Apr 2023 10:20:46 +0000 Subject: [PATCH] =?UTF-8?q?Update=20Article=20=E2=80=9C2023-04-11-fabrique?= =?UTF-8?q?r-des-conteneurs-l=C3=A9gers-depuis-une-ci-cd=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...-des-conteneurs-légers-depuis-une-ci-cd.md | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/_posts/2023-04-11-fabriquer-des-conteneurs-légers-depuis-une-ci-cd.md b/_posts/2023-04-11-fabriquer-des-conteneurs-légers-depuis-une-ci-cd.md index 0d3bfb9..6ee4abd 100644 --- a/_posts/2023-04-11-fabriquer-des-conteneurs-légers-depuis-une-ci-cd.md +++ b/_posts/2023-04-11-fabriquer-des-conteneurs-légers-depuis-une-ci-cd.md @@ -86,11 +86,43 @@ nix build .#packages.i686-linux.docker.albatros -o albatros.386.tar.gz Dans le monde des conteneurs, une image multiarch est juste une indirection, un fichier qui contient une liste de manifest avec des tags pour leur OS et leur architecture. Il faut donc créer un fichier qui liste le manifest de chacune de nos 4 images. -Problème : aujourd'hui il n'y a pas vraiment d'outils clé en main. Typiquement, [une issue sur skopeo](https://github.com/containers/skopeo/issues/1136) traine depuis 3 ans maintenant (2020) sans qu'elle n'ait jamais été résolue. On va essayer de bidouiller un truc de notre côté. +_Problème : aujourd'hui il n'y a pas vraiment d'outils clé en main. Typiquement,_ [_une issue sur skopeo_](https://github.com/containers/skopeo/issues/1136) _traine depuis 3 ans maintenant (2020) sans qu'elle n'ait jamais été résolue. On va essayer de bidouiller un truc de notre côté._ + +On va extraire chacun de ces fichiers sous le format `directory` de skopeo, qui est un format non stardisé. + +_La spécification OCI définit un format d'image sous forme de dossier avec_ [_une spécification en bonne et due forme_](https://github.com/opencontainers/image-spec/blob/main/image-layout.md)_. Cette spécification organise les fichiers différement de skopeo. Dans un monde idéal, il faudrait utiliser ce format qui n'a pas l'air très différent, mais je ne le connais pas et n'ai pas le temps de l'explorer._ ```bash mkdir -p /tmp/albatros -skopeo --insecure-policy copy docker-archive:albatros.amd64.tar.gz dir:/tmp/albatros/amd64 +skopeo --insecure-policy copy docker-archive:albatros.amd64.tar.gz oci:/tmp/albatros/amd64 +skopeo --insecure-policy copy docker-archive:albatros.arm64.tar.gz ocui:/tmp/albatros/arm64 +skopeo --insecure-policy copy docker-archive:albatros.arm.tar.gz dir:/tmp/albatros/arm +skopeo --insecure-policy copy docker-archive:albatros.386.tar.gz dir:/tmp/albatros/386 +``` + +On va ensuite construire à la main le dossier multiarch : + +```bash +mkdir -p /tmp/albatros/multi + +# on copie juste le fichier qui déclare la version de la spec "directory" de OCI +cp /tmp/albatros/amd64/version /tmp/albatros/multi/ + +# on copie les blobs +for f in $(find /tmp/albatros/{amd64,386,arm,arm64} -type f -regextype sed -regex '.*[a-f0-9]\{64\}'); do + cp $f /tmp/albatros/multi/ +done + +# on calcule le sha256 des manifests respectifs +sha256sum $(find /tmp/albatros/{amd64,386,arm,arm64} -type f -name manifest.json) +# e17bf961fd9f6e6272475451589b01f2a1f4f74a44e9e6f24f767a21270825ae /tmp/albatros/amd64/manifest.json +# ccff0bd116d6e463f888d8fbddbbe75eb81b795caf6fd8779ce6c900abc2e455 /tmp/albatros/386/manifest.json +# 77dfc6112d751267df4e0de231a8f4eafb0927c93021428e7a725d171ed4ccb7 /tmp/albatros/arm/manifest.json +# 2c6a37c30ff322cb21a1f142d7608666546a495f8f30550f9810a51b9816bf41 /tmp/albatros/arm64/manifest.json + +# on copie ces fichiers dans + + ```