我有一个 Electron 程序,想在所有三个主要操作系统上分发。在 Windows 和 macOS 上发布非常简单;一个安装文件就完成了,而且这些操作系统的用户习惯于通过互联网独立更新应用程序。
对于 Linux,我有几个问题:
- 我有很多包管理器需要维护
- 我需要通过某种包管理器来更新我的包,这样更方便,不需要连接到互联网和“打电话回家”
有几种方法可以解决这个问题,但都不是很好。
- AppImages、Snaps 和 Flatpaks 是独立的环境,会产生开销。 AppImages 是独立的,因此更新起来很烦人,而 Snaps 默认情况下会自动更新(不用了,谢谢)。 Flatpak 和 Snapd 也很少默认安装。
- 除了维护至少三个软件包(例如 AUR/APT/RPM)带来的严重不便之外,PPA 根本无法在 Debian 上运行。
- 提供二进制文件或 tarball 对我来说是最简单的,但对最终用户来说不方便,而且我无法提供常规更新。
是否有某种工具可以轻松地将我的二进制文件分发到大多数发行版包管理器?还有其他我错过的神奇解决方案吗?或者说提供一个可访问的 Linux 软件包真的这么难吗?
答案1
如果您想直接分发给用户,通常只需在文件中提供源即可.tar.gz
。用户提取它并运行./configure && make && sudo make install DESTDIR=/usr/local
您记录的某种等效内容。
制作 Windows/MacOS 安装程序和执行我刚才所说的操作之间的区别在于分发源代码与二进制文件。如果您愿意,可以部署二进制文件。
如果您想部署 arch、deb 或 rpm 包,请考虑使用cpack
.如果您已经使用cmake
.只需在底部添加一些命令CMakeLists.txt
,然后cpack
将使用install
您已经编写的命令以您选择的格式组装存档。有很多发电机可用支持您提到的格式等。
您问的下一个问题是关于如何部署此安装程序。对此没有简单的跨发行版答案。但是 Windows/MacOS 的等效项将使用 Windows/Apple 商店,并且我认为您没有走这条路,因此您已经处于“等效”状态。您似乎对直接部署更感兴趣,而不是通过发布者提交。
如果让用户更新对您来说很重要,您可以:
- 收到通知,告知他们应该下载最新版本(就像许多 Windows 应用程序一样),
- 从您的服务器自动更新
/etc/apt/sources.list.d/myrepo.list
通过初始直接下载部署您自己的*.deb
版本并维护您自己的存档(并对其他发行版执行相同的操作)。我用reprepro
这个。
最后,我认为snaps
、appimage
或flatpak
也是替代方案。