web-dev-qa-db-ja.com

さまざまな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>

しかし、どうすればさまざまなinitシステムに対処できますか? systemd、sysvinit、upstartのデータタグをすべて一緒に設定する必要がありますか?

洞察に感謝します。

2
Cristiano

そのような場合、魔法はありません。 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
2
Cristiano