Bir systemd servisi nasıl paketlenir?


13

Bir systemd hizmeti olarak çalıştırmak için bir mono uygulama paketlemeye çalışıyorum.

Buradaki talimatları izledim: https://wiki.debian.org/Teams/pkg-systemd/Packaging

Debian kontrol dosyası derleme dh-systemd (> = 1.5) ekledim bağlıdır.

Aşağıdaki gibi kurallar dosyasına --with = systemd ekledim:

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

Servis dosyamı aşağıdaki içeriklerle mypackage.service adlı debian klasörüne ekledim:

[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

Ancak bina aşağıdaki lintian uyarılarını ve hatalarını verir:

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

Bu beni birkaç nedenden dolayı karıştırıyor

  1. Bu uyarı, systemd ile değiştirilen eski sistem olan init.d ile ilgilidir, bu hatalar ve uyarılar sadece yanlış mı, debuild init.d kullandığımı düşünüyor mu?
  2. --With = systemd'nin bu komut dosyalarını benim için oluşturacağı izlenimindeydim.

Güncelleme

Oluşturulan postrm dosyası aşağıdaki gibidir:

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

oluşturulan prerm dosyası aşağıdaki gibidir:

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

Paket aslında iyi bir şekilde kurulur ve servis doğru şekilde başlar. Lintian hataları endişe vericidir ve bunların en altına inmek istiyorum.


postrmSenaryonuz ne içeriyor? Debhelper kazan plakası var mı?
16'da muru

nerede? bu ne? talimatlar bir tane oluşturmayı söylemez ve bağlantılı örnekte bir tane yoktur. Yani ya dh-systemd tarafından otomatik olarak oluşturulmuş ya da mevcut değil
trampster

2
Bkz debian.org/doc/debian-policy/ch-maintainerscripts.html ve wiki.debian.org/MaintainerScripts . Bunların ne olduğunu bilmiyorsanız, debhelper (aka dh) uygun olanları üretiyor olmalıdır. Run dpkg-deb --controloluşturulan deb dosyasını ve yeni oluşturulan içinde bakmak DEBIANiçin dizine postinst, postrmdosyaları.
16'da muru

Tamam, "Yeniden oluşturduktan sonra paketinizin postinst, prerm ve postrm sürdürücü komut dosyalarında ek kodları olacaktır." o zaman bu otomatik oluşturulan verilen onları doldurmak için çok az şansım var.
Mart'ta trampster

Postrm ve prerm tarafından oluşturulan komut dosyaları ile güncellenen soru
trampster 15:16

Yanıtlar:


5

Ben de bu sorunla karşılaştım. Ben geldim budur:

Dh_installinit ve dh_systemd_start öğelerini geçersiz kılmak isteyeceksiniz, bu benim ağ köprüsü hizmetimden bir örnek:

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

Paketimin tam kaynağını burada bulabilirsiniz: https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

Ayrıca referans olarak https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules adresini de kullandım .

Umarım bu, bunu çözmem için biraz zamanımı aldığınız gibi gitmenizi sağlayacaktır.


4

SysV veya Upstart başlangıç ​​komut dosyalarını dahil dh_installinitetmediğinizde, postinst/ postrm/ prermkomut dosyalarını değiştirmemenizi isteyin. dh_systemdhalledecek.

override_dh_installinit:
    dh_installinit --noscripts

Bu , birleştirilse debhelperbile <10 ve 10 ile uyumluluk düzeyi için geçerlidir .dh_systemddebhelper

Göre https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043 debhelper uyumluluk düzeyine 11> = Bu bu sabit olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.