Releasing for Ubuntu
Releasing for Ubuntu
我已经构建了一些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中提到的那样。遵守该指南对其他发行版的用户也有好处。
一般来说,我建议按以下顺序进行:
- 提供来源
- 使用通用构建系统(从系统管理员的角度来看,即安装软件的人,根据我对Posix系统的经验,自动工具效果最好)
- 创建一个二进制包(请记住,您必须维护它,否则您的用户可能会遇到二进制不兼容)
- 在私有存储库中添加包(我建议适合此任务)
- 试着在选择的分发中获得包(请记住维护成本)
我不建议的另一个选项是提供静态链接的构建。这降低了二进制不兼容的可能性,但增加了错误修复(例如,如果错误是依赖项)和安全性的成本,如本评论和以下评论所述。避免静态链接的另一个原因是,如果存在相同ABI的多个实现,以便利用硬件加速(例如OpenGL),但您也可以混合静态和动态链接。
最后,您还可以提供一个容器,比如docker,来运送您的软件及其所有依赖项:您的用户只需要docker就可以非常方便地运行您的应用程序。然而,在大多数情况下,它可能过于夸张,它是否是一个实用的解决方案取决于您的应用程序和目标受众。
- "error: no matching function for call to"构造函数错误
- 表示"accepting anything for this template argument" C++概念的通配符
- 如何在C++中从两个单独的for循环中添加两个数组
- 在Ubuntu 16.04上安装Cilk时出现问题
- 在Linux for Windows上编译C++代码时出错
- 调用专用模板时出错"no matching function for call to [...]"
- 为什么我的for循环不能正确获取argv
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 如何在 Ubuntu 上安装 OpenCV for C/C++
- 在 ubuntu 上交叉编译 openCV for ARM
- 在 Ubuntu for Windows 上构建 QT5 项目
- Sublime Text 3 Build System for Ubuntu
- Releasing for Ubuntu
- boost 1.49 for ubuntu and libboost_date_time
- 如何在Linux(Ubuntu)中调整Qt Creator for VTune放大器
- "Cannot execute binary file"在 Ubuntu for Windows 平台上使用 Eclipse 运行编译的 c++ 程序时
- Is there Boost 1.5.3 package for Debian/Ubuntu?
- 在 Ubuntu QT 上构建时出现"QMetaObject::connectSlotsByName: no match signal for"错误
- Using GMP for C++ Ubuntu 12.04