systemdサービスをパッケージ化する方法は?


12

モノのアプリケーションをsystemdサービスとして実行するようにパッケージ化しようとしています。

私はここの指示に従いました:https : //wiki.debian.org/Teams/pkg-systemd/Packaging

私は、debian制御ファイルにdh-systemd(> = 1.5)を追加しました。

以下のように、ルールファイルに--with = systemdを追加しました。

%:
    dh $@ --with=cli --with=systemd

私のサービスファイルをmypackage.serviceという名前のdebianフォルダーに追加しました。その内容は次のとおりです。

[Unit]
Description=My Service Description
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/mono /usr/lib/mypackage/myservice.exe

[Install]
WantedBy=multi-user.target

ただし、ビルドすると次のlintian警告とエラーが発生します。

Now running lintian...
E: mypackage: postrm-does-not-call-updaterc.d-for-init.d-script     etc/init.d/mypackage
W: mypackage: init.d-script-not-marked-as-conffile etc/init.d/mypackage
E: mypackage: init.d-script-not-included-in-package etc/init.d/mypackage

これはいくつかの理由で私を混乱させています

  1. これらの警告は、systemdに置き換えられた古いシステムであるinit.dに関するものです。これらのエラーと警告は間違っているのですか、パッケージを誤って構成したため、debuildはinit.dを使用していると思いますか?
  2. --with = systemdがこれらのスクリプトを作成してくれるという印象を受けました。

更新

生成されるpostrmファイルは次のとおりです。

#!/bin/sh
set -e
# Automatically added by dh_systemd_start
if [ -d /run/systemd/system ]; then
    systemctl --system daemon-reload >/dev/null || true
fi
# End automatically added section
# Automatically added by dh_systemd_enable
if [ "$1" = "remove" ]; then
    if [ -x "/usr/bin/deb-systemd-helper" ]; then
        deb-systemd-helper mask mypackage.service >/dev/null
    fi
fi

if [ "$1" = "purge" ]; then
     if [ -x "/usr/bin/deb-systemd-helper" ]; then
        deb-systemd-helper purge mypackage.service >/dev/null
        deb-systemd-helper unmask mypackage.service >/dev/null
    fi
fi
# End automatically added section

生成されたprermファイルは次のとおりです。

#!/bin/sh
set -e
# Automatically added by dh_systemd_start
if [ -d /run/systemd/system ]; then
    deb-systemd-invoke stop mypackage.service >/dev/null
fi
# End automatically added section
# Automatically added by dh_installinit
if [ -x "/etc/init.d/mypackage" ] || [ -e "/etc/init/mypackage.conf" ]; then
    invoke-rc.d mypackage stop || exit $?
fi
# End automatically added section

パッケージは実際に正常にインストールされ、サービスが正しく開始されます。lintianのエラーは心配であり、私はそれらの根底に行きたいと思います。


postrmスクリプトには何が含まれていますか?debhelperボイラープレートはありますか?
muru 2016年

それはどこにある?それは何ですか?指示はそれを作成するように言っていません、そして、リンクされた例はそれを持っていません。だから、それがDH-にsystemdによって自動生成されますか存在しないか
trampster

2
debian.org/doc/debian-policy/ch-maintainerscripts.htmlおよびwiki.debian.org/MaintainerScriptsを参照してください。これらが何かわからない場合は、debhelper(別名dh)が適切なものを生成しているはずです。dpkg-deb --control生成されたdebファイルで実行し、新しく作成されたDEBIANディレクトリでpostinstpostrmファイルを探します。
ムル

「再構築後、パッケージのpostinst、prerm、postrmメンテナスクリプトに追加のコードが含まれるようになります。」そうすれば、これらは自動生成されるので、詰め込む機会はほとんどありません。
trampster

postrmおよびprermで生成されたスクリプトで更新された質問
trampster 2016年

回答:


5

私もこの問題に遭遇しました。これは私が思いついたものです:

dh_installinitとdh_systemd_startをオーバーライドする必要があります。これは、私のネットワークブリッジサービスの例です。

#!/usr/bin/make -f

PKGDIR=debian/tmp

%:
    dh $@ --with systemd

override_dh_installinit:
    dh_systemd_enable -popenstack --name=openstack openstack.service
    dh_installinit -popenstack --no-start --noscripts
    dh_systemd_start -popenstack --no-restart-on-upgrade

override_dh_systemd_start:
    echo "Not running dh_systemd_start"

私のパッケージの完全なソースはここにあります:https : //github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

また、参照としてhttps://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rulesも使用しました。

うまくいけば、これを理解するのに少し時間がかかりました。


4

SysVまたはUpstart initスクリプトを含めdh_installinitない場合は、postinst/ postrm/ prermスクリプトを変更しないように指示します。dh_systemdそれを処理します。

override_dh_installinit:
    dh_installinit --noscripts

これは debhelperdh_systemd統合された場合でも、互換性レベル<10および10にれdebhelperます。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043 debhelper互換性レベル11> =によれば、これは修正されています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.