immense / Remotely

A remote control and remote scripting solution, built with .NET 8, Blazor, and SignalR.
GNU General Public License v3.0
4.57k stars 1.61k forks source link

Make AppImage for Linux Client #193

Open bmcgonag opened 3 years ago

bmcgonag commented 3 years ago

The usefulness of this application is outstanding. The limitation to certain Linux distributions on the client side is a bit disheartening, as with any OS most users seeking support don't have much know-how when it comes to installation of software beyond "the norm".

Instead of requiring dependency installation separate from the client app, bundling everything into an AppImage would make it much simpler to walk an end user through downloading and running the client.

bmcgonag commented 3 years ago

Maybe it is an app image, but requires install of dependencies separately?

stevesobol commented 3 years ago

I think what we really want is a package: rpm for Red Hat-based distros, and and apt for Debian-based distros.

I can do this. I can create apt packages in my sleep, and it's been a while since I last created an RPM, but I can do that too. Just need to brush up on the details. :)

Furthermore, I'm running Sonatype Nexus, which allows me to host both APT and RPM repos - in fact, I have a private APT repo I'm using in production right now.

Jared, what do you think?

bitbound commented 3 years ago

I kind of like the idea of an AppImage (with a lot of "buts" to follow). Back when this project was called DoXM and had an Electron client, it was really easy to publish the app in AppImage format. And it would just work anywhere.

After looking at the AppImage documentation, though, it seems like it'd be quite a bit of work. If I'm understanding it correctly, anyway. It looks like you'd need to gather all the native dependencies and include them in your project. Would you need separate binaries for each distro you intend to support, plus each architecture, plus each version? I'd imagine you would.

Then you'd need to determine at runtime what environment you're in and load the appropriate libraries dynamically.

And where would these libraries go? In source control? That wouldn't be good. You'd probably need to make NuGet packages for them.

Then figure out how to build the AppImage in both GitHub Actions and Azure DevOps (which I use for my test and public servers). Can you build an AppImage on Windows? If not, you'd have to chain together multiple build jobs across Windows and Linux to get the final output.

It's a lot of work for a relatively small audience (compared to Windows).

With that said, I think having it distributed via package managers makes the most sense, since it can handle dependencies for each distro. If you feel so inclined, please have a go at it! :) If there's anything I can do to help facilitate it, let me know.

bitbound commented 3 years ago

Then you'd need to determine at runtime what environment you're in and load the appropriate libraries dynamically. On second thought, I don't think any of them need to be loaded into memory via platform invoke.

But anyhow, is there any way to require an app to be run as sudo? Like how Windows executables can be be compiled to require admin? Or a way to install from the package manager in a local context that doesn't require sudo? If so, I could install the dependencies via the package manager on the first launch.

bmcgonag commented 3 years ago

I've really just started looking into the build process of appimages, but there is an appimage-builder that seems to have a lot of "automated" things happening. It can apparently pull out the dependencies and auto generate a .yml build file, then you have to make some modifications. But when it's done with the build it builds the app for Debian, Ubuntu, RedHat / Fedora, Arch, and maybe one other distribution.

Might end up being worthwhile, but I definitely need to understand it better, and understand the requirements of the build process. Perhaps I can use your Files Only package to build it, but don't know yet. I appreciate the thought and consideration around the request.

stevesobol commented 3 years ago

There's nothing stopping you from making an AppImage. I won't, because I'm not familiar with the process. But you can.

stevesobol commented 3 years ago

@lucent-sea I have the APT and DEB packages covered. You may want to create a CNAME pointing to my Nexus server, but I need to double check to confirm whether that's even doable - I've never tried to get the server to answer to anything other than repos.lobosstudios.com. Anyhow, that's optional, and not necessary right now.