Làm thế nào để gói một dịch vụ systemd?


12

Tôi đang cố gắng đóng gói một ứng dụng đơn để chạy như một dịch vụ systemd.

Tôi đã làm theo hướng dẫn ở đây: https://wiki.debian.org/Teams/pkg-systemd/Packaging

Tôi đã thêm dh-systemd (> = 1.5) vào bản dựng tệp kiểm soát debian của mình.

Tôi đã thêm --with = systemd vào tệp quy tắc của mình như sau:

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

Tôi đã thêm tệp dịch vụ của mình vào thư mục debian có tên mypackage.service với các nội dung sau:

[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

Tuy nhiên, tòa nhà đưa ra các cảnh báo và lỗi sau đây:

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

Điều này làm tôi bối rối vì nhiều lý do

  1. Các cảnh báo này là về init.d, hệ thống cũ được thay thế bởi systemd, những lỗi và cảnh báo này có sai không, có phải debuild nghĩ rằng tôi đang sử dụng init.d vì tôi đã cấu hình gói của tôi sai?
  2. Tôi có ấn tượng rằng --with = systemd sẽ tạo ra các tập lệnh này cho tôi.

Cập nhật

Tệp postrm được tạo như sau:

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

tập tin prerm được tạo như sau:

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

Gói thực sự cài đặt tốt và dịch vụ bắt đầu chính xác. Các lỗi lintian là đáng lo ngại, và tôi muốn đi đến tận cùng của chúng.


postrmKịch bản của bạn chứa gì? Liệu nó có các nồi hơi gỡ lỗi?
muru

Nó đâu rồi? nó là gì? các hướng dẫn không nói để tạo một và ví dụ được liên kết không có. Vì vậy, nó được tự động phát triển bởi dh-systemd hoặc không tồn tại
trampster 15/03/2016

2
Xem debian.org/doc/debian-policy/ch-maintainerscripts.htmlwiki.debian.org/MaintainerScripts . Nếu bạn không biết những thứ này là gì, debrcper (aka dh) sẽ tạo ra những cái thích hợp. Chạy dpkg-deb --controlvào file deb tạo ra, và nhìn vào mới tạo DEBIANthư mục cho postinst, postrmfile.
muru

OK sẽ làm theo hướng dẫn "Sau khi xây dựng lại, gói của bạn sẽ có mã bổ sung trong các tập lệnh duy trì postinst, prerm và postrm." được đưa ra sau đó là tự động tạo ra tôi có rất ít cơ hội để nhét chúng.
trampster 15/03/2016

Câu hỏi được cập nhật với các kịch bản được tạo ra bởi postrm và prerm
trampster 15/03/2016

Câu trả lời:


5

Tôi cũng gặp phải vấn đề này. Đây là những gì tôi nghĩ ra:

Bạn sẽ muốn ghi đè dh_installinit và dh_systemd_start, đây là một ví dụ từ dịch vụ cầu nối mạng của tôi:

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

Nguồn đầy đủ của gói của tôi có thể được tìm thấy ở đây: https://github.com/Ubfox-Solutions-Engineering/openstack-deb/tree/master/debian

Tôi cũng đã sử dụng https://github.com/lxc/lxd-pkg-ubfox/blob/dpm-xenial/debian/rules làm tài liệu tham khảo.

Hy vọng rằng điều này sẽ giúp bạn đi vì nó đã làm tôi mất một chút thời gian để tìm ra điều này.


4

Khi không bao gồm SysV hoặc Upstart init script, hướng dẫn dh_installinitđể không thay đổi postinst/ postrm/ prermscript. dh_systemdsẽ xử lý nó.

override_dh_installinit:
    dh_installinit --noscripts

Điều này áp dụng cho debhelpermức độ tương thích <10 và với 10 mặc dù dh_systemdđã được hợp nhất vào debhelper.

Theo https://bugs.debian.org/cgi-bin/orpreport.cgi?orms=800043 debhelper mức độ tương thích 11> = điều này sẽ được sửa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.