Update appimage runtime to the static runtime to remove libfuse2 dependency
Closed this issue · 12 comments
Hello, I've noticed that the appimages being made with nix-appimage still use the old dynamic runtime that has a libfuse2 dependency.
The appimage folks actually now have the static runtime here: https://github.com/AppImage/type2-runtime/releases
All the runtimes in the pre-releases are the static runtime, while the runtimes in the last stable release only the ones marked fuse3
are static.
Those runtimes don't have libfuse2 dependency and work on musl systems as well, they are also being used as the default runtime in go-appimage and appimagetool
Ah nice, that seems much more maintained than the one currently in use. It also seems like I can upgrade the AppImageCrafters runtime to use libfuse3 by making squashfuse use fuse3
instead of fuse
.
Can you explain what the benefit of using fuse3 over libfuse2 is?
Can you explain what the benefit of using fuse3 over libfuse2 is?
libfuse2 is an EOL library, it is no longer pre-installed in distros, so the appimages made using it won't work out of the box.
Also see:
Thanks for fixing the issue.
Also see:
* [squashfuse: Use fuse3 instead of fuse NixOS/nixpkgs#340410](https://github.com/NixOS/nixpkgs/pull/340410)
squashfsfuse in this case would be used to make the squashfs image right? In that case I don't think it is a big deal if you use fuse or fuse3 to make it but I'm not very sure. As far as I know what matters is the runtime itself and not how the squashfs image is made.
You might want to consider using appimagetool to create the squashfs image, since it supports multiple arguments like the PR you have open is doing, example.
Although it might not work on nix.
squashfuse is the library that both runtimes use to mount the bundled data when you run the appimage, you're probably thinking of squashfsTools.
I use nix-appimage to run my nix packaged applications (nixvim, etc.) on compute cluster on which I don't have root access.
I was not able to run my appimages on some servers, where fuse3 is not installed and had to change the runtime to use fuse2.
I am not very familiar with appimages or what would be the right way to address this issue, I just want to make you aware that this might be a problem for some users / use-cases.
I use nix-appimage to run my nix packaged applications (nixvim, etc.) on compute cluster on which I don't have root access. I was not able to run my appimages on some servers, where fuse3 is not installed and had to change the runtime to use fuse2. I am not very familiar with appimages or what would be the right way to address this issue, I just want to make you aware that this might be a problem for some users / use-cases.
Hi, do you have this issue with the appimages of cemu, zen-browser, duckstation and pcsx2? Those use the static runtime as well and only need a fusermount or fusermount3 binary on the system.
Those work for me. At least they launch before they complain about missing libGLX.so.
Those work for me. At least they launch before they complain about missing libGLX.so.
Can you try extracting the nix appimages that have the issue --appimage-extract
and then using either go-appimage or appimagetool turn the squashfs-root directory back into an appimage so that it gets the static runtime again.
Let me know if that works, if it does then it is likely an issue with how the squashfs image is made.
Maybe I should have postet this before, but the error message I get is:
fuse: failed to exec fusermount3: No such file or directory
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
I am not quite sure how to turn the extracted squashfs-root back into an appimage. appimge-tools complains about missing a desktop file. I really have no experience with appimages and just wanted to make you aware of the issue.
My current workaround is to simply revert the runtime back to fuse2 (https://github.com/Jonas-Finkler/nix-appimage).
There's no need to revert to using libfuse2, if you install the fusermount3 binary, everything should work.
You can compile it yourself or download a static binary if you don't have necessary privileges.
https://bin.ajam.dev/x86_64_Linux/Baseutils/fuse3/
[+] https://github.com/Azathothas/Toolpacks/blob/main/.github/scripts/x86_64_Linux/bins/fuse3.sh
https://bin.ajam.dev/aarch64_arm64_Linux/Baseutils/fuse3/
[+] https://github.com/Azathothas/Toolpacks/blob/main/.github/scripts/aarch64_Linux/bins/fuse3.sh
As to how to turn squashfs-root back into an appimage, here's a few examples:
https://github.com/Azathothas/Toolpacks/blob/main/.github/scripts/x86_64_Linux/bins/mpv.sh
https://github.com/Azathothas/Toolpacks/blob/main/.github/scripts/x86_64_Linux/bins/ladybird.sh
https://github.com/Azathothas/Toolpacks/blob/main/.github/scripts/x86_64_Linux/bins/nicotine-plus.sh
@Jonas-Finkler you can also try some of the nix-appimages that @Azathothas makes, which actually get extracted and made again with appimagetool with the static runtime.
They work without fusermount3.
You can download it here: https://bin.ajam.dev/x86_64_Linux/
(search for mpv.AppImage).