跨发行版/操作系统打包

跨发行版/操作系统打包

Fedora、FreeBSD、OS X(Homebrew、MacPorts)、Ubuntu、Debian 等都使用不同的打包系统进行二进制和源代码分发。

当我开发一个新应用程序时,我希望立即将其提供给尽可能多的用户。但学习所有不同的打包工具和约定是一项艰巨的工作。我可以做到,但必须有更简单的方法。

是否有一个我应该知道的超级工具可以用来减轻维护和学习所有这些包装系统的开销?

答案1

最简单的方法是提供源档案并让发行版维护者为自己的发行版制作软件包。

您可以轻松地制作一个普通的二进制存档 ( .tar.gz) 并将其转换为 a.deb和 a .rpm,这将覆盖大多数 Linux 用户,但它不会像正确制作的包那样有用。以正确的格式获取二进制存档只是冰山一角。制作一个好的包装需要以下条件:

  • 将文件放置在适当的目录中。虽然FHS虽然尝试统一 Linux 目录结构,但发行版之间仍然存在差异。
  • 针对正确版本的库进行编译。这有多困难取决于您的程序是否依赖于 ABI 快速发展的库。同一发行版的不同版本可能需要不同的软件包,因为它们附带不同的库版本。
  • 使用正确的包名称声明依赖项。
  • 声明菜单项、MIME 处理程序、文档、启动脚本……

通常让熟悉每个发行版的人来制作一个包会更容易。通常,您可以将这些贡献收集到单个源代码包中(包含debian目录、.specrpm 文件等),并分发源代码档案,然后让运行每个发行版的人员为其发行版制作一个包。除非您对程序进行了重大更改,否则一旦您使特定发行版正常工作,较新的版本可能只会使用相同的构建脚本。

一些发行版具有构建和分发包的自动化机制。例如,你可以制作一个Ubuntu苯丙胺并针对所有受支持的 Ubuntu 版本自动构建它,即使您没有运行 Ubuntu。

答案2

你可能会考虑氟PM这是一个帮助轻松构建所有不同打包格式的包的工具。

答案3

吉尔斯的回答,至少对于 GNU/Linux 发行版来说,事情现在没有什么变化,几乎没有新的跨发行版包装,例如:Flatpak/Flathub、Snap/Snapcraft、AppImage...甚至 Homebrew 和 NixOS。

将打包留给熟悉平台或其工作流程和策略的开发人员仍然是明智的,但上述大多数都有单独的安装目录,并且一些支持限制/监禁。因此,您可以自由地构建应用程序。

答案4

尝试研究一下 AppImage 包装 MyPaint 和 Krita 使用它,它太棒了!它们为您提供单个映像文件,您将其设置为可执行文件,并且您不必担心版本控制,或者是否安装了其他软件包,这可能会发生冲突并使您的软件不稳定。这有点像一个文件中的整个 docker 系统。最重要的是,您不需要安装任何东西!

一探究竟...

Appimage.org

相关内容