如何为一个可运行的程序创建PPA?

假设我有一个用C、C++或Python编写的工作应用程序。我想创建一个Launchpad PPA,以便其他人可以轻松地从软件包中安装它。请提供从头到尾的逐步说明(或提供一个能够做同样事情的链接)。
  • 编程语言是否重要?(可以是bash脚本吗?)
  • 我需要在构建中添加什么吗?
  • 构建应该安装到哪里?
  • 如何定义依赖关系?
  • 如何使用依赖关系?
  • 如何创建.deb文件?
  • 上传到Launchpad之前需要做什么?

1我问这个问题是因为我偶尔会建议FLOSS项目创建一个PPA(这样我就可以轻松安装它们了 :) - 我希望能够向他们指出一个详尽的资源,或者自己能够做到。 - lofidevops
2个回答

这是一个非常广泛的问题。我会尽力回答,但绝对不会给出一步一步的指导。这是因为创建软件包没有一套固定的算法。你的操作方式取决于许多因素,主要包括软件包的类型(应用程序、库)、源代码的结构以及其他细节。
幸运的是,在http://packaging.ubuntu.com上有一份详尽的指南。
我会尽量帮助你理解整个过程,当你对此有更多了解时。打包指南中还提供了其他帮助资源。
首先,你应该意识到创建一个软件包(.deb文件)是一个独立的过程,与创建PPA不同。创建PPA只需要进入你的Launchpad个人资料页面,然后点击“创建新的PPA”链接。就这样。它被创建了,它可以工作,但是它是空的。要上传一个软件包,你必须先创建一个。但是让我先回答一些你的小问题。
编程语言完全不重要。它可以是C++应用程序、Bash脚本、Brainfuck Hello World、单个README文件或一组酷炫的照片。安装过程中,软件包将被提取到根目录("/")下的文件系统中。这样,他们可以将一些文件放在二进制文件夹中,向GNOME默认集合添加一些壁纸,或者提供一个Bash脚本给用户。
你需要在源代码中添加一个顶级目录名为"debian"。其中会有一些包含软件包详细信息的文件,这些文件将用于定义软件包的类型等。
依赖关系将在其中一个文件中列出(以及其他详细信息)。从哪里获取它们?它们只是你的应用程序使用的其他软件包。应用程序的开发人员会知道他的程序需要哪些库和资源,所以列出它们应该不会有太多麻烦。
构建软件包的一些工具(如pbuilder)可以自动填充依赖关系,可能是通过在编译过程中确定应用程序需要的内容。
强烈建议使用AutoTools。这是另一项你可能需要添加的东西,但几乎每个软件都已经在使用它们了。AutoTools是一套非常有帮助的程序,其中包括automake、autoconf和autoscan等。当你使用著名的"./configure && make && make install"编译和安装程序时,autotools会自动处理源代码,准备与源代码一起提供的其他资源,并将编译结果提取到适当的位置(回答你的问题:构建过程将提取到许多不同的位置。二进制文件将放在/usr/local/bin目录下,文档将放在/usr/local/share/docs目录下等等。此外,软件包中的二进制文件将放在不同的位置,例如二进制文件将放在/usr/bin目录下。如何处理这个复杂的目录布局?使用AutoTools - 它会自动处理,这就是它们如此有用的原因)。

构建一个 .deb 包可能看起来是一个非常复杂的过程,但其实并不那么困难。我强烈推荐你阅读官方 Ubuntu 创建软件包的指南:http://packaging.ubuntu.com

这个指南内容非常庞大,但你会发现你可能可以跳过大部分内容(取决于你要构建的软件包)。基本上,打包过程由以下几个部分组成(所有内容都在指南中有清晰的解释):

  1. 初始化一些用于构建软件包的工具。
  2. 获取源代码。
  3. 创建./debian目录并填充所需数据。
  4. 使用debuild构建软件包(这将创建一组文件,包括*.dsc、*_source.build和*_source.changes,它们负责软件包的数据和处理方法(还会有一个源代码.tar.gz文件))。
  5. 通过在本地运行pbuilder测试一切是否正常工作(它会使用上述提到的所有文件尝试将它们合并成.deb软件包,通过自动构建源代码来实现-这就是为什么它们对于打包至关重要的原因(坦率地说,也可以不使用它们或使用一些替代方案,但这是最简单的方法,其他方法可能需要一些高级设置,因为您需要指示构建器如何构建源代码(使用./debian/rules文件)- 但这不适合初学者)- 如果您只想获得一个.deb软件包,那就完成了。
现在你需要将其上传到你的PPA中,关于如何上传的说明可以在这个帮助页面上找到:https://help.launchpad.net/Packaging/PPA/Uploading
  1. 使用dput将这些文件上传到Launchpad。
  2. Launchpad会在他们的计算机上运行pbuilder,并在一个干净的环境中生成软件包。
  3. 最后,这些软件包应该会出现在PPA中。
正如你所见,创建PPA并不是那么简单。但是不要害怕,它也并不是那么困难。此外,我建议你不要鼓励开发者使用PPA,因为他们可能不会听你的,因为他们需要做一些额外的工作(如果他们想要的话,他们早就已经做了),但是你可以尝试支持Ubuntu开发者和整个社区,并提供你准备好的软件包 :)
祝你创建软件包顺利,希望我的回答对你有帮助 :)
你的朋友, Rafał Cieślak

如何创建一个非Launchpad PPA,并托管在自己的基础设施上?只需要一个简单的Web服务器和相应的目录结构吗? - Prof. Moriarty
脑f*ck的例子真的有必要吗? - Camden

在您上传软件包之前,您需要为.deb打包进行设置,请参阅Ubuntu的PackagingGuide
一旦您可以为您的软件构建一个软件包,请查看Launchpad的PPA文档。它将指导您从创建PPA到上传软件包的过程。