GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak zabalit službu Systemd?

Snažím se zabalit mono aplikaci, která bude spuštěna jako služba systemd.

Postupoval jsem podle pokynů zde:
https://wiki.debian.org/Teams/pkg-systemd/Packaging

Přidal jsem dh-systemd (>=1.5) do mého sestavení řídicího souboru debian závisí.

Do souboru pravidel jsem přidal –with=systemd takto:

%:
    dh [email protected] --with=cli --with=systemd

Přidal jsem svůj soubor služby do své složky debian s názvem mypackage.service s následujícím obsahem:

[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

Budování však zobrazuje následující lintianská varování a chyby:

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

To mě mate z několika důvodů

  1. Tato varování se týkají init.d, což je starý systém, který je nahrazen systemd, jsou tyto chyby a varování prostě špatné, myslí si debuild, že používám init.d, protože jsem svůj balíček nakonfiguroval špatně?
  2. li>
  3. Měl jsem dojem, že –with=systemd vytvoří tyto skripty za mě.

Aktualizovat

Vygenerovaný soubor postrm je následující:

#!/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

vygenerovaný prem soubor je následující:

#!/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

Balíček se ve skutečnosti nainstaluje v pořádku a služba se spustí správně. Lintianovy chyby jsou znepokojivé a rád bych jim přišel na kloub.

Přijatá odpověď:

Narazil jsem i na tento problém. To je to, na co jsem přišel:

Budete chtít přepsat dh_installinit a dh_systemd_start, toto je příklad z mé služby síťového mostu:

#!/usr/bin/make -f

PKGDIR=debian/tmp

%:
    dh [email protected] --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"

Úplný zdroj mého balíčku naleznete zde:https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

Související:Jaké nástroje pro správu úkolů a času jsou k dispozici?

Jako referenci jsem také použil https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules.

Doufám, že vás to nakopne, protože mi chvíli trvalo, než jsem na to přišel.


Ubuntu
  1. Jak napsat spouštěcí skript pro Systemd?

  2. Jak vypsat Systemd Services v Linuxu

  3. Jak nastavit hodnoty ulimit pro službu systemd

  1. Jak použít Systemd k restartování služby, když je vypnutá?

  2. Jak zastavit službu systemd

  3. Jak odeslat e-mail, pokud je služba systemd restartována?

  1. Jak spravovat služby Systemd pomocí Systemctl v systému Linux

  2. Jak používat příkaz Systemctl ke správě služeb Systemd

  3. Jak vytvořit službu Systemd v Linuxu