Apt/RepoDocs
本页面记录了 apt.postgresql.org 的软件包和仓库工作流。
软件包
存储库中的几乎所有软件包都是 Debian 不稳定版 (又称为 sid) 中软件包的重建。除了在 debian/changelog 中添加一个将“".pgdgNN+X"”后缀添加到版本号的新条目之外,大多数软件包都未经修改地重新构建。
添加后缀的原因有以下两个方面
- 添加的“".pgdg"”明确标记了此软件包的来源;每个 .deb 文件的名称中都会有“".pgdg"”。
- “NN+X”部分确保了 dist 升级可行:.pgdg60+1 (squeeze) < .pgdg70+1 (wheezy) < .pgdg+1 (sid),而 .pgdg10.4 (lucid) < .pgdg12.4 (precise) < .pgdg14.04 (trusty)。(Ubuntu 原始的版本号拼写方式是前面带零,但我们选择不更改当初为 lucid 和 precise 确定的字符串。)
需要构建软件包多次,才能生成各种发行版(Debian 术语为“发布”)和架构组合的源软件包和二进制软件包。目前(2014 年初), (squeeze+wheezy+sid+lucid+precise+trusty)*(amd64+i386) = 12。
构建脚本
使用的所有脚本都在 git 仓库中维护:http://git.postgresql.org/gitweb/?p=pgapt.git;a=summary。虽然这里仍有一些陈旧内容,“jenkins”和“repo”子目录包含当前使用的脚本。
软件包构建分两个步骤进行:生成源软件包和构建二进制软件包。
源软件包生成
大多数软件包都是使用托管 Debian 软件包的 VCS(即 Debian/unstable)构建的。一些软件包改用不稳定的“apt-get source”。针对签出(或不稳定的解包源软件包),“generate-pgdg-source”脚本会生成源软件包(.dsc 文件)。这通常只是上面提到的新变更日志条目,但这里会对部分软件包应用特殊调整,无论是否有条件,还是取决于目标发行版(例如在 lucid 上,对 .deb 文件的 xz 压缩支持不受支持,所以这里需要使用 sed/awk 将其移除)。
针对每个目标发行版重复此步骤一次。
构建二进制软件包
然后将源软件包提供给 cowbuilder(pbuilder 变体),它可以构建二进制 .deb 软件包。针对此目的使用的脚本是“build-and-provide-package”,从 jenkins-debian-glue 项目中进行了轻微修补。(我们不使用脚本的“provide”部分,只使用“build”部分。)
如果软件包具有该特性,这个脚本还会调用 debian/tests/* 中的 autopkgtest 测试套件。这个步骤是从 jenkins/pbuilder-hookdir 中的 pbuilder 钩子调用的。
这个步骤针对每个分发和架构组合重复执行一次。
在 Jenkins 中自动化
以上所有步骤都是使用 Jenkins 自动化的。
存储库布局
存储库是一个标准的“reprepro”设置。