Subject: bug#48035: Fwd: regression: “guix pack” Docker images no longer work on AWS

From: Ludovic Courtès <[email-masked]>
Date: Wed, 28 Apr 2021 23:29:37 +0200

Hi,

Ricardo Wurmus <[email-masked]> skribis:

> I’m using “guix pack”-generated Docker images on AWS ECS.  On June 17,
> 2020 I generated and uploaded an image that works fine.  According to
> AWS this image has this manifest type:
>
>    application/vnd.docker.distribution.manifest.v2+json
>
> Today I generated a new image that does not work.  It cannot be opened
> by ECS; it cannot find /bin/sh, which exists.  The manifest type is
> now
> recognized as
>
>    application/vnd.oci.image.manifest.v1+json
>
> It also now detects an “Artifact media type” and prints it as
>
>    application/vnd.oci.image.config.v1+json
>
> I’d very much like to push a newly generated image.  Is there a way to
> generate the image as it was done in the summer of 2020?
>
> Note that both these images appear to work “fine” with a local Docker
> installation (i.e. when run with “docker run”).  (When running /bin/sh
> in the container interactively it appears to freeze whenever I try to
> actually run a command, but perhaps I’m just holding it wrong…)

The Git log of (guix docker) and (guix scripts pack) doesn’t show
anything suspicious.

Could you try generating an image with ‘guix pack’ and feeding it to
Docker using Guix’ Docker service in a VM?  Attached is an OS that I
used previously to test Docker things.  (You need to run with ‘-m 8192’
or similar so that when you run ‘docker load -i
/gnu/store/…-docker-pack.tar.gz’ the whole VM disk fits into RAM.)

If you used ‘-S /bin=bin’, /bin/sh in the image is a symlink to
/gnu/store/…-bash/bin/sh, an absolute file name that’s only valid within
the image.  Perhaps Docker is confused by that like Singularity is/was.
In that case, try changing ‘guix pack’ so it produces relative symlinks
as it already does for the ‘singularity’ backend.

HTH!

Ludo’.

(use-modules (gnu) (srfi srfi-1))
(use-package-modules docker linux)
(use-service-modules dbus desktop networking docker)

(operating-system
  (host-name "dockeros")
  (timezone "Europe/Paris")
  (locale "fr_FR.utf8")

  (bootloader (bootloader-configuration
               (bootloader grub-bootloader)
               (target "/dev/sdX")))
  (file-systems (cons (file-system
                        (device (file-system-label "my-root"))
                        (mount-point "/")
                        (type "ext4"))
                      %base-file-systems))

  (users (cons (user-account
                (name "ludo")
                (group "users")
                (supplementary-groups '("wheel"))
                (password (crypt "foo" "$6$"))
                (home-directory "/home/ludo"))
               %base-user-accounts))

  (packages (cons* docker-cli singularity %base-packages))
  (services (append (list (service docker-service-type)
                          (service dbus-root-service-type)
                          (service elogind-service-type)
                          (service dhcp-client-service-type))

                    ;; Choose a better console font.
                    (modify-services %base-services
                      (console-font-service-type
                       config => (map (lambda (tty)
                                        (cons tty "lat9u-16"))
                                      '("tty1" "tty2" "tty3" "tty4"
                                        "tty5" "tty6")))))))