我的包版本号看起来更大但 apt-get 没有选择它

nut*_*ltz 3 apt dpkg

背景故事:

确定当使用 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 选项。当脚本被赋予“重启”选项时,这个错误也会导致失败;nrpe 守护进程将关闭但不会再次启动。

我有没有提到自从应用更新我们的 nrpe 服务器开始一遍又一遍地崩溃?修复这就是我做这项工作的原因。

我一直在努力修复此修复程序。你可以在这个 PPA 中看到我目前的工作。

实际问题:

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

2.12-4ubuntu1.10.04.1
Run Code Online (Sandbox Code Playgroud)

我的 PPA 使用此版本号

2.12-4ubuntu1.10.04.1.1~ppa1~lucid1
Run Code Online (Sandbox Code Playgroud)

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

须藤添加-apt-repository 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
Run Code Online (Sandbox Code Playgroud)

谁能解释这种行为?为什么我的版本号看起来没有“aptitude dist-upgrade”更大?

谢谢

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

包裹: *
引脚:释放 a=lucid-security
引脚优先级:990

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

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

应该没有任何区别,因为 PPA 不能放在任何这些口袋里。

我继续将 PPA 中的版本号提高到2.12-4ubuntu1.10.04.2~ppa1~lucid1. 我会看看这是否有所作为。

我确实注意到lintian抱怨:

W: nagios-nrpe-server: debian-revision-not-well-formed 2.12-4ubuntu1.10.04.2~ppa1~lucid1

jco*_*ado 7

您可以使用以下方法验证软件包版本是否大于另一个版本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
Run Code Online (Sandbox Code Playgroud)

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