Upstart Job(.conf)安装失败

Upstart Job(.conf)安装失败

我有一个简单的包 (.deb),其主要目标是创建一个 Upstart 作业。将其命名为 Foo。它无法创建作业文件/etc/init/Foo.conf

包定义

我已使用 创建了包源dh_make --createorig并将其添加Foo.upstartdebian目录中。我使用 构建包debuild -us -uc

安装

sudo dpkg -i Foo_1.0-1_all.deb

当我在一台机器上安装该软件包时,一切顺利,但在另一台机器上安装失败。(已添加 Foo.conf/etc/init并启动服务)。 也就是说,Foo.conf 没有被添加到/etc/init向后兼容的 Foo 脚本(符号链接到upstart-job)确实已添加到/etc/init.d,并且 doc 文件已添加到/usr/share/doc/Foo。但是/etc/init/Foo.conf缺失了。

编辑

最初我认为问题出在架构上。这只是因为我在 amd64 上安装了可以正常工作的软件,但问题发生在 i386 机器上。我忽略了之前我在 i386 机器上手动安装和卸载过,dpkg 避免了干扰。

答案1

故障排除

当软件包安装失败时,您可以使用 Debug 开关进行故障排除。它需要一个位字段来确定级别和主题。值 D=7777 将显示所有内容。对于这个问题,我们知道我们特别关注 conf 文件,因此我们可以使用 D=220。

sudo dpkg -D=220 -i Foo_1.0-1_all.deb

您的输出可能会显示类似以下内容:

D000200: conffderef in='/etc/init/Foo.conf' current working='/etc/init/Foo.conf'
D000200: conffderef nonexistent
D000020: deferred_configure '/etc/init/Foo.conf' (= '/etc/init/Foo.conf') useredited=1 distedited=0 what=2002

关键线索是useredited=1默认情况下dpkg不会替换用户编辑的配置文件。手动删除 .conf 文件视​​为编辑该文件,因此 dpkg 不会替换丢失的文件可能会让您感到惊讶。对于那些在其他操作系统上安装服务有经验的人来说,Upstart Job 被视为配置可能会更加令人惊讶。

强制安装缺失的 conf

dpkg 有一些强制选项。你可以强制替换丢失的 .conf 文件,如下所示:

sudo dpkg -i --force-confmiss Foo_1.0-1_all.deb

还有其他强制选项可用于类似场景;请查看手册页或使用dpkg --force-help以获取详细信息。应谨慎使用这些选项,尤其是对于第三方软件包。

封装开发/测试周期

在开发 .deb 包(例如 Upstart 作业)时,您将多次安装和删除该包。有时,您还可能手动调整 .conf 文件。默认情况下dpkg -r(或apt-get remove)不会删除 .conf 文件。(令人惊讶的是,upstart 作业仍然存在,而相关的二进制文件可能已经消失。)为此,您必须使用清除选项。因此,要测试完全删除并重新安装 upstart 作业,您可以执行以下操作:

sudo dpkg -i Foo_1.0-1_all.deb
# testing...
sudo apt-get purge Foo

现在您了解了强制和调试选项,您可以根据需要应用它们。

参考

查看主题Bug#1198: dpkg 安装文件失败

删除文件算作“编辑”它,因为对于许多配置文件来说,文件的缺失是有意义的。

手册页dpkg

相关内容