7

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

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

但是,当我实际安装 .deb (带有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
4

5 回答 5

8

您的包是否在Conffilesin 的块下有一个用于您的 init 脚本的条目/var/lib/dpkg/status,例如

Package: <project>
...
Conffiles:
 /etc/init.d/<project> d41d8cd98f00b204e9800998ecf8427e

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

这就是正在发生的事情......

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

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

在这种情况下,删除初始化文件算作修改它2,并dpkg拒绝“覆盖”“配置文件”。

您应该能够通过Conffiles/var/lib/dpkg/status.

笔记:

  1. conffiles - Debian 新维护者指南
  2. 空文件具有 MD5sum d41d8cd98f00b204e9800998ecf8427e,但任何不匹配的校验和都会导致相同的行为
于 2012-09-19T21:27:37.283 回答
2

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

在 DEBIAN 控制文件“postinst”和“postrm”中使用这个脚本。

例如对于“postinst”: update-rc.d mswitch start 20 2 3 4 5 。停止 0 1 6 。

例如对于“postrm”:update-rc.d mswitch remove

于 2009-09-10T14:13:27.060 回答
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。

于 2009-06-03T18:02:49.363 回答
0

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

于 2009-06-11T13:25:16.547 回答
0

当我只将 project.init 文件放入 debian-folder 并且向规则文件添加任何特殊约束时,我取得了成功。在此步骤工作后,测试以添加您的特殊约束。

在 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
于 2014-02-17T10:33:49.473 回答