Subject: bug#74762: guix copy on cross-built guix not working on powerpc-linux

From: Efraim Flashner <[email-masked]>
Date: Tue, 10 Dec 2024 11:33:40 +0200

I cross compiled guix from x86_64-linux to powerpc-linux and then copied
it over to my powerpc machine.  I can use it to instantiate builds but I
can't copy derivations across the network to my x86_64 box.

process 4199 acquired build slot '/var/guix/offload/g4.local:22/0'
normalized load on machine 'g4.local' is 0.90
building /gnu/store/vr7f10sygxs83dvp2xsfy6h6hcsy38dn-python-boot0-3.5.9.drv...
waiting for locks or build slots...
guix offload: sending 0 store items (0 MiB) to 'g4.local'...
offloading '/gnu/store/vr7f10sygxs83dvp2xsfy6h6hcsy38dn-python-boot0-3.5.9.drv' to 'g4.local'...
offloading build of /gnu/store/vr7f10sygxs83dvp2xsfy6h6hcsy38dn-python-boot0-3.5.9.drv to 'g4.local'
retrieving 1 store item from 'g4.local'...
importing file or directory '/gnu/store/cbdccw5b3dab8r0634vr011miin58jx3-python-boot0-3.5.9'...
guix offload: error: corrupt input while restoring archive from #<input: string 7f0364d43150>
cannot build derivation `/gnu/store/bg8gd8ap9p8f8yvwjz7gm6p3rqnici6h-glibc-2.39.drv': 1 dependencies couldn't be built
cannot build derivation `/gnu/store/gcsya7jl7g6a8zavb92nhc6fqkclsmj2-glibc-intermediate-2.39.drv': 1 dependencies couldn't be built
cannot build derivation `/gnu/store/k8vcffd0z45n3rh8b845xj7pv21hsvy3-hello-2.12.1.drv': 1 dependencies couldn't be built
guix build: error: build of `/gnu/store/k8vcffd0z45n3rh8b845xj7pv21hsvy3-hello-2.12.1.drv' failed

real    0m50.650s
user    0m1.367s
sys     0m0.106s
(ins)efraim@3900XT ~/workspace/guix$ guix copy --from=g4.local /gnu/store/cbdccw5b3dab8r0634vr011miin58jx3-python-boot0-3.5.9
retrieving 1 store item from 'g4.local'...
guix copy: error: implementation cannot deal with > 32-bit integers

switching back to the guix daemon from my checkout on the powerpc:

(ins)efraim@3900XT ~/workspace/guix$ guix copy --from=g4.local /gnu/store/cbdccw5b3dab8r0634vr011miin58jx3-python-boot0-3.5.9
retrieving 1 store item from 'g4.local'...
/gnu/store/2zcghnqqx7pvzvnkxp5jq3l8mx04bkwr-bootstrap-binaries-0
/gnu/store/mwnpb8xmzx8s2z4xj07nvxcnx9g2vn47-glibc-bootstrap-0
/gnu/store/cbdccw5b3dab8r0634vr011miin58jx3-python-boot0-3.5.9
(ins)efraim@3900XT ~/workspace/guix$ guix gc -D /gnu/store/cbdccw5b3dab8r0634vr011miin58jx3-python-boot0-3.5.9
finding garbage collector roots...
removing stale link from `/var/guix/gcroots/auto/241cz9zn5c07pgw5yjk553hyx41zil9y' to `/var/guix/profiles/per-user/efraim/current-guix-189-link'
[0 MiB] deleting '/gnu/store/cbdccw5b3dab8r0634vr011miin58jx3-python-boot0-3.5.9'
deleting `/gnu/store/trash'
deleting unused links...
note: currently hard linking saves 552875.87 MiB

switching back to the cross compiled package:

(ins)efraim@3900XT ~/workspace/guix$ guix copy -v5 --from=g4.local /gnu/store/cbdccw5b3dab8r0634vr011miin58jx3-python-boot0-3.5.9
retrieving 1 store item from 'g4.local'...
guix copy: error: implementation cannot deal with > 32-bit integers
(ins)efraim@3900XT ~/workspace/guix$ ssh g4.local guix archive --export /gnu/store/cbdccw5b3dab8r0634vr011miin58jx3-python-boot0-3.5.9 | guix archive --import
guix archive: error: unexpected EOF reading an integer
Backtrace:
          13 (primitive-load "/home/efraim/.config/guix/current/bin/…")
In guix/ui.scm:
   2330:7 12 (run-guix . _)
  2293:10 11 (run-guix-command _ . _)
In ice-9/boot-9.scm:
  1752:10 10 (with-exception-handler _ _ #:unwind? _ # _)
In guix/status.scm:
    859:3  9 (_)
    839:4  8 (call-with-status-report _ _)
In ice-9/boot-9.scm:
  1752:10  7 (with-exception-handler _ _ #:unwind? _ # _)
In guix/store.scm:
   689:37  6 (thunk)
   1330:8  5 (call-with-build-handler #<procedure 7fb10da80390 at g…> …)
  1751:22  4 (import-paths #<store-connection 256.100 7fb117245820> #)
   764:14  3 (process-stderr _ _)
In guix/serialization.scm:
   122:12  2 (write-bytevector #vu8(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 …) …)
In ice-9/boot-9.scm:
  1685:16  1 (raise-exception _ #:continuable? _)
  1685:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure modulo: Wrong type argument in position 1: #<eof>

My first thought is an issue in our libssh, since we already have
problems cross-compiling that to 32-bit architectures.  The EOF in the
integer sounds like it could be an endian issue, but I'm not sure why
that wouldn't have come up previously.

-- 
Efraim Flashner   <[email-masked]>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted