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
- 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?
- 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.
postrm
skrip Anda ? Apakah itu memiliki boilerplate debhelper?dh
) harus menghasilkan yang sesuai. Jalankandpkg-deb --control
pada file deb yang dihasilkan, dan tampilan dalam baru dibuatDEBIAN
direktori untukpostinst
,postrm
file.Jawaban:
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:
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.
sumber
Ketika tidak termasuk skrip init SysV atau pemula, perintahkan
dh_installinit
untuk tidak memodifikasi skrippostinst
/postrm
/prerm
.dh_systemd
akan menanganinya.Ini berlaku untuk
debhelper
tingkat kompatibilitas <10 dan dengan 10 meskipundh_systemd
telah digabungkandebhelper
.Menurut https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=800043
debhelper
tingkat kompatibilitas 11> = ini akan diperbaiki.sumber