我的软件包版本号似乎更大,但 apt-get 却没有选择它

我的软件包版本号似乎更大,但 apt-get 却没有选择它

背景故事:

确定使用 lxc 容器虚拟机时,Nagios nrpe 关闭脚本在容器主机上运行会终止容器内的 nrpe 进程。通过将脚本更改为使用 pidfiles 而不是在进程表中搜索 nrpe 进程,可以解决这个问题。

遗憾的是,start-stop-daemon 是一个 C 程序,它是由 Perl 脚本翻译而来,这一点显而易见。start-stop-daemon.c 中有太多全局变量,尽管有一些不错的注释块,但很少有注释可以解释变量名背后的含义,例如“schedule”(字符串“schedule”出现在许多上下文中)。start-stop-daemon 的手册页强烈建议,除非您使用“--retry”选项,否则 start-stop-daemon 程序可能会在它发送信号的进程实际调用 exit() 并终止之前返回,但它并没有用简单的英语说明这一点。

start-stop-daemon 的晦涩难懂很可能是脚本的“修复”版本包含一个可疑注释的原因,该注释表明有时 pid 文件尚未被删除。我很容易明白为什么有人不明白他遗漏了 --retry 选项。当脚本被赋予“restart”选项时,此错误还会导致失败;nrpe 守护程序将关闭但不会重新启动。

我是否提到过,自从应用更新以来,我们的 nrpe 服务器开始一次又一次崩溃?修复这个问题是我做这项工作的原因。

我一直在努力修复这个问题。你可以在此 PPA

实际问题:

lucid-updates 中 nagios-nrpe-server 的上游版本号为

2.12-4ubuntu1.10.04.1

我的 PPA 使用此版本号

2.12-4ubuntu1.10.04.1.1~ppa1~lucid1

我检查规则在这里并使用这个测试程序并且当我运行以下命令时,我相信我在 PPA 中使用的版本号大于 lucid-updates 中的版本号:

sudo 添加 apt 存储库 ppa:nutznboltz/nrpe-unbreak-lp-600941
sudo apt-get 更新
sudo aptitiude dist-upgrade

未安装替换包。

我能够使用

sudo aptitude install nagios-nrpe-server=2.12-4ubuntu1.10.04.1.1~ppa1~lucid1

有人能解释一下这种现象吗?为什么我的版本号没有显示为大于“aptitude dist-upgrade”?

谢谢

$ cat /etc/apt/preferences
包裹: *
引脚:发布 a=lucid-backports
Pin 优先级:400

包裹: *
密码:release a=lucid-security
Pin 优先级:990

包裹: *
Pin:发布 a=lucid-updates
Pin 优先级:900

包裹: *
引脚:发布 a=lucid-proposed
Pin 优先级:400
$ ls /etc/apt/preferences.d/
$

不应该有任何区别,因为 PPA 不能位于任何一个口袋中。

我继续将 PPA 中的版本号改为2.12-4ubuntu1.10.04.2~ppa1~lucid1。我会看看这是否有区别。

我确实注意到lintian有抱怨:

W:nagios-nrpe 服务器:debian-修订版本格式不正确 2.12-4ubuntu1.10.04.2~ppa1~lucid1

答案1

您可以使用以下命令验证软件包版本是否高于另一个软件包版本dpkg --compare-versions <version_1> gt <version_2>

$ dpkg --compare-versions 2.12-4ubuntu1.10.04.1.1~ppa1~lucid1 gt 2.12-4ubuntu1.10.04.1
$ echo $?
0

检查完之后,您应该验证apt-cache policy <package>候选版本是否不是您期望的版本。一个可能的原因是软件包版本被保留了。在这种情况下apt-get --ignore-hold应该可以解决问题。

相关内容