-
Notifications
You must be signed in to change notification settings - Fork 348
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
AppImage for Linux #318
Comments
Yeah that would be great. |
Hi, some progress about it? |
That looks like a good idea! @Sunderland93 did the flatpak for Natron, see #258 and https://github.com/flathub/fr.natron.Natron |
Thanks @devernay. Would you accept a pull request that would build each git push on Travis CI and upload an AppImage to GitHub Releases? Anything special that needs to be considered? |
you mean having snapshot builds for each git push? Will it not clutter the github releases? Will it remove old snapshot builds automatically? I would prefer an option to pull only certain builds, for example if the tag/branch being built on travis starts with the word "snapshot". Anyway, I would encourage you to make a fully working solution on a fork, have users test the appimages it generates, then of course we can merge it. |
Yes.
Cool! 👍 |
Isn't it already being built in Can we have a full If yes, then it'd be simply a matter of running the build artefacts though linuxdepoyqt. That tool can take the dependency libraries from the host (build) system and bundle them up. |
The problem is that you have to build Qt4, a recent ffmpeg, a recent OpenImageIO, etc (see tools/jenkins/include/scripts/build-Linux-SDK.sh). And that takes a lot more than the available time on travis (50mn?). |
Isn't the application already being built in the already existing Travis CI build? So it should merely be a matter of packing the build artifacts that are already there? |
The travis-built Natron would work only on that system (Ubuntu 14.04).
To make a portable binary, you have to bundle all the dependencies.
|
Yes, which is what linuxdeployqt should be able to do rather easily. |
except Natron has many more dependencies than just Qt, and should also work with third party OFX plugins. We already use the Qt tools to take care of the Qt stuff, but there is a lot more than that (especially in openfx-io and openfx-arena) |
what's the difference between flatpak and appimage, BTW? |
and how far is the appimage from the portable binaries that we ship? |
Of course we need to take care of those as well. The "qt" in "linuxdeployqt" stands for the fact that it is written in Qt, not limited to Qt. Library dependencies automatically get bundled unless they are opened at runtime using
The best way to go about this is to bundle all high-quality third party OFX plugins along with their dependencies, so that users can download just one file and everything works without configuring, installing, "fiddling around" with anything (like a Linux Live ISO does for the OS).
I am by no means familiar with those, but are you mainly talking about Complex applications like GIMP, Krita, Inkskape etc. are being shipped as AppImages, along with plugins. So I'd say it's doable, and I'm happy to help.
Short story: They are the exact opposite. Flatpak = may files scattered around the filesystem, needs to be managed by a tool that needs to be installed to manage applications. AppImage = one app, one file, all done by drag-and-drop in the file manager, portable. Long story: https://github.com/AppImage/AppImageKit/wiki/Similar-projects
You ship portable binaries? That's awesome, because we can possibly take those as-is and put them into the AppImage to get the added benefits, like
|
Yes, our binaries are very portable, and Natron is installed in a single directory. |
Cool! 👍 So basically you already have done all the work. An AppImage is just a self-mounting filesystem that executes whatever you put inside (e.g., your already portable application). The difference to a
Can you point me to the script that is doing the magic?
That's rather easy to do, basically just unpack your On a deb-based distribution, this does the trick:
This uses the recipe at https://github.com/AppImage/pkg2appimage/blob/master/recipes/Natron.yml.
Basically, you decide. Remember, an AppImage is just a self-mounting filesystem that executes whatever you decide to put inside.
Exactly the same as with your So, if you decide to provide an official AppImage, this would close a 5-year open ticket now: MrKepzie/Natron#120 💯 |
Can I access individual binary in the bundle through the command line (with pass-through commands) on the AppImage? example
|
@rodlie this can be done by using a custom It also allows one to symlink the AppImage under various command names (similar to how busybox works). |
Nice, will have a look when I get the time. |
One more thing. If I run a command from within the application what would the PATH be? Will applications inside the bundle have the highest PATH priority? |
Yes, if the |
Ok, thanks. |
Check those to get a flavor for what you can do in |
So, I tested AppImage today. It will be easy to add since the build system has already done all the work, we just need to add a couple of symlinks in the portable dir and make a squashfs filesystem of the directory. I can add support in the build scripts if wanted (up to Frédéric). I do however have some concerns regarding performance. The compression of the squashfs image impacts general performance. The more I compress the image the slower thing are. Starting Natron (on my rather old but functional dual core 2.5ghz laptop):
|
How did you make the squashfs image? Some slowdown is expected, but nowhere near the values you are getting. Something must be going wrong. Can you upload your AppImage or scripts for debugging please? |
When I do (on a deb based system)
then the resulting AppImage launches in about 20 seconds, 18 of which are spent on creating the fontconfig cache. Subsequent launches take about 4 seconds. |
I'm on my way out, but can upload files later tonight (or tomorrow). Example:
Everything works as it should, but load time is 18 secs. I used runtime from https://github.com/AppImage/AppImageKit/releases/download/continuous/runtime-x86_64 |
Is this true for the first launch or also for the subsequent ones? Caused by fontconfig? |
It's not fontconfig, I have the cache. I can see each plugin load (it's that slow). |
What happens if you use this to convert the AppDir into an AppImage?
|
Wouldn't snap be another good option, instead of appImage, although I use both and like appImage a little more? Snap is not easier to create it? |
With this tools( https://github.com/AppImageCrafters/appimage-builder) it is more easy to build and with these advantages: appimage-builder is a novel tool for creating AppImages. It uses the system package manager to resolve the application dependencies and creates a complete bundle. It can be used to pack almost any kind of applications including those made using: C/C++, Python, and Java. Featuring:
For information about the AppImage packaging format visit: https://appimage.org/ Having trouble? We’d like to help!
|
here for documentation https://appimage-builder.readthedocs.io/en/latest/ |
No need for anything complicated. I just spent 15 minutes writing a build script using the release tarballs (which work excellently and do not require any modifications on the binary side). Will send a PR ASAP. |
Returning to an idea I posted four years ago at MrKepzie/Natron#120, I would respectfully like to suggest providing an AppImage for Linux.
This would have, among others, these advantages:
appimaged
--appimage-extract
parameterHere is an overview of projects that are already distributing upstream-provided, official AppImages.
If you have questions, AppImage developers are on #AppImage on irc.freenode.net.
If there is interest in this, I'd be happy to help make it happen.
Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.
The text was updated successfully, but these errors were encountered: