我正在学习如何使用 jdeb 创建 .deb 文件,以便在基于 debian 的发行版中提供基于 Maven 的 java 无头应用程序。
它需要以在引导时自动启动的方式安装。
在我在 web 中找到的示例中,jdeb 被设置为包含 init.d 文件的数据目录。
<data>
<src>${project.basedir}/src/deb/init.d/</src>
<type>directory</type>
<mapper>
<type>perm</type>
<prefix>/etc/init.d</prefix>
<filemode>755</filemode>
<user>root</user>
<group>root</group>
</mapper>
</data>
但是我该如何处理不同的初始化系统呢?我应该为 systemd、sysvinit 和 upstart 一起设置数据标签吗?
感谢您的任何见解。
答案1
在这种情况下没有什么魔法。您不能使用 Debian 软件包的静态副本来安装 systemd 和 sysV 文件,因为这会重复服务。
因此,我找到的解决方案是将配置文件作为 deb 文件中的普通文件提供,然后在 postinst / postrm 脚本中实现一个例程,该例程标识目标机器正在运行哪个 init 系统,然后将正确的文件复制到正确的目录。
if [[ `systemctl` =~ -\.mount ]]
then
cp $serviceDir/service-systemd /lib/systemd/system/$serviceName.service
elif [[ -f /etc/init.d/cron && ! -h /etc/init.d/cron ]]
then
cp $serviceDir/service-sysvinit /etc/init.d/$serviceName
fi