Ubuntu 发布

Releasing for Ubuntu

我已经构建了一些 C++ 软件,我想为 Ubuntu 发布。有什么方法,你能推荐什么?为他们建造 .deb files and setting up an apt repo 是最好的方法吗? make install,它被认为是一种可接受的软件安装方式吗?

对我来说最简单的,也许对用户来说最透明的,就是有一个 github 存储库,可以在其中 运行 make install 安装所有程序一口气。

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

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

编辑: 如果我简单地在 tarball 中发布静态链接的二进制文件,最终会破坏什么?库?是否有任何主要应用程序 API 通常会在 Ubuntu LTS 之间发生变化?我只使用 pthreads、X11 和 OpenGL,所以我怀疑静态链接的二进制文件可能是一个相当稳定的选择?

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

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

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

Ubuntu 发布软件的最佳方式取决于软件本身及其目标受众,正如 已经指出的那样。

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

在我目前想象的任何其他情况下(包括当您针对开发人员时),提供预编译的二进制文件是更好的选择。在这种情况下,最佳解决方案是让软件 in Ubuntu。在这种情况下 How to get my software into Ubuntu? provides a lot of useful information, as suggested by .

将软件引入 Debian 或 Ubuntu 可能很困难并且可能需要大量时间(您必须遵守许多您可能不了解的政策并且必须找到赞助商)您很快就会了解到,关键是要为您的软件使用合适且流行的构建系统(例如,autotools、cmake、distutils 等),如 Debian Upstream Guide 中所述。遵守指南也将对其他发行版的用户有益。

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

  1. 提供来源;
  2. 使用通用的构建系统(从系统管理员的角度来看,即安装软件的人,根据我的经验,autotools 在 Posix 系统上效果最好);
  3. 创建二进制包(请记住,您必须维护它,否则您的用户可能会遇到二进制不兼容问题);
  4. 在私有仓库中添加包(我建议 aptly 完成此任务);
  5. 尝试在选择的发行版中获取包(请记住维护成本)。

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

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

想在回答中扩展我的评论,所以我这样做了。

我正在谈论的项目称为 Woodpecker hash Bruteforce,我将其作为 Mac OS、Windows 和 Linux 的普通存档可执行文件分发.

Woodpecker hash Bruteforce 只有两个我需要关心的依赖项(用户不需要安装任何东西):OpenSSL 和 Botan - 用于哈希的库。我在我的 Mac 上有两个虚拟机,我在其中构建项目和几个脚本来自动执行该过程。我正在使用 Docker(与 VirtualBox 合作)和 VMware Fusion。

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

这适用于 Linux 的任何版本,包括 Ubuntu(这是我执行构建的地方)和 Kali Linux。