背景故事:
确定当使用 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
您可以使用以下方法验证软件包版本是否大于另一个版本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应该解决问题。
| 归档时间: |
|
| 查看次数: |
1083 次 |
| 最近记录: |