Releasing for Ubuntu

Releasing for Ubuntu

本文关键字:Ubuntu for Releasing      更新时间:2023-10-16

我已经构建了一些C++软件,我想为Ubuntu发布。有什么方法,你能推荐什么?构建.deb文件并为它们设置一个apt-reo是最好的方法吗?make install呢?它被认为是一种可以接受的安装软件的方式吗?

到目前为止,对我来说最简单,对用户来说可能也是最透明的,就是有一个github存储库,在其中可以运行make install,一次性安装所有程序。

我是否总是将二进制文件安装到/usr/bin中?

其中一个程序包含Python 3库代码,应该安装在/usr/lib/python3/dist-packages中吗?(我不想创建一个pip包,这会使安装更加困难,并浪费更多的时间。)该程序还包含Python 3示例/教程,供用户调整和学习,我该在哪里安装这些示例/教程?我是否创建一个~/my-prog-tutorial-dir/来将它们放入?如果是:我应该如何命名该目录?

编辑:如果我只是在tarball中发布静态链接的二进制文件,那么最终会破坏什么?伦敦银行同业拆借利率?有没有什么主要的应用程序API通常会在Ubuntu LT之间发生变化?我只使用pthreads、X11和OpenGL,所以我怀疑静态链接的二进制文件可能是一个相当稳定的选项?

通常,构建二进制包会让用户更容易安装软件并保持最新。python包也是如此。通常有一些工具可以从pip包生成apt包,因此您可以将python代码列为二进制包的依赖项。

您可能认为打包和安装程序是在浪费时间,但仅提供源分发会浪费用户的时间。用户不想经常检查github的新版本,如果他们只想使用你的软件,他们通常也不想安装所有的构建依赖项。如果你的软件是针对开发人员的,这可能不是什么问题,但你的用户仍然需要做额外的工作。

对于示例,一般的约定是将它们放在python包中的/usr/share/doc/myprogram/samples或samples目录中。

我被要求在回答中扩展我的评论,我照做了。

我所说的项目名为Woodpecker hash Bruteforce,我将其作为Mac OS、Windows和Linux的纯存档可执行文件分发。

啄木鸟哈希Bruteforce只有两个依赖项我必须关心(用户不需要安装任何东西):OpenSSL和Botan库来进行哈希。我在Mac上有两个虚拟机,我在那里构建项目,还有几个脚本来自动化这个过程。我正在使用Docker(与VirtualBox合作)和VMware Fusion。

上面我说过,用户不需要担心任何第三方库,因为所有的东西都与可执行文件静态链接:你只需从官方网站下载合适的文件,解压缩(如果需要),sudo chmod +x可执行文件,就这样!

这适用于任何版本的Linux,包括Ubuntu(我在这里进行构建)和KaliLinux。

Miles Budnek已经指出,为Ubuntu发布软件的最佳方式取决于软件本身及其目标受众。

您的目标是降低软件使用的障碍。如果您的目标是软件的开发人员(即,您开发的源文件应该由其他人编辑),或者您正在开发的代码应该包含在其他项目中(例如,gnulib),那么最好只提供源代码和文档。

在我目前设想的任何其他情况下(包括针对开发人员的情况),提供预编译的二进制文件都是更好的选择。在这种情况下,最佳解决方案是在Ubuntu中安装软件。在这种情况下,如何让我的软件进入Ubuntu?提供了许多有用的信息,正如马克·K·所建议的那样

将软件引入Debian或Ubuntu可能很困难,可能需要大量时间(你必须遵守许多你可能不知道的政策,你必须找到赞助商),你很快就会明白,关键是要为你的软件使用一个体面且流行的构建系统(例如,自动工具、cmake、distutils…),正如Debian Upstream Guide中提到的那样。遵守该指南对其他发行版的用户也有好处。

一般来说,我建议按以下顺序进行:

  1. 提供来源
  2. 使用通用构建系统(从系统管理员的角度来看,即安装软件的人,根据我对Posix系统的经验,自动工具效果最好)
  3. 创建一个二进制包(请记住,您必须维护它,否则您的用户可能会遇到二进制不兼容)
  4. 在私有存储库中添加包(我建议适合此任务)
  5. 试着在选择的分发中获得包(请记住维护成本)

我不建议的另一个选项是提供静态链接的构建。这降低了二进制不兼容的可能性,但增加了错误修复(例如,如果错误是依赖项)和安全性的成本,如本评论和以下评论所述。避免静态链接的另一个原因是,如果存在相同ABI的多个实现,以便利用硬件加速(例如OpenGL),但您也可以混合静态和动态链接。

最后,您还可以提供一个容器,比如docker,来运送您的软件及其所有依赖项:您的用户只需要docker就可以非常方便地运行您的应用程序。然而,在大多数情况下,它可能过于夸张,它是否是一个实用的解决方案取决于您的应用程序和目标受众。