help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Appimage: cannot run binary file


From: Tobias Geerinckx-Rice
Subject: Re: Appimage: cannot run binary file
Date: Wed, 10 Feb 2021 19:59:17 +0100

Bonjour Christophe!

Christophe Pisteur 写道:
bash: .: /home/christophe/Téléchargements/FreeCAD_0.19-23578-Linux- Conda_glibc2.12-x86_64.AppImage : ne peut exécuter le fichier binaire

This unclear error message means that the dynamic linker/loader was not found.

It's an absolute file name, hard-coded in the executable. In this case:

λ file FreeCAD_0.19-23578-Linux-Conda_glibc2.12-x86_64.AppImage ...ELF 64-bit LSB executable, x86-64, version 1 (SYSV)... ...dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2...
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^

Like Flatpaks (and all binaries, really), AppImages are distro-specific: they expect this file to exist at this exact location or they won't be able to start. It won't run on my Guix System even though I have a compatibility symlink in /lib:

 (service special-files-service-type
          `(("/lib/ld-linux-x86-64.so.2"
             ,(file-append (canonical-package glibc)
                           "/lib/ld-linux-x86-64.so.2"))
            ...))

After adding one for /lib64 as well, this happens:

λ ./FreeCAD_0.19-23578-Linux-Conda_glibc2.12-x86_64.AppImage ...: error while loading shared libraries: libz.so.1: cannot open
 shared object file: No such file or directory

Of course: there is no libz.so in /lib{,64} either!

Rather than add more compatibility links for every library and its sister, we create a Guix environment and hackily point our AppImage towards it:

 λ guix environment --ad-hoc zlib fuse -- bash -c \
   'LD_LIBRARY_PATH=$GUIX_ENVIRONMENT/lib \
   ./FreeCAD_0.19-23578-Linux-Conda_glibc2.12-x86_64.AppImage'

fusermount: mounting over filesystem type 0xca451a4e is forbidden

 Cannot mount AppImage, please check your FUSE setup.
You might still be able to extract the contents of this AppImage if you run it with the --appimage-extract option. See https://github.com/AppImage/AppImageKit/wiki/FUSE for more information
 open dir error: No such file or directory

At this point I got a disgusting hunch:

 ~/linux λ grep -r 0xca451a4e *
 ... #define BCACHEFS_STATFS_MAGIC 0xca451a4e

A hard-coded file system whitelist[0]!  What could go wrong?

You'll probably get a different error on your system; it might even work. You could try extracting it:

/tmp/squashfs-root λ ./AppRun bash: ./AppRun: /bin/bash: bad interpreter: No such file or directory

/tmp/squashfs-root λ bash ./AppRun .../bin/freecad: error while loading shared libraries: libGL.so.1:
 cannot open shared object file: No such file or directory

And so on until you have fun. Much cross-distro; very universal. I tried adding mesa; didn't work.

Instead, I strongly recommend writing your own Guix package (using inherit) or looking for a less byzantine download format.

(= cannot run binary file).

(Tip: you can submit ‘normalised’ bug reports by setting LC_ALL=C.)

Good luck,

T G-R

[0]: I don't know if it's in AppImage of FUSE, nor do I much care.

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]