package.init没有安装

时间:2009-05-26 06:13:58

标签: debian packaging deb dpkg debhelper

我在debian目录中有一个project.init文件(以及rulescontrol等),我的dh_installinit文件中有rules (在binary-arch规则中)。

dpkg-buildpackage完成后,init脚本已复制到debian/project/etc/init.d/project,并且已创建各种前/后脚本。

但是,当我实际安装.deb(使用dpkg -i)时,init.d脚本没有安装,所以我必须缺少此过程的一部分。 init.d详细信息中的“New Maintainer's Guide”相当稀疏(基本上说不使用它们,因为它们太先进了。)

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

5 个答案:

答案 0 :(得分:8)

您的软件包是否在Conffiles的{​​{1}}块下有一个init脚本条目,例如

/var/lib/dpkg/status

Package: <project> ... Conffiles: /etc/init.d/<project> d41d8cd98f00b204e9800998ecf8427e 是否包含/var/lib/dpkg/info/<project>.conffiles

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

init脚本默认标记为配置文件,因为它们位于/etc/init.d/<project>下。 1

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

在这种情况下,删除init文件会将其修改为 2 ,并且/etc拒绝“覆盖”“配置文件”。

您应该可以通过从dpkg移除Conffiles部分来解决问题。

注意:

  1. conffiles - Debian New Maintainer's Guide
  2. 空文件的MD5sum为/var/lib/dpkg/status,但任何不匹配的校验和都会导致相同的行为

答案 1 :(得分:2)

我相信您应该查看实用程序脚本“update-rc.d”,它负责在/etc/init.d/中创建/删除符号链接。

在DEBIAN控制文件“postinst”&amp;中使用此脚本。 “postrm”。

E.g。 'postinst':   update-rc.d mswitch start 20 2 3 4 5。停止0 1 6。

E.g。 'postrm':   update-rc.d mswitch remove

答案 2 :(得分:1)

此时我会检查创建的.deb文件的内容。你可以使用dpkg-deb -c来实现这个目的。

如果init脚本在.deb中,它应该安装在/etc/init.d中,就像这样:

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

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

答案 3 :(得分:0)

只是一个猜测,你在其他dh_ *脚本中使用-P选项但不是这个吗?如果使用该选项,则需要在所有dh_ *脚本上使用它。

答案 4 :(得分:0)

我成功了,当我只将project.init文件放入debian-folder而将任何特殊约束添加到rules-file。完成此步骤后,请测试以添加特殊约束。

控制debian-folder cat *.postinst.debhelper中的成功包含:

# Automatically added by dh_installinit
if [ -x "/etc/init.d/<packagename>" ]; then
    if [ ! -e "/etc/init/<packagename>.conf" ]; then
        update-rc.d <packagename> defaults >/dev/null
    fi
    invoke-rc.d <packagename> start || exit $?
fi