Bagaimana mengemas layanan systemd?


12

Saya mencoba mengemas aplikasi mono untuk dijalankan sebagai layanan systemd.

Saya telah mengikuti instruksi di sini: https://wiki.debian.org/Teams/pkg-systemd/Packaging

Saya telah menambahkan dh-systemd (> = 1.5) ke build file debian control saya.

Saya telah menambahkan --dengan = systemd ke file aturan saya sebagai berikut:

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

Saya telah menambahkan file layanan saya ke folder debian saya bernama mypackage.service dengan konten berikut:

[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

Namun bangunan memberikan peringatan dan kesalahan lintian berikut:

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

Ini membingungkan saya karena beberapa alasan

  1. Peringatan ini adalah tentang init.d yang merupakan sistem lama yang digantikan oleh systemd, apakah kesalahan dan peringatan ini salah, apakah debuild berpikir saya menggunakan init.d karena saya telah mengonfigurasi paket saya salah?
  2. Saya mendapat kesan bahwa --with = systemd akan membuat skrip ini untuk saya.

Memperbarui

File postrm yang dihasilkan adalah sebagai berikut:

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

file prerm yang dihasilkan adalah sebagai berikut:

#!/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 ini benar-benar diinstal dengan baik dan layanan dimulai dengan benar. Kesalahan lintian mengkhawatirkan, dan saya ingin membahasnya.


Apa isi postrmskrip Anda ? Apakah itu memiliki boilerplate debhelper?
muru

dimana itu? apa itu? instruksi tidak mengatakan untuk membuatnya, dan contoh yang ditautkan tidak memilikinya. Jadi entah itu di-autogenerasi oleh dh-systemd atau tidak ada
trampster

2
Lihat debian.org/doc/debian-policy/ch-maintainerscripts.html dan wiki.debian.org/MaintainerScripts . Jika Anda tidak tahu apa ini, debhelper (alias dh) harus menghasilkan yang sesuai. Jalankan dpkg-deb --controlpada file deb yang dihasilkan, dan tampilan dalam baru dibuat DEBIANdirektori untuk postinst, postrmfile.
muru

OK akan melakukan instruksi yang mengatakan "Setelah membangun kembali, paket Anda akan memiliki kode tambahan di skrip postinst, prerm dan postrm maintainer." diberikan maka ini dihasilkan secara otomatis saya memiliki sedikit kesempatan untuk memasukkannya.
trampster

Pertanyaan yang diperbarui dengan skrip yang dihasilkan postrm dan prerm
trampster

Jawaban:


5

Saya mengalami masalah ini juga. Inilah yang saya buat:

Anda ingin mengganti dh_installinit dan dh_systemd_start, ini adalah contoh dari layanan bridge jaringan saya:

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

Sumber lengkap dari paket saya dapat ditemukan di sini: https://github.com/Ubuntu-Solutions-Engineering/openstack-deb/tree/master/debian

Saya juga menggunakan https://github.com/lxc/lxd-pkg-ubuntu/blob/dpm-xenial/debian/rules sebagai referensi.

Mudah-mudahan ini akan membuat Anda pergi karena aku butuh sedikit waktu untuk mencari tahu ini.


4

Ketika tidak termasuk skrip init SysV atau pemula, perintahkan dh_installinituntuk tidak memodifikasi skrip postinst/ postrm/ prerm. dh_systemdakan menanganinya.

override_dh_installinit:
    dh_installinit --noscripts

Ini berlaku untuk debhelpertingkat kompatibilitas <10 dan dengan 10 meskipun dh_systemdtelah digabungkan debhelper.

Menurut https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043 debhelper tingkat kompatibilitas 11> = ini akan diperbaiki.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.