Como criar um .deb que lide com diferentes sistemas init

1

Estou aprendendo como criar um arquivo .deb usando o jdeb para entregar um aplicativo java headless baseado em maven dentro de distribuições baseadas no Debian.

Ele precisa ser instalado de maneira que inicie automaticamente no momento da inicialização.

Nos exemplos que encontrei na web, o jdeb está sendo configurado com um diretório de dados contendo um arquivo 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>

Mas como posso lidar com diferentes sistemas init? devo definir uma tag de dados para systemd, sysvinit e upstart todos juntos?

obrigado por qualquer insight.

    
por Cristiano 15.01.2016 / 04:44

1 resposta

2

Não há mágica nesse caso. Você não pode usar a cópia estática de um pacote Debian para instalar os arquivos systemd e sysV, porque isso duplicará os serviços.

Portanto, a solução que encontrei foi entregar os arquivos de configuração como arquivos normais dentro do arquivo deb, e então implementar uma rotina dentro dos scripts postinst / postrm que identifica qual sistema init a máquina de destino está rodando e então copiar o direito arquivo para o diretório apropriado.

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
    
por 28.01.2016 / 13:51