Як упакувати системну послугу?


13

Я намагаюся пакувати моно-додаток для запуску як системна служба.

Я дотримувався інструкцій тут: 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

Однак будівля дає такі лінійські попередження та помилки:

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, чи ці помилки та попередження є помилковими, чи не дебудує, я вважаю, що я використовую init.d, оскільки я неправильно налаштував пакет?
  2. У мене було враження, що --with = systemd створить мені ці сценарії.

Оновлення

Створений файл після пошти такий:

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

Пакет насправді встановлюється нормально, і сервіс починається правильно. Лінійські помилки викликають занепокоєння, і я хотів би дійти до їхньої суті.


Що містить ваш postrmсценарій? Чи є у нього котло для дебелера?
муру

де це? що це? інструкції не говорять про те, щоб створити її, а зв'язаний приклад не має. Отже, або він автоматично
генерується

2
Див debian.org/doc/debian-policy/ch-maintainerscripts.html і wiki.debian.org/MaintainerScripts . Якщо ви не знаєте, що це таке, debhelper (ака dh) повинен генерувати відповідні. Запустіть dpkg-deb --controlна створеному файлі DEB, і погляд в недавно створений DEBIANкаталог для postinst, postrmфайлів.
муру

OK виконає інструкції, які говорять: "Після відновлення ваш пакунок матиме додатковий код у сценаріях сервісу Postinst, Prerm та Postrm". з огляду на те, що вони генеруються автоматично, у мене мало шансів набити їх.
бродяга

Оновлено запитання зі сценаріями, що генеруються після порту та передшпинкою
бродяга

Відповіді:


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

Це стосується 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.