Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fuse-3? #1120

Closed
2011 opened this issue Mar 4, 2021 · 81 comments
Closed

fuse-3? #1120

2011 opened this issue Mar 4, 2021 · 81 comments
Assignees

Comments

@2011
Copy link

2011 commented Mar 4, 2021

$ /path/to/any.AppImage 
dlopen(): error loading libfuse.so.2

AppImages require FUSE to run. 
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


$ ls -al /usr/lib64/libfuse3.so*
lrwxrwxrwx 1 root root     13 2020-10-17 05:19:09 /usr/lib64/libfuse3.so -> libfuse3.so.3*
lrwxrwxrwx 1 root root     17 2020-10-17 05:19:09 /usr/lib64/libfuse3.so.3 -> libfuse3.so.3.9.1*
-rwxr-xr-x 1 root root 249552 2020-10-17 05:19:11 /usr/lib64/libfuse3.so.3.9.1*

I found nothing in the documentation mentioning version 3 of fuse, but do note that fuse-3.0.0 arrived in 2016, and the (dead) version 2 has seen no releases in more than two years. I don't understand why you still use version 2.

In searching through issues before making this post, I noticed somebody suggesting that you include (the relevant parts of) fuse in the AppImages. I heartily endorse that idea.

@probonopd
Copy link
Member

Please install libfuse2 for now; systems like CentOS 6 and 7 still need it.
Ubuntu xenial, the oldest still-supported Ubuntu LTS release, also uses it: https://packages.ubuntu.com/de/xenial/libfuse2
So we do not want to drop libfuse2 support.

As far as I know, no one has started working on (optional) support for libfuse3 so far.
Would it be feasible to link libfuse statically into the embedded AppImage runtime, and would this solve these sorts of issues? This would increase size for the sake of increasing compatibility.

@TheAssassin
Copy link
Member

You could just dlopen() and call the functions from there like it is done with libfuse2 currently. Would be easier. Also a chance to clean up the mess in the runtime, and extract all fuse-related things into some separate module.

@2011
Copy link
Author

2011 commented Mar 5, 2021

Would it be feasible to link libfuse statically into the embedded AppImage runtime, and would this solve these sorts of issues? This would increase size for the sake of increasing compatibility.

The entire libfuse3 dynamic library weighs in at less than 250K on my machine (I would expect an even smaller size for libfuse2). The increase in size for each AppImage (assuming you only linked in the relevant function calls) seems absolutely trivial relative to the gains in user experience. Plus it solves your problem of having to switch later. Some distributions have started to get very strict about removing apps that link to unmaintained software (Python 2.7.x or Gtk+ 2.24.x, to name two), and I expect that those distributions won't even package libfuse2 by the end of the year.

@probonopd
Copy link
Member

distributions won't even package libfuse2

Then those distributions don't have a very backward/LTS compatible mindset. In my opinion, when a new major version of a library comes along, the last major version should be carried alongside at least until even the oldest still-supported LTS releases come with the new major version, plus some extra grace period.

@2011
Copy link
Author

2011 commented Mar 5, 2021

I don't mean to sound too argumenative here, but doesn't most LTS last about two years (people usually don't get that on many phones)? Libfuse2 has (already) died more than two years ago. Dead software doesn't have the number of eyes looking at it for potential security vulnerabilities, and distribution maintainers almost always have limited resources (and do always have demands that far exceed those resources). I can tell you that distribution packagers hate few things more that having to expend the effort required to maintain applications that demand deprecated versions of tools (and the tools often need patching themselves because other things have changed in the meantime).

Some upstream developers will simply never upgrade if they can get away with it (I know software that still requires a version from the last millennium of a common tool). Why doesn't the project upgrade? I have no idea, but can only guess some combination of arrogance, ignorance, and laziness.

@probonopd
Copy link
Member

probonopd commented Mar 6, 2021

phones

Phones are clearly not our reference point. In fact, most phones become un-usable after just a few years due to them being abandoned shortly after they have been produced. I know people who are still running 10-year old desktop operating systems, ad I am typing this on a workstation that is over 10 years old and still working perfectly fine.

I can tell you that distribution packagers hate few things more that having to expend the effort required to maintain applications that demand deprecated versions of tools

And that is exactly why we need something like AppImage that embraces backward compatibility to older systems. Many distributions simply don't care and that is a problem.

Why doesn't the project upgrade? I have no idea, but can only guess some combination of arrogance, ignorance, and laziness.

Caring about users who do not want, or cannot, upgrade their operating system every couple of years.

In my personal optinion, distributions should continue to ship the -compat ("old") version of a library until it is absolutely clear that everyone (including users of distributions such as RHEL) have the new version. This would promote binary compatibility. Why don't distributions care about binary compatibility? I have no idea, but can only guess some combination of arrogance, ignorance, and laziness.

@2011
Copy link
Author

2011 commented Mar 8, 2021

This would promote binary compatibility.

So would not requiring libfuse at all, and placing the function calls needed directly in each AppImage.

Why don't distributions care about binary compatibility? I have no idea, but can only guess some combination of arrogance, ignorance, and laziness.

That seems specious to me. Distributions often have limited resources (and requests from users to add additional packages). Attempting to include deprecated libraries (especially those where the discovery of security flaws makes that more difficult) places a tremendous load on those resources. When the developer of a library moves to a new (and incompatible) version, application developers who continue to use to old library force every distribution that includes that application to do extra work. Eventually that becomes quite selfish (although libfuse2 remains recent enough that I don't mean to include applications that link to it in that description).

@probonopd
Copy link
Member

So would not requiring libfuse at all, and placing the function calls needed directly in each AppImage.

True, unless we still need to invoke commands like fusermount that need to be binary compatible (which I have not investigated yet).

places a tremendous load on those resources

Maybe the sweet spot would be to carry (and co-install by default) the current-1 major version, and deprecate it thereafter. Something like that. So that there is an overlap in available major library versions in all distributions (from Enterprise/LTS to bleeding edge) at any point in time. But I suspect that this kind of thinking may be alien to many distributions.

Well, in pragmatic terms, I think we should try what @TheAssassin has suggested:
If libfuse.so.2 cannot be dlopen()ed, then try to dlopen() libfuse.so.3 (and hope that nothing has changed in a breaking way).

If this doesn't work, we can always think about not requiring libfuse (and fusermount, in case we currently do) at all...

@haampie
Copy link

haampie commented Mar 23, 2021

@probonopd what do you mean with using fusermount? I grepped it and didn't see it in the sources (including submodules).

I'm kinda interested in a static version of runtime that has libfuse linked into it. For my use case (high-performance computing) I really don't need all the desktop/icon/update/install stuff that come with AppImages, I just need the self-mounting squashfs. Indeed both libfuse3.so and libfuse.so are roughly 250K, so that's a size I can live with. Any obvious downsides to this?

@haampie
Copy link

haampie commented Mar 23, 2021

squashfuse is used, not fusermount it seems

@probonopd
Copy link
Member

Doesn't squashfuse use fusermount internally? Not 100% sure

@haampie
Copy link

haampie commented Mar 24, 2021

I think squashfuse is just calling libfuse functions, and I would presume that ultimately calls fusermount yes, because at least on my distro (ubuntu 20.04) that is a setuid binary

@haampie
Copy link

haampie commented Mar 24, 2021

Yeah, one way to figure this out is by running strace -f which dropt the setuid flag for those binaries, and then the program fails:

$ strace -f -o out.txt ./my.AppImage
fusermount: mount failed: Operation not permitted

@haampie
Copy link

haampie commented Mar 24, 2021

I quickly looked into this, but the latest tagged version of squashfuse doesn't play well with libfuse 3 (apparently @TheAssassin's patches were upstreamed to Debian for the libsquashfuse0 package -- stuck on the same version then); meaning that most people likely use libfuse 2 anyways. I've created an issue in that repo to ask them to release a new version: vasi/squashfuse#50.

@haampie
Copy link

haampie commented Mar 26, 2021

Actually there is a licensing issue when you statically link libfuse, because it is licensed LGPL. dlopen doesn't run into these issues so should be preferred.

@TheAssassin
Copy link
Member

TheAssassin commented Mar 26, 2021

Static linking sure isn't the way to go. I wonder why this licensing issue was found just now, not a couple days ago.

I think this is the perfect opportunity for some polymorphy. The strategy pattern comes into my mind, but since this is pure C, well... I guess a struct containing function pointers is going to have to do. We just need 2-3 functions in such an API, wrapping libfuse2 and libfuse3 respectively. A factory can initialize a struct accordingly, preferring libfuse3, but falling back to libfuse2 if needed:

#include <stdio.h>
#include <assert.h>

typedef struct {
    int (*mount)(char*, ...);
    int (*unmount)(char*, ...);
} fuse_handler_t;

fuse_handler_t* make_fuse_handler() {
    return NULL;
}

int main() {
    fuse_handler_t* fuse_handler = make_fuse_handler();

    assert(fuse_handler != NULL);

    fuse_handler->mount(...);
    
    /* wait until app in AppImage terminates */
    
    fuse_handler->unmount(...);
}

Such a FUSE handler could even hold some state, if needed.

@haampie
Copy link

haampie commented Mar 31, 2021

Pardon my ignorance, but do you really need to call directly into libfuse in AppImageKit at all? Isn't everything handled through SquashFUSE? SquashFUSE 0.1.104 supports both libfuse2 and libfuse3, and the master branch (which is hopefully tagged soon) adds libsquashfuse_ll.a as a separate lib, so you would only have to move the (new) ll_main.c function into AppImageKit's runtime.c if you insist on not invoking squashfuse_ll as an executable.

Maybe squashfuse can be improved a bit to add support for using dlopen to load either libfuse2 or libfuse3 instead of fixing that at compile time.

@probonopd
Copy link
Member

squashfuse is compiled in.

@TheAssassin
Copy link
Member

We use a specific version of squashfuse, patched to load libfuse with dlopen.

@haampie
Copy link

haampie commented Mar 31, 2021

There's currently some active development in squashfuse, I don't think it's a lot of fun to maintain those patches or stick to a fixed vendored version (also for me, cause I want to build an optimized runtime.c in spack without vendored deps (e.g. i want to use the latest zstd for compression)). Wouldn't it make more sense to just open an issue in the squashfuse repo about this use case? The facebook xar people basically have the same issue and are developing squashfuse too; they currently just assume that squashfuse_ll is in the PATH to work around api/abi issues of libfuse, but they also have an open issue where someone wants to link squashfuse_ll.a instead.

@haampie
Copy link

haampie commented Mar 31, 2021

vasi/squashfuse#60

@haampie
Copy link

haampie commented Mar 31, 2021

They are unfortunately not interested in supporting fuse and fuse3 at the same time

@almereyda
Copy link

almereyda commented Sep 1, 2021

Another tool from the AppImage ecosystem, https://github.com/vinifmor/bauh/, is also offering to be used with fuse (2) and fuse3. Unfortunately it's written in Python, and therefore uses an abstraction that could not be reused here.

What is blocking us here from offering both, the dependency on squashfuse and having to use dlopen?

Two comments from the linked thread stand out:

@chipturner I am concerned all of these options add a bit of complexity for fairly niche use case. What systems only have libfuse2? libfuse3 is four years old and the last release of libfuse2 was Jan 2019.

seconding the argumentation from @2011 .

@vasi How bad would it be to just build separate binaries, and have a small wrapper choose between them at runtime? Most Linux games do something like that.

providing a suggestion which could maybe work here, too?

Please note that the error message displayed in the OP will also be sent as a notification to GNOME, and with the appimaged.service trying to restart every few seconds, this fills up the notification drawer, and also the journal.

`journalctl --user -u appimaged.service | grep 'restart counter' | tail -n 50`
Sep 01 22:32:13 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2049.
Sep 01 22:32:17 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2050.
Sep 01 22:32:20 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2051.
Sep 01 22:32:23 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2052.
Sep 01 22:32:26 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2053.
Sep 01 22:32:30 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2054.
Sep 01 22:32:33 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2055.
Sep 01 22:32:36 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2056.
Sep 01 22:32:39 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2057.
Sep 01 22:32:43 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2058.
Sep 01 22:32:46 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2059.
Sep 01 22:32:49 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2060.
Sep 01 22:32:52 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2061.
Sep 01 22:32:56 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2062.
Sep 01 22:32:59 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2063.
Sep 01 22:33:02 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2064.
Sep 01 22:33:05 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2065.
Sep 01 22:33:09 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2066.
Sep 01 22:33:12 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2067.
Sep 01 22:33:15 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2068.
Sep 01 22:33:18 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2069.
Sep 01 22:33:22 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2070.
Sep 01 22:33:25 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2071.
Sep 01 22:33:28 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2072.
Sep 01 22:33:31 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2073.
Sep 01 22:33:35 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2074.
Sep 01 22:33:38 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2075.
Sep 01 22:33:41 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2076.
Sep 01 22:33:44 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2077.
Sep 01 22:33:48 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2078.
Sep 01 22:33:51 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2079.
Sep 01 22:33:54 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2080.
Sep 01 22:33:57 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2081.
Sep 01 22:34:01 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2082.
Sep 01 22:34:04 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2083.
Sep 01 22:34:07 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2084.
Sep 01 22:34:10 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2085.
Sep 01 22:34:14 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2086.
Sep 01 22:34:17 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2087.
Sep 01 22:34:20 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2088.
Sep 01 22:34:23 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2089.
Sep 01 22:34:26 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2090.
Sep 01 22:34:30 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2091.
Sep 01 22:34:33 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2092.
Sep 01 22:34:36 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2093.
Sep 01 22:34:41 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2094.
Sep 01 22:34:45 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2095.
Sep 01 22:34:49 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2096.
Sep 01 22:34:52 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2097.
Sep 01 22:34:56 ganglion systemd[15024]: appimaged.service: Scheduled restart job, restart counter is at 2098.

@alt-art
Copy link

alt-art commented Dec 23, 2021

I have a suggestion, introduce a vulnerability in fuse2 to make everyone migrate to fuse3.

@pkkid
Copy link

pkkid commented Mar 3, 2022

Steam on Ubuntu 22.04 requires fuse3 for xdg-desktop-portal. This seems to make it not really possible to have both Steam installed and use AppImages on the same system unless I am missing something. It's not this projects job to support all environments, but worth noting that an incompatibility with one of the most popular apps in Linux will make using AppImages a non starter for many.

@probonopd
Copy link
Member

Are you saying fuse2 and fuse3 cannot be installed at the same time @pkkid? What happens if you do? AppImages require fuse2 to be installed and configured.

@pkkid
Copy link

pkkid commented Mar 7, 2022

In Ubuntu 22.04 it doesn't seem to let me install both. I have fuse3 installed right now, and if I try to install fuse, it shows the following. When I had fuse2 installed previously, Steam keeps prompting me and attempting to install fuse3 every time I open it. Maybe I can manually build and install both at the same time? Doesn't seem like something I really want venture into unless there was an AppImage I absolutely needed.

22:03:42 pkkid-ubuntu ~: sudo apt-get install fuse
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libfuse2
The following packages will be REMOVED:
  fuse3 xdg-desktop-portal xdg-desktop-portal-gtk
The following NEW packages will be installed:
  fuse libfuse2
0 upgraded, 2 newly installed, 3 to remove and 11 not upgraded.
Need to get 0 B/117 kB of archives.
After this operation, 1,120 kB disk space will be freed.
Do you want to continue? [Y/n] 

@haampie
Copy link

haampie commented Mar 7, 2022

I think it would be easiest to just statically link libfuse; it should be OK with MIT being a compatible license, and it just affects the runtime. At the end of the day libfuse is a fancy way to execute fusermount (the setuid binary), and I don't think there's incompatibilities wrt command line arguments. I'm doing that here: https://github.com/eth-cscs/spack-batteries-included

@probonopd
Copy link
Member

probonopd commented Mar 7, 2022

https://lists.ubuntu.com/archives/ubuntu-devel/2021-July/041530.html:

Fuse3 is a requirement for qemu 6 [1]. Since we don't want to support
two versions of fuse in main, we'd like reverse-dependencies of fuse
to switch to fuse3.

Argh. Trouble is to be expected. This means that all existing AppImages will not run on Ubuntu unless the user manually installs libfuse2 from a non-default official repository. Something that is too difficult for "normal end users" to do.

Please talk to upstreams and investigate what changes are required to
these packages

Distributions often blindly assume that users are updating everything to the latest versions of everything all the time. Which is not how I see things. Once I have a version of an application that works well for me the last thing I want is to be forced to update it. (At most, I download the new version in addition to the known good one to check out the new features and check for new showstoppers.)

If I understand it right, it Looks like https://github.com/eth-cscs/spack-batteries-included is providing a solution for this. Should we backport these changes into the AppImage runtime?

@danryu
Copy link

danryu commented Jan 12, 2023

Thanks @probonopd

go-appimage is not an option for us, as our app relies on custom url handling which needs AppImageLauncher to operate.

How much work is left on integrating the type2-runtime into AppImageKit? From the outside it appears that the effort has stalled.
At least your comments suggest that AppImageKit isn't deprecated, as I feared.
Could a test/beta version be made available to early adopters? Please?

(The "need for libfuse2" argument is surely losing water every day, as fewer fuse2-based installations are used either as build or run platforms.)

@BobSynfig
Copy link

(The "need for libfuse2" argument is surely losing water every day, as fewer fuse2-based installations are used either as build or run platforms.)

I think you missed this part :

in order to continue to be able to run all the already-existing AppImages out there.

Is is more a constraint to install a single package or to make any existing AppImage to be converted to a new version of runtime?
It is the duty of application's developer to provide compatible binaries.
Why not as developers to produce both libfuse2 and libfuse3 compatible distros AppImages for new apps, as is already the case for bitness and architecture?

@danryu
Copy link

danryu commented Jan 13, 2023

I think you missed this part :

in order to continue to be able to run all the already-existing AppImages out there.

No, I didn't miss that. If developers of already-existing AppImages don't want to maintain compatibility with the fuse versions in the mainline of popular Linux distribution development, then that is to be expected.

Is is more a constraint to install a single package or to make any existing AppImage to be converted to a new version of runtime?

The former. Users of current, popular Linux distributions should have the least work to do. If existing AppImages rely on older versions of fuse, then fine, make them install the old version of fuse. But if they have the current, mainline, popular one, then they shouldn't have to do anything.

It is the duty of application's developer to provide compatible binaries. Why not as developers to produce both libfuse2 and libfuse3 compatible distros AppImages for new apps, as is already the case for bitness and architecture?

The answer to this should be obvious. But maybe one needs to be more involved in user-focused multi-platform app development and distribution to understand it.
If I'm hypothetically already producing 32-bit and 64-bit versions of both X86 and ARM architectures (ie 4 release builds) for each app version update, I now have to double that to support both fuse2 and fuse3. So I'm up to 8 release builds - for a single app.

When you want to help users use the software that you make, while also reducing engineering complexity and keeping maintainability of CI/CD workflows, this is the kind of thing you think about.

@probonopd
Copy link
Member

By switching to a static build, we won't need any particular libfuse version in the operating system. That's why I want to push for this solution.

@danryu
Copy link

danryu commented Jan 17, 2023

By switching to a static build, we won't need any particular libfuse version in the operating system. That's why I want to push for this solution.

This sounds supremely sensible :)
What's blocking its adoption? And how can I upvote it if necessary?

@qwertychouskie
Copy link

Ubuntu 16.04 is long EOL, even 18.04 is hitting EOL in ~1 week. Meanwhile, AppImages don't run on Ubuntu 23.04 out of the box: https://www.omgubuntu.co.uk/2023/04/appimages-libfuse2-ubuntu-23-04

It sounds like static runtimes are the long-term solution, but right now AppImages are failing to launch in recent distros (silently if not ran from a terminal!)

@probonopd
Copy link
Member

What's blocking its adoption?

@TheAssassin?

@Firestar-Reimu
Copy link

It sounds like static runtimes are the long-term solution, but right now AppImages are failing to launch in recent distros (silently if not ran from a terminal!)

Yes. On archlinux it needs to manually install fuse2 too.

@BobSynfig
Copy link

Yes. On archlinux it needs to manually install fuse2 too.

Or, in most of the cases, you can just remove libstdc++.so.6 and libgmodule-2.0.so.0 from the AppImage file
See https://gist.github.com/BobSynfig/b861ead8ea57df22d601edb22324d6a6

@kskarthik
Copy link
Contributor

kskarthik commented Jan 12, 2024

@probonopd Here's the situation

My OS: Debian unstable

  • I have flatpak installed which relies on fuse3

  • nvim appimage does not run because of fuse2 non-availability

  • In debian, fuse3 pkg removes fuse2

What can i do in this scenario?

@probonopd
Copy link
Member

sudo apt get install libfuse2 - if this wants to remove your existing fuse3 setup, then I'd consider it a bug in Debian, since libfuse2 and libfuse3 were explicitly designed to be installed alongside each other.

@kskarthik
Copy link
Contributor

kskarthik commented Jan 13, 2024

@probonopd thanks a lot! it helped

@jcelerier
Copy link

so, if as of today I want to provide an appimage that will work from, say, ubuntu 18.10 to 23.10, and does not require the user to run apt install manually, what are my options?

@probonopd
Copy link
Member

That should be doable by using a statically linked AppImage runtime, e.g., https://github.com/AppImage/type2-runtime.

@BobSynfig
Copy link

But people have to be aware that older (existing) AppImage will still require libfuse2 unless they are altered to use this statically linked runtime.

@jcelerier
Copy link

sorry, I should have been more clear, it's not too clear for me how to instruct AppImageKit to use this new runtime ? or do I have to do it manually

@probonopd
Copy link
Member

probonopd commented Feb 12, 2024

If you are using appimagetool, you can use --runtime-file Runtime file to use and specify the path to the runtime file you want to use, e.g., one downloaded from https://github.com/AppImage/type2-runtime/releases/tag/continuous that matches the architecture of your AppDIr.

Once @TheAssassin gives green light, we will change the default behavior to use the static runtime automatically.

@jcelerier
Copy link

I see. I'm not using linuxdeployqt - I do this : https://github.com/ossia/score/blob/master/ci/appimage.build.sh#L25

is the runtime the AppRun file ? The steps would be

  • build the type2-runtime
  • rename the output as AppRun
  • put it at the same place ?

Or are more things invlved

@probonopd
Copy link
Member

probonopd commented Feb 13, 2024

No, the runtime is not the AppRun file. And I meant appimagetool above, not linuxdeployqt (I am correcting the above now). Sorry for the confusion.

So instead of this

https://github.com/ossia/score/blob/53f4db8a96877aa8a49f6273c08513ef699c3f93/ci/appimage.build.sh#L22

you need to download the new one from https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage, and you also need to download https://github.com/AppImage/type2-runtime/releases/download/continuous/runtime-x86_64.

Then, instead of
https://github.com/ossia/score/blob/53f4db8a96877aa8a49f6273c08513ef699c3f93/ci/appimage.build.sh#L37

you need to use

./appimagetool-x86_64.AppImage -n "build/score.AppDir" "Score.AppImage" --runtime-file runtime-x86_64

(If you think we should make this easier - I think so too. Once @TheAssassin is ready for it, we will make that runtime the default in the new appimagetool, and recommend the new appimagetool instead of the one in AppImageKit.)

Hope this clears it up!

@jcelerier
Copy link

jcelerier commented Feb 13, 2024

thanks a lot! this is great and exactly the explanation i needed

@jcelerier
Copy link

jcelerier commented Feb 15, 2024

super, just in case there is a typo in the command, I think it should be

"Score.AppImage" --runtime-file runtime-x86_64

instead of

"Score.AppImage --runtime-file runtime-x86_64"

@probonopd
Copy link
Member

Of course. Correcting above. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests