체계화 된 서비스를 포장하는 방법?


13

시스템 서비스로 실행하기 위해 모노 응용 프로그램을 패키지하려고합니다.

https://wiki.debian.org/Teams/pkg-systemd/Packaging 여기에 지침을 따랐습니다.

데비안 제어 파일 빌드에 dh-systemd (> = 1.5)를 추가했습니다.

다음과 같이 --with = systemd를 규칙 파일에 추가했습니다.

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

서비스 파일을 mypackage.service라는 debian 폴더에 다음 내용으로 추가했습니다.

[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

그러나 건물은 다음과 같은 lintian 경고 및 오류를 제공합니다.

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. 이 경고는 systemd로 대체 된 오래된 시스템 인 init.d에 관한 것입니다.이 오류와 경고는 잘못입니까, 패키지를 잘못 구성했기 때문에 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

패키지가 실제로 제대로 설치되고 서비스가 올바르게 시작됩니다. lintian 오류는 걱정스럽고 오류의 맨 아래에 도달하고 싶습니다.


postrm스크립트에 무엇이 포함되어 있습니까? debhelper 상용구가 있습니까?
muru

어디있어? 뭐야? 지시 사항은 하나를 만들라고 말하지 않으며 연결된 예제에는 하나가 없습니다. 그래서 그것은 dh-systemd에 의해 자동 생성되거나 존재하지 않습니다
trampster

2
debian.org/doc/debian-policy/ch-maintainerscripts.htmlwiki.debian.org/MaintainerScripts를 참조하십시오 . 이것이 무엇인지 모른다면, debhelper (일명 dh)가 적절한 것을 생성해야합니다. 실행 dpkg-deb --control생성 된 DEB 파일을, 그리고 새로 생성의 모습 DEBIAN에 대한 디렉토리 postinst, postrm파일.
muru

"다시 빌드 한 후에는 패키지에 postinst, prerm 및 postrm 관리자 스크립트에 추가 코드가 있습니다."라는 지침이 표시됩니다. 주어진 다음이 자동 생성됩니다 나는 그들을 채울 기회가 거의 없습니다.
trampster

postrm 및 prerm 생성 스크립트로 업데이트 된 질문
trampster

답변:


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> = 에 따르면 이 문제는 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.