我想重建 Debian 软件包“postfix”。没有任何花哨的东西,所以没有本地补丁和未签名的包就可以了。
这是我尝试过的:
安装一些依赖项:
$ apt install fakeroot git-buildpackage $ apt build-dep postfix
(我的构建机器上的 Postfix 与我尝试构建的版本相同/相似,因此这应该可以很好地安装大多数构建依赖项。我也没有任何构建依赖项问题。)
克隆 Debian 源:
$ git clone https://salsa.debian.org/postfix-team/postfix-dev.git
在撰写本文时,该值指向 c21140525af28be0e1bacd932e85b96babe6ca98(标签:v3.3.2-4)。
cd 进入克隆:
$ cd postfix-dev
IIUC,我现在应该能够使用如下命令构建包
$ gbp buildpackage -uc -us
(有两个选项可以制作未签名的包。)
然而,最后一步会导致错误:
gbp:error: upstream/3.3.2 is not a valid treeish
答案1
这个软件(Postfix)似乎不是来自上游 git,而是手动导入到该存储库中的标签中。该标签v3.3.2
似乎反映了上游源(它不包含目录debian/
)。
看来这个存储库不符合格式中的默认标签名称upstream/<version>
,这可能是维护者的错误或个人偏好。
请参阅git-buildpackage 的联机帮助页对于以下两个选项:
--git-upstream-tree=[BRANCH|SLOPPY|TAG|TREEISH] How to find the upstream sources used to generate the tarball. TAG (the default) [...] --git-upstream-tag=TAG-FORMAT Use this tag format when looking for tags of upstream versions to build the upstream tarballs. Default is upstream/%(version)s. [...]
这意味着您可以手动将 git 中的任何头指向上游分支。命令
$ gbp buildpackage --git-upstream-tag='v%(version)s' -us -uc
将很好地构建 Postfix 包!
重要的!您可能需要完全清理 git 存储库,否则即使git status
告诉您一切都干净,您也可能会在检查本地修改的文件时遇到失败。
为了更有效地获取自动化构建,这里有一个仅获取必要内容来构建 Postfix 的方法:
# Fetch Debian-version tag (notice the -<digit> suffix).
$ git clone -b v3.3.2-4 --depth 1 https://salsa.debian.org/postfix-team/postfix-dev.git
$ cd postfix-dev
# Fetch the upstream tag
$ git fetch --depth 1 origin refs/tags/v3.3.2:refs/tags/v3.3.2
# Because we're not on 'master' (not on any branch actually), we need to add
# the --git-ignore-branch option.
$ gbp buildpackage --git-upstream-tag='v%(version)s' --git-ignore-branch -us -uc