Как упаковать сервис systemd?


12

Я пытаюсь упаковать моно приложение для запуска в качестве службы systemd.

Я следовал инструкциям здесь: https://wiki.debian.org/Teams/pkg-systemd/Packaging

Я добавил dh-systemd (> = 1.5) в мою сборку управляющего файла Debian.

Я добавил --with = systemd в мой файл правил следующим образом:

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

Я добавил свой служебный файл в папку debian под названием mypackage.service со следующим содержимым:

[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. Это предупреждение о init.d, который является старой системой, которая заменена systemd. Являются ли эти ошибки и предупреждения ошибочными, думает ли 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?
Муру

где это находится? что это? инструкции не говорят, чтобы создать его, и в связанном примере его нет. Так что либо он
автоматически сгенерирован

2
См. Debian.org/doc/debian-policy/ch-maintainerscripts.html и wiki.debian.org/MaintainerScripts . Если вы не знаете, что это такое, debhelper (aka dh) должен генерировать соответствующие. Запустите dpkg-deb --controlна созданном файле DEB, и взгляд в недавно созданный DEBIANкаталог для postinst, postrmфайлов.
Муру

OK выполнит инструкции: «После перестройки ваш пакет будет иметь дополнительный код в сценариях сопровождающего postinst, prerm и postrm». учитывая, что они автоматически генерируются, у меня мало шансов набить их.
трампстер

Обновлен вопрос с использованием сценариев postrm и prerm
trampster

Ответы:


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, запретите dh_installinitизменять postinst/ postrm/ prermscripts. dh_systemdс этим справлюсь.

override_dh_installinit:
    dh_installinit --noscripts

Это относится к debhelperуровню совместимости <10 и 10, даже если dh_systemdон был объединен с debhelper.

Согласно https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043 debhelper уровень совместимости 11> = это будет исправлено.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.