我需要使用特殊标志编译的 nginx,因此我从 nginx 稳定 PPA(apt-get 源)中获取源代码,更改 debian/rules,使用 debuild/dpkg-buildpackage 构建和打包它,然后安装了必要的 .debs ——到目前为止一切顺利。
现在,APT 只想将我的本地软件包与存储库中的软件包进行切换。这有点令人费解,因为两个软件包的版本完全相同:
$ dpkg -l nginx-full
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Description
+++-=======================================-=======================================-==============================================================================================
ii nginx-full 1.2.1-0ubuntu0ppa1~precise nginx web/proxy server (standard version)
和
$ sudo apt-get upgrade -s
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
nginx-full
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst nginx-full [1.2.1-0ubuntu0ppa1~precise] (1.2.1-0ubuntu0ppa1~precise Stable:12.04/precise [amd64])
Conf nginx-full (1.2.1-0ubuntu0ppa1~precise Stable:12.04/precise [amd64])
为什么会发生这种情况?阻止这种情况的最佳方法是什么?理想情况下,APT 应该只提供严格较新的版本来升级我的软件包,这将提示我用最新的源代码重建修补后的版本。
我遇到过这种情况错误报告这看起来非常相关,但由于它没有包含令人满意的解决方法,所以我将这个问题保留为开放状态。
答案1
您可以使用版本号来管理哪些内容需要更新,版本号是在将软件包构建到 deb 中时,源软件包中 debian/changelog 的顶行中设置的。如果您想要与 PPA 中的版本不同的版本,则需要将自己的版本号设置为大于 PPA 中的版本号。
需要注意的是,1.2.3-1ppa1~2 是较少的比 1.2.3-1ppa1 更差,因此apt-get upgrade
将升级到 1.2.3-1ppa1。(“~” 中有一个神奇的符号,较少的比任何东西都重要,包括版本号的结尾。我看到你和 PPA 的软件包版本号中都有这个符号。