这个问题针对 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
和。如果您一开始使用的是,则应保留该名称,但在下一版本中应切换到 。libmypackage2
mypackagelib-1
libmypackage2
如果同时安装了仍在使用旧库的程序和使用新库的程序,则这两个库包mypackagelib-1
和可能会共存。除非管理员明确请求安装库包(只有在有需要该库的非打包程序时才会这样做,例如在),否则旧库包将被标记为自动安装,因此当它不再有依赖项时将自动卸载。mypackagelib-2
/usr/local
有关如何打包库的更多信息,请阅读Debian 库打包指南。尽管 Debian 的政策对于 Ubuntu PPA 来说不是强制性的,但遵循这些政策是个好主意:它们说明了使用 Debian 打包工具的最佳实践。