diff mbox series

[bug#58576,v2] system: image: Define correct docker image arch when cross building

Message ID 20221104015456.1059014-1-bauermann@kolabnow.com
State New
Headers show
Series [bug#58576,v2] system: image: Define correct docker image arch when cross building | expand

Commit Message

Thiago Jung Bauermann Nov. 4, 2022, 1:54 a.m. UTC
Cross-building a docker image with:

  $ guix system image --image-type=docker --target=aarch64-linux-gnu os.scm

results in an image where the architecture declared in its config.json is
the host architecture rather than the target one.  The binaries are
correctly cross-compiled, so the image can be loaded and used despite the
warning message shown by docker:

  $ docker load -i vcal7bvsqcijchifhqdvprpd1niqh8sk-docker-image.tar.gz
  Loaded image: guix:latest
  $ docker create guix:latest
  WARNING: The requested image's platform (linux/amd64) does not match the
  detected host platform (linux/arm64/v8) and no specific platform was
  requested
  40f06aa869ed690489c4a3824a7f7721bd4bf453b85f25ac7199266939fe2fba
  $ echo $?
  0

This is fixed by passing the correct triplet to the build-docker-image
function.

* gnu/system/image.scm (system-docker-image) Add ‘image-target’ variable.
[builder]: Pass ‘#:system’ argument to ‘build-docker-image’.
---

Hello,

This is v2 of the patch. The only difference is that the expression
defining ‘image-target’ doesn't try to get the target from the image's
platform field, since its caller ‘system-image’ already does that (thanks
to Mathieu for pointing it out).

 gnu/system/image.scm | 3 +++
 1 file changed, 3 insertions(+)

Comments

Mathieu Othacehe Nov. 4, 2022, 7:46 a.m. UTC | #1
Hello Thiago,

> * gnu/system/image.scm (system-docker-image) Add ‘image-target’ variable.
> [builder]: Pass ‘#:system’ argument to ‘build-docker-image’.

Applied as a75deb884468db0ce2c35e23a61f1a14c9be958e.

Thanks,

Mathieu
Thiago Jung Bauermann Nov. 5, 2022, 3:04 a.m. UTC | #2
Hello Mathieu,

Mathieu Othacehe <othacehe@gnu.org> writes:

>> * gnu/system/image.scm (system-docker-image) Add ‘image-target’ variable.
>> [builder]: Pass ‘#:system’ argument to ‘build-docker-image’.
>
> Applied as a75deb884468db0ce2c35e23a61f1a14c9be958e.

Thank you!
diff mbox series

Patch

diff --git a/gnu/system/image.scm b/gnu/system/image.scm
index 5fc0d55d9a14..f07a4a52174f 100644
--- a/gnu/system/image.scm
+++ b/gnu/system/image.scm
@@ -652,6 +652,8 @@  (define shared-network?
                shared-network?)
               (list boot-program)))
          (substitutable? (image-substitutable? image))
+         (image-target (or (%current-target-system)
+                           (nix-system->gnu-triplet)))
          (register-closures? (has-guix-service-type? os))
          (schema (and register-closures?
                       (local-file (search-path %load-path
@@ -705,6 +707,7 @@  (define builder
                  #:entry-point '(#$boot-program #$os)
                  #:compressor '(#+(file-append gzip "/bin/gzip") "-9n")
                  #:creation-time (make-time time-utc 0 1)
+                 #:system #$image-target
                  #:transformations `((,image-root -> ""))))))))
 
     (computed-file name builder