如何创建处理不同 init 系统的 .deb

如何创建处理不同 init 系统的 .deb

我正在学习如何使用 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

相关内容