Jak spakować usługę systemową?

13

Próbuję spakować aplikację mono, aby działała jako usługa systemowa.

Postępowałem zgodnie z instrukcjami tutaj: https://wiki.debian.org/Teams/pkg-systemd/Packaging

Dodałem dh-systemd (> = 1.5) do mojej wersji pliku kontrolnego Debiana zależy.

Dodałem --with = systemd do mojego pliku reguł w następujący sposób:

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

Dodałem plik usługi do mojego folderu debian o nazwie mypackage.service z następującą zawartością:

[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

Jednak budowanie daje następujące ostrzeżenia i błędy 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

To mnie dezorientuje z kilku powodów

  1. Te ostrzeżenia dotyczą init.d, który jest starym systemem, który jest zastąpiony przez systemd, czy te błędy i ostrzeżenia są po prostu złe, czy debuild uważa, że ​​używam init.d, ponieważ źle skonfigurowałem swój pakiet?
  2. Miałem wrażenie, że --with = systemd stworzy dla mnie te skrypty.

Aktualizacja

Wygenerowany plik postrm jest następujący:

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

wygenerowany plik prerm wygląda następująco:

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

Pakiet faktycznie instaluje się dobrze, a usługa uruchamia się poprawnie. Błędy lintian są niepokojące i chciałbym przejść do ich sedna.

trampster
źródło
Co zawiera twój postrmskrypt? Czy ma płytę grzejną debhelper?
muru
gdzie to jest? co to jest? instrukcje nie mówią o utworzeniu jednego, a link do przykładu go nie ma. Więc albo jest generowany automatycznie przez dh-systemd, albo nie istnieje
trampster
2
Zobacz debian.org/doc/debian-policy/ch-maintainerscripts.html i wiki.debian.org/MaintainerScripts . Jeśli nie wiesz co to jest, debhelper (aka dh) powinien generować odpowiednie. Prowadzony dpkg-deb --controlna wygenerowanym pliku deb, a spojrzenie w nowo utworzonym DEBIANkatalogu dla postinst, postrmplików.
mur
OK wykona instrukcje: „Po przebudowaniu pakiet będzie zawierał dodatkowy kod w skryptach postinst, prerm i postrm opiekuna”. biorąc pod uwagę, że są one generowane automatycznie, nie mam szans na ich uzupełnienie.
trampster
Zaktualizowano pytanie o skrypty generowane postrm i prerm
trampster

Odpowiedzi:

5

Wpadłem również na ten problem. Oto co wymyśliłem:

Będziesz chciał zastąpić dh_installinit i dh_systemd_start, to jest przykład z mojej usługi mostka sieciowego:

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

Pełne źródło mojego pakietu można znaleźć tutaj: https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

Użyłem również https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules jako odniesienie.

Mam nadzieję, że to cię uruchomi, ponieważ zajęło mi to trochę czasu, aby to zrozumieć.

Battlelemidget
źródło
4

Jeśli nie dołączasz skryptów inicjujących SysV ani Upstart, poinstruuj, dh_installinitaby nie modyfikować skryptów postinst/ postrm/ prerm. dh_systemdporadzę sobie z tym.

override_dh_installinit:
    dh_installinit --noscripts

Dotyczy to debhelperpoziomu zgodności <10 i 10, mimo że dh_systemdzostał połączony debhelper.

Zgodnie z https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043 debhelper poziom kompatybilności 11> = to zostanie naprawione.

Lucas
źródło