Como empacotar um serviço systemd?

12

Estou tentando empacotar um aplicativo mono para ser executado como um serviço systemd.

Segui as instruções aqui: https://wiki.debian.org/Teams/pkg-systemd/Packaging

Adicionei dh-systemd (> = 1.5) ao meu arquivo de controle debian depende.

Adicionei --with = systemd ao meu arquivo de regras da seguinte maneira:

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

Adicionei meu arquivo de serviço à minha pasta debian chamada mypackage.service com o seguinte conteúdo:

[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

No entanto, a construção fornece os seguintes avisos e erros lintianos:

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

Isso está me confundindo por várias razões

  1. Esses avisos são sobre o init.d, que é o sistema antigo substituído pelo systemd, esses erros e avisos estão errados? O debuild acha que estou usando o init.d porque configurei meu pacote errado?
  2. Fiquei com a impressão de que o --with = systemd criaria esses scripts para mim.

Atualizar

O arquivo postrm gerado é o seguinte:

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

o arquivo prerm gerado é o seguinte:

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

O pacote é instalado corretamente e o serviço é iniciado corretamente. Os erros lintianos são preocupantes e eu gostaria de chegar ao fundo deles.

vagabundo
fonte
O que o seu postrmscript contém? Possui o clichê do debhelper?
Muru
Cadê? O que é isso? as instruções não dizem para criar um e o exemplo vinculado não tem um. Assim, ou é auto-gerada pelo ou não existe systemd-dh
trampster
2
Veja debian.org/doc/debian-policy/ch-maintainerscripts.html e wiki.debian.org/MaintainerScripts . Se você não sabe o que são, o debhelper (aka dh) deve gerar os apropriados. Executar dpkg-deb --controlno arquivo deb gerado, e olhar no recém-criado DEBIANdiretório para postinst, postrmarquivos.
Muru
OK fará as instruções dizendo "Após a reconstrução, seu pacote terá código adicional nos scripts de mantenedor postinst, prerm e postrm." dado que estes são gerados automaticamente, tenho pouca chance de preenchê-los.
trampster
Pergunta atualizado com postrm e scripts de prerm gerado
trampster

Respostas:

5

Também encontrei esse problema. Isto é o que eu vim com:

Você deseja substituir o dh_installinit e o dh_systemd_start, este é um exemplo do meu serviço de ponte de rede:

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

A fonte completa do meu pacote pode ser encontrada aqui: https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

Eu também usei https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules como referência.

Espero que isso aconteça, pois demorei um pouco para descobrir isso.

battlemidget
fonte
4

Quando não incluir scripts de inicialização SysV ou Upstart, instrua dh_installinitpara não modificar os scripts postinst/ postrm/ prerm. dh_systemdvai lidar com isso.

override_dh_installinit:
    dh_installinit --noscripts

Isso se aplica ao debhelpernível de compatibilidade <10 e com 10, mesmo que dh_systemdtenha sido mesclado debhelper.

De acordo com https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043 debhelper nível de compatibilidade 11> = isso terá isso corrigido.

Lucas
fonte