我在debian目录中有一个project.init
文件(以及rules
,control
等),我的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
答案 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
部分来解决问题。
注意:
/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