systemd-networkd
예를 들어 인터페이스 IP를 구성하는 구성이 포함된 데비안 패키지가 있습니다 .
systemd-networkd
이는 런타임에만 의미가 있습니다.
그래서 서비스가 활성화되어 실행되고 있는지 확인하고 싶습니다. 그러나 postinst에 넣는 것은 잘못된 것 같습니다.
systemctl enable systemd-networkd
systemctl start systemd-networkd
이 문제를 해결하는 올바른 방법은 무엇입니까?
답변1
일반적으로 패키지가 배포하는 서비스 내에서 이를 사용하는 데 문제가 없습니다 systemctl enable
. postinst
많은 데비안 패키지는 deb-systemd-helper
이를 사용하여 공급업체 기본값을 존중하고 서비스를 명시적으로 비활성화하거나 차단하는 등의 세부 사항을 처리합니다.
systemd-networkd.service
systemd
자체 배포 됩니다 . 를 확인하면 이를 관리하는 데 사용되는 단위를 systemd.postinst
볼 수 있습니다 .systemd
systemctl
$ dpkg -S /lib/systemd/system/systemd-networkd.service
systemd: /lib/systemd/system/systemd-networkd.service
$ grep systemd-networkd.service -C3 /var/lib/dpkg/info/systemd.postinst
if [ -n "$2" ]; then
_systemctl daemon-reexec || true
...
_systemctl try-restart systemd-networkd.service || true
_systemctl try-restart systemd-journald.service || true
fi
그러나 다른 패키지가 소유한 서비스를 활성화하는 것은 일반적이지 않습니다. 대신 단위 관계 사용을 고려해 보세요.
패키지가 자체 시스템 단위를 배포하는 경우(이 네트워크 구성에 따라) [Unit]
섹션에 다음을 추가하기만 하면 됩니다.
[Unit]
Requires=systemd-networkd.service
After=systemd-networkd.service
이렇게 하면 부팅 시 장치가 부팅됩니다. 부팅에 실패하면 systemd-networkd.service
장치가 부팅되지 않습니다.systemd-networkd.service
패키지에 유닛이 없으면 간단히 이 작업을 수행하는 대상을 만드는 것을 고려해 보십시오.
# /lib/systemd/system/mypackage.target
[Unit]
Description=MyPackage unit dependency management
Requires=systemd-networkd.service
After=systemd-networkd.service
[Install]
WantedBy=multi-user.target
그런 다음 관리자 스크립트에서 이를 관리합니다.
# postinst
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
deb-systemd-helper unmask 'mypackage.target' >/dev/null || true
if deb-systemd-helper --quiet was-enabled 'mypackage.target'; then
deb-systemd-helper enable 'mypackage.target' >/dev/null || true
else
deb-systemd-helper update-state 'mypackage.target' >/dev/null || true
fi
fi
# prerm
if [ "$1" = remove ] ; then
deb-systemd-invoke stop 'mypackage.target' >/dev/null || true
fi
# postrm
if [ "$1" = remove ] ; then
systemctl --system daemon-reload >/dev/null || true
fi
if [ "$1" = "purge" ]; then
deb-systemd-helper purge 'mypackage.target' >/dev/null || true
fi
debhelper를 사용하여 debian/rules
패키지를 생성하는 경우 다음을 사용하는 것을 고려하십시오.dh_installsystemd
이렇게 하면 관리자 스크립트의 @DEBHELPER@
자리 표시자 에 자동으로 추가됩니다.