Décompresser une appimage et la remettre avec la bonne librairie
Aujourd’hui, j’ai voulu tester Ultimaker-Cura , qui n’est disponible qu’en appimage, créé avec une librairie incompatible avec Debian Trixie.
J’ai trouvé comment modifier l’appimage sur un site allemand. Voici mes commandes pour que cela fonctionne correctement.
1/ Les messages d’erreurs avant modification :
$ bin/UltiMaker-Cura-5.11.0-linux-X64.AppImage
UM/Settings/SettingFunction.py:244: DeprecationWarning: ast.Str is deprecated and will be removed in Python 3.14; use ast.Constant instead
def visit_Str(self, node: ast.Str) -> None:
Gtk-Message: 18:40:16.845: Failed to load module "canberra-gtk-module"
Gtk-Message: 18:40:16.845: Failed to load module "canberra-gtk-module"
qt.glx: qglx_findConfig: Failed to finding matching FBConfig for QSurfaceFormat(version 4.1, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize -1, redBufferSize 1, greenBufferSize 1, blueBufferSize 1, alphaBufferSize -1, stencilBufferSize -1, samples -1, swapBehavior QSurfaceFormat::SingleBuffer, swapInterval 1, colorSpace QColorSpace(), profile QSurfaceFormat::CoreProfile)
qt.glx: qglx_findConfig: Failed to finding matching FBConfig for QSurfaceFormat(version 4.1, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize -1, redBufferSize 1, greenBufferSize 1, blueBufferSize 1, alphaBufferSize -1, stencilBufferSize -1, samples -1, swapBehavior QSurfaceFormat::SingleBuffer, swapInterval 1, colorSpace QColorSpace(), profile QSurfaceFormat::CoreProfile)
Could not initialize GLX
Abandon
2/ Récupération de AppimageTool
3/ Préparation des éléments :
$ cd bin
$ mkdir ultimaker-cura
$ mv UltiMaker-Cura-5.11.0-linux-X64.AppImage ultimaker-cura/
$ mv ~/Téléchargements/appimagetool-x86_64.AppImage ./
$ chmod +x appimagetool-x86_64.AppImage
$ ./appimagetool-x86_64.AppImage -h
Utilisation*:
appimagetool [OPTION*] SOURCE [DESTINATION] - Generate AppImages from existing AppDirs
Options de l*aide*:
-h, --help Affiche les options de l*aide
Options de l*application*:
-l, --list List files in SOURCE AppImage
-u, --updateinformation Embed update information STRING; if zsyncmake is installed, generate zsync file
-g, --guess Guess update information based on GitHub or GitLab environment variables
--version Show version number
-v, --verbose Produce verbose output
-s, --sign Sign with gpg[2]
--comp Squashfs compression (default: zstd
--mksquashfs-opt Argument to pass through to mksquashfs; can be specified multiple times
-n, --no-appstream Do not check AppStream metadata
--exclude-file Uses given file as exclude file for mksquashfs, in addition to .appimageignore.
--runtime-file Runtime file to use
--sign-key Key ID to use for gpg[2] signatures
--file-url URL of the AppImage file, can be relative to zsync, or absolute/full
$ ./appimagetool-x86_64.AppImage -l ./ultimaker-cura/UltiMaker-Cura-5.11.0-linux-X64.AppImage
appimagetool, continuous build (git version 8c8c91f), build 295 built on 2025-12-04 17:56:36 UTC
./ultimaker-cura/UltiMaker-Cura-5.11.0-linux-X64.AppImage is a file, assuming it is an AppImage and should be unpacked
To be implemented
Nous avons donc un Ultimaker-Cura de 2025-12-04
4/ Décompactage de l’appimage :
$ AppImage=./UltiMaker-Cura-5.11.0-linux-X64.AppImage
$ ./${AppImage} --appimage-extract
L’opération nous a créé un répertoire squasfs-root avec tous les éléments nécessaires (normalement) pour faire fonctionner le logiciel.
Ôtons la libstd incriminée :
$ mv squashfs-root/libstdc++.so.6 squashfs-root/libstdc++.so.6.removed
ici, j’ai un erreur, il m’a donc fallut trouver l’emplacement de la libstd :
$ find -name "libstd*" -print
./squashfs-root/runtime/compat/libstdc++.so.6
$ ls -l ./squashfs-root/runtime/compat/libstdc++.so.6
-rwxr-xr-x 1 remi remi 2522584 23 oct. 11:59 ./squashfs-root/runtime/compat/libstdc++.so.6
Une fois la libstd trouvée, il faut la renommer :
$ mv ./squashfs-root/runtime/compat/libstdc++.so.6 ./squashfs-root/runtime/compat/libstdc++.so.6.removed
5/ Reconstitution de l’appimage :
$ ../appimagetool-x86_64.AppImage squashfs-root
appimagetool, continuous build (git version 8c8c91f), build 295 built on 2025-12-04 17:56:36 UTC
/home/remi/bin/ultimaker-cura/squashfs-root/com.ultimaker.cura.desktop: error: (will be fatal in the future): value "cura-icon.png" for key "Icon" in group "Desktop Entry" is an icon name with an extension, but there should be no extension as described in the Icon Theme Specification if the value is not an absolute path
Using architecture x86_64
/home/remi/bin/ultimaker-cura/squashfs-root should be packaged as UltiMaker_Cura-x86_64.AppImage
cura-icon.png{.png,.svg,.xpm} defined in desktop file but not found
For example, you could put a 256x256 pixel png into
/home/remi/bin/ultimaker-cura/squashfs-root/cura-icon.png.png
L’erreur vient du fait que dans le fichier desktop, le chemin n’est pas spécifié pour le fichier icone.
J’ai cherché l’image et copié le chemin dans le fichier desktop. Attention : ne pas mettre l’extension ’.png’ pour le nom de l’image, sinon, ça plante le compactage.
$ find -name "cura.png" -print
./squashfs-root/share/cura/resources/images/cura.png
$ vi squashfs-root/com.ultimaker.cura.desktop
6/ Relance de la compression :
$ ../appimagetool-x86_64.AppImage squashfs-root
appimagetool, continuous build (git version 8c8c91f), build 295 built on 2025-12-04 17:56:36 UTC
Using architecture x86_64
/home/remi/bin/ultimaker-cura/squashfs-root should be packaged as UltiMaker_Cura-x86_64.AppImage
WARNING: AppStream upstream metadata is missing, please consider creating it
in usr/share/metainfo/com.ultimaker.cura.appdata.xml
Please see https://www.freedesktop.org/software/appstream/docs/chap-Quickstart.html#sect-Quickstart-DesktopApps
for more information or use the generator at
https://docs.appimage.org/packaging-guide/optional/appstream.html#using-the-appstream-generator
Generating squashfs...
Downloading runtime file from https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-x86_64
Downloaded runtime binary of size 944632
Parallel mksquashfs: Using 20 processors
Creating 4.0 filesystem on UltiMaker_Cura-x86_64.AppImage, block size 131072.
[========================================================================================================================================================================================================================|] 34448/34448 100%
Exportable Squashfs 4.0 filesystem, zstd compressed, data block size 131072
compressed data, compressed metadata, compressed fragments,
compressed xattrs, compressed ids
duplicates are removed
Filesystem size 293705.66 Kbytes (286.82 Mbytes)
31.27% of uncompressed filesystem size (939356.86 Kbytes)
Inode table size 242494 bytes (236.81 Kbytes)
22.95% of uncompressed inode table size (1056591 bytes)
Directory table size 289377 bytes (282.59 Kbytes)
28.25% of uncompressed directory table size (1024434 bytes)
Number of duplicate files found 2188
Number of inodes 31922
Number of files 28545
Number of fragments 1106
Number of symbolic links 458
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 2919
Number of hard-links 2
Number of ids (unique uids + gids) 1
Number of uids 1
root (0)
Number of gids 1
root (0)
Embedding ELF...
Marking the AppImage as executable...
Embedding MD5 digest
Success
Please consider submitting your AppImage to AppImageHub, the crowd-sourced
central directory of available AppImages, by opening a pull request
at https://github.com/AppImage/appimage.github.io
Nous copions notre nouvelle image et nous testons.
Et voila !!

