我已经为Ubuntu构建了一些我想要发布的C ++软件。有什么方法,你能推荐什么?正在构建.deb个文件并为他们设置apt repo最佳方式吗?那么make install
,它被认为是一种可以接受的软件安装方式吗?
对我来说最简单,也许对用户来说最透明,就是只有一个github存储库,其中一个可以运行make install
来一次性安装所有程序。
我是否始终将二进制文件安装到/usr/bin
?
其中一个程序包含Python 3库代码,是否应安装在/usr/lib/python3/dist-packages
中? (我不想创建一个pip
包,这将使安装更加困难 - 并浪费更多的时间。)该程序还包含Python 3示例/教程,供用户调整和从中学习,在哪里安装?我是否要创建一个~/my-prog-tutorial-dir/
来加入它们?如果是这样的话:我应该如何命名该目录?
编辑:如果我只是在tarball中释放静态链接的二进制文件,最终会破坏什么? libc库?是否有任何主要的应用程序API通常在Ubuntu LTS之间发生变化?我只使用pthreads,X11和OpenGL,所以我怀疑静态链接的二进制文件可能是一个相当稳定的选项?
答案 0 :(得分:2)
通常,构建二进制包会使您的软件更容易安装并保持最新。 python包也是如此。通常有工具从pip包生成apt包,所以你可以只列出你的python代码作为你的二进制包的依赖。
您可能会看到打包和安装程序浪费您的时间,但只提供源代码分发会浪费您的用户和#39;时间。用户不想经常检查github的新版本,如果他们只是想使用你的软件,他们通常不想安装你所有的构建依赖项。如果您的软件面向开发人员,那么这可能不是一个问题,但它仍然是您的用户必须经历的额外工作。
至于示例,一般约定是将这些放在python包中的/ usr / share / doc / myprogram / samples或samples目录中。
答案 1 :(得分:1)
发布软件 Ubuntu的最佳方式取决于软件本身及其目标受众,正如Miles Budnek已经指出的那样。
您的目标是降低软件使用的障碍。如果您的目标是软件的开发人员(即,您开发应该由他人编辑的源文件),或者您正在开发应该包含在其他项目中的代码片段(例如,gnulib),那么最好是提供来源和文件。
在我目前想象的任何其他情况下(包括您定位开发人员时),提供预编译的二进制文件是更好的选择。在这种情况下,最佳解决方案是将软件置于 Ubuntu中。在这种情况下,How to get my software into Ubuntu?提供了许多有用的信息,如Mark K所示。
将软件加入Debian或Ubuntu可能很困难,可能需要大量时间(您必须遵守许多您可能不知道的政策,并且必须找到赞助商),您很快就会知道关键点是使用适合您软件的流行构建系统(例如,autotools,cmake,distutils,......),如Debian Upstream Guide中所述。符合指南也将有益于其他发行版的用户。
一般情况下,我建议按此顺序进行:
我不建议的另一个选择是提供静态链接的构建。这降低了二进制不兼容的可能性,但增加了错误修复的成本(例如,如果错误是在依赖中)和安全性,如this和后面的注释中所述。避免静态链接的另一个原因是,如果存在相同ABI的多个实现,以便利用硬件加速(例如,OpenGL),但是您还可以混合静态链接和动态链接。
最后,您还可以提供一个容器,如docker,以运送您的软件及其所有依赖项:您的用户只需要docker来非常便携地运行您的应用程序。然而,在大多数情况下它可能有点过分,如果它是一个实用的解决方案,取决于你的应用程序和目标受众。
答案 2 :(得分:1)
我是asked在答案中扩展我的评论,所以我这样做。
我所谈论的项目名为Woodpecker hash Bruteforce,我将其作为Mac OS,Windows和Linux的普通存档可执行文件分发。
Woodpecker hash Bruteforce只有两个我必须关心的依赖项(用户不需要安装任何东西):OpenSSL和Botan - 要进行散列的库。我在我的Mac上有两台虚拟机,用于构建项目和几个脚本以自动执行该过程。我使用Docker(与VirtualBox合作)和VMware Fusion。
上面我说用户不必担心任何第三方库,因为所有内容都与可执行文件静态链接:您只需从官方网站下载相应的文件,取消存档(如果需要) ),sudo chmod +x
可执行文件,那就是它!
这适用于任何版本的Linux,包括Ubuntu(这是我执行构建的地方)和Kali Linux。