package.init没有安装

Ton*_*yer 6 debian packaging dpkg deb debhelper

我有一个project.init在debian目录文件(连同rules,control等等),我有dh_installinit我的rules文件(在binary-arch规则).

dpkg-buildpackage完成后,启动脚本已被复制到debian/project/etc/init.d/project,并已经创造了各种预/后脚本.

但是,当我实际安装.deb(with dpkg -i)时,init.d脚本没有安装,因此我必须缺少此过程的一部分." 新维护者指南 "在init.d详细信息上相当稀疏(它基本上表示不使用它们,因为它们太先进了).

dh_installinit命令的详细输出是:

dh_installinit
    install -p -m755 debian/project.init debian/project/etc/init.d/project
    echo "# Automatically added by dh_installinit">> debian/project.postinst.debhelper
    sed "s/#SCRIPT#/project/;s/#INITPARMS#/defaults/;s/#ERROR_HANDLER#/exit \$?/" /usr/share/debhelper/autoscripts/postinst-init >> debian/project.postinst.debhelper
    echo '# End automatically added section' >> debian/project.postinst.debhelper
    echo "# Automatically added by dh_installinit">> debian/project.prerm.debhelper
    sed "s/#SCRIPT#/project/;s/#INITPARMS#/defaults/;s/#ERROR_HANDLER#/exit \$?/" /usr/share/debhelper/autoscripts/prerm-init >> debian/project.prerm.debhelper
    echo '# End automatically added section' >> debian/project.prerm.debhelper
    echo "# Automatically added by dh_installinit">> debian/project.postrm.debhelper
    sed "s/#SCRIPT#/project/;s/#INITPARMS#/defaults/;s/#ERROR_HANDLER#/exit \$?/" /usr/share/debhelper/autoscripts/postrm-init >> debian/project.postrm.debhelper
    echo '# End automatically added section' >> debian/project.postrm.debhelper
Run Code Online (Sandbox Code Playgroud)

Mik*_*kel 8

你的包是否在Conffiles块下有一个init脚本的条目/var/lib/dpkg/status,例如

Package: <project>
...
Conffiles:
 /etc/init.d/<project> d41d8cd98f00b204e9800998ecf8427e
Run Code Online (Sandbox Code Playgroud)

/var/lib/dpkg/info/<project>.conffiles包含/etc/init.d/<project>

这是发生了什么......

默认情况下,init脚本被标记为配置文件,因为它们位于其下/etc.1

我猜你安装了包,删除了init文件,然后重新安装了包.

在这种情况下,删除init文件计为修改它2,并dpkg拒绝"覆盖""配置文件".

您应该能够通过删除Conffiles部分来解决问题/var/lib/dpkg/status.

笔记:

  1. conffiles - Debian New Maintainer's Guide
  2. 空文件具有MD5sum d41d8cd98f00b204e9800998ecf8427e,但任何不匹配的校验和都将导致相同的行为

  • 与其删除conffiles条目(并更改预期的行为),不如让`apt`强制安装conffiles:`sudo apt-get -o Dpkg :: Options :: =“-force-confmiss “安装--reinstall &lt;package&gt;` (2认同)

小智 1

此时,我将检查创建的 .deb 文件的内容。您可以使用 dpkg-deb -c 来实现此目的。

如果 init 脚本位于 .deb 中,则应将其安装在 /etc/init.d 中,如下所示:

...
drwxr-xr-x 根/根 0 2009-06-03 14:01 ./etc/
drwxr-xr-x root/root 0 2009-06-03 14:01 ./etc/init.d/
-rwxr-xr-x 根/根 2558 2009-02-13 11:27 ./etc/init.d/balance
...

如果您运行最新版本的 Debian,则软件包的内容可能是从 debian/tmp 生成的,而不是像您期望的那样从 debian/project 生成。您可以使用 dh_install 将文件从 debian/projet 移动到 debian/tmp。