如何设置 debian/control 来强制更新库?

如何设置 debian/control 来强制更新库?

这个问题针对 PPA/packages 维护者。

我有一个包含两个软件包的 PPA:

  • mypackage(当前版本 1~ppa1~quantal)
  • mypackagelib(当前版本 1~ppa1~quantal)

目前,mypackage 的控制文件有:

Depends: mypackagelib

我想将这 2 个包更新到版本“2”(mypackage 版本 2 和 mypackagelib 版本 2)。

如何确保当用户更新“mypackage”时这两个包也会更新?

仅供参考,将“取决于”字段更改为:

Depends: mypackagelib (>= 2)

不起作用,并返回以下错误:

mypackage : Depends: mypackagelib (>= 2) but mypackagelib-2~ppa1~quantal is to be installed

答案1

您的版本号不一致。版本号的顺序关系非常复杂。Debian 政策手册。 尤其:

首先确定每个字符串的初始部分,这些部分完全由非数字字符组成。对这两个部分(其中一个部分可能为空)进行词汇比较。如果发现差异,则返回差异。词汇比较是 ASCII 值的比较,经过修改,所有字母都排在所有非字母之前,波浪号排在任何部分之前,甚至是部分的末尾。例如,以下部分按从最早到最新的顺序排序:~~、~~a、~、空部分、a。

尤其是,3.196~ppa1~quantal被认为比 更旧3.196。 的典型用例~是 beta 版本:1.42~beta3早于1.42。您可以通过运行来检查您对 Debian 软件包版本号的理解dpkg --compare-versions

$ dpkg --compare-versions '3.196~ppa1~quantal' '>=' '3.196'; echo $?
1

0 表示满足顺序关系,1 表示不满足。

关于版本号的建议有些不完整PPA 打包帮助。由于您的软件包不在 Ubuntu 中,因此您不需要后缀~;您应该使用类似这样的版本号3.196ppa1。源依赖项可以是(>= 3.196)3.196 的任何版本是否都可以,或者类似于(>= 3.196ppa5)您是否至少需要某个软件包版本。

如果将 保留~在此处,则也必须将其放入源依赖项中:(>= 3.196~ppa1~quantal)。要说“至少与主包相同版本”,请写

Depends: mypackagelib (>= ${binary:Version})

另一种可能性(谢谢 风滚草3.196~是声明对(数字和波浪号,仅此而已)的依赖,它是比 更旧的版本3.196~anything


(这不适用于您,但可能适用于未来的访问者。当libmypackage包含共享库(.so)时,以下内容适用。)

顺便说一下,库的命名约定是libmypackage1和。如果您一开始使用的是,则应保留该名称,但在下一版本中应切换到 。libmypackage2mypackagelib-1libmypackage2

如果同时安装了仍在使用旧库的程序和使用新库的程序,则这两个库包mypackagelib-1和可能会共存。除非管理员明确请求安装库包(只有在有需要该库的非打包程序时才会这样做,例如在),否则旧库包将被标记为自动安装,因此当它不再有依赖项时将自动卸载。mypackagelib-2/usr/local

有关如何打包库的更多信息,请阅读Debian 库打包指南。尽管 Debian 的政策对于 Ubuntu PPA 来说不是强制性的,但遵循这些政策是个好主意:它们说明了使用 Debian 打包工具的最佳实践。

相关内容