背景故事:
确定使用 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
应该可以解决问题。