如何在Linux上实现Electron应用程序的自动更新?

12

我使用Electron创建跨平台应用程序。 对于Windows和Mac,可以使用Electron工具如autoUpdate,Squirrel等来完成。但Linux存在问题。我为Ubuntu构建了.deb软件包,但是无法找到任何“逐步”说明或全面信息。

我不熟悉Java,也没有在Linux上创建应用程序的经验。

因此,主要问题是:

  1. 使用发行版软件包管理器的标准自动更新过程是什么?谁应该下载和安装更新并重新启动应用程序。
  2. 解决此问题的其他方法有哪些? 创建自定义更新的最佳实践是什么?
  3. .deb,.rpm软件包之间有什么区别,Ubuntu和Fedora之间有什么区别?

所有信息都将有所帮助,即使信息与Electron应用程序无关。

4个回答

7

Appimages

您可以使用electron-builder创建Appimages,以便在任何Linux发行版中安装或自动更新您的应用程序。

AppImage是一种通用的软件包格式。通过将软件打包成AppImage,开发人员提供了一个“统治它们所有”的文件。最终用户(即您)可以在大多数(如果不是全部)现代Linux发行版中使用它

如果您想要自动更新您的应用程序,还需要electron-autoupdater。目标平台:

  • MacOS:DMG。
  • Linux:AppImage
  • Windows:NSIS

您可以在此处找到一个使用此技术的项目示例。重要文件包括:package.json, updater.js, updater_renderer.js。请注意,保留HTML标签。

按照这些说明,您可以创建安装程序:

yarn electron-builder --linux --x64
yarn dist_linux                        # shortcut in package.json

deb, rpm

您可以使用electron-builder创建deb或rpm等软件包,但是要自动更新它们取决于您如何分发它们,正如Jens在他的回答中所说。最终用户可能需要添加apt存储库以保持最新。


7

在*nix世界中,真的没有什么标准。您将始终需要支持特定的发行版,而每个发行版又可以有多种可能的自动更新程序。

对于您的问题:

  1. 没有标准方式。

  2. 这取决于您实际分发软件的方式。如果您计划使用像rpm/apt-get/apt install这样的包管理器,则每个管理器都有一种特定的方式来配置您的应用程序,使其成为那些被检查自动更新的软件包之一。

  3. .rpm/.deb之间的区别:

    对于软件包维护者(我认为在Debian术语中是“开发人员”),主要区别是软件包元数据和伴随脚本的组合方式。链接

    Ubuntu和Fedora之间的区别:由于创建详细答案会过于冗长并且维护成本太高,请查看这篇博客文章,其中详细介绍了这两个发行版之间的差异。


好的,谢谢。我理解了,创建自定义的自动更新机制是一种正常的做法,对吧? - Gleb
您至少需要针对每个Linux发行版进行定制,其中一些可能具有自定义的自动更新程序。 - Jens Habegger
不是的。最好的方法是创建一个软件包。当您发布更新时,将其放入存储库,让用户决定何时以及如何更新应用程序。 - msuchy
1
这取决于需求。在我的当前项目中,有一个要求是当服务器上有新的构建可用时,必须立即更新应用程序。在这种情况下,并不考虑用户是否决定更新或不更新。是的,这不是通常的桌面应用程序,而是企业级应用程序。 - Sneg

3

Jens的回答确实是最好的。

但是,如果您不想花时间学习RPM和DEB以及为所有发行版构建软件包,那么您可以考虑使用Flatpak打包您的应用程序。 http://flatpak.org/#about

它将创建一个大的存档文件,可在Ubuntu、RHEL等任何地方运行。


3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接