데비안 패키지를 제거하면 systemd 서비스가 자동으로 차단되어 systemd 경고가 발생합니다.

데비안 패키지를 제거하면 systemd 서비스가 자동으로 차단되어 systemd 경고가 발생합니다.

데비안 불안정 컨테이너를 시작했습니다. 초기에는 컨테이너 내의 시스템이 나타났습니다 rsync.service: Cannot add dependency job, ignoring: Unit rsync.service is masked.

rsync 패키지가 제거되었기 때문에 rsync.service가 자동으로 차단된다고 확신합니다. 패키지를 다시 설치하면 다시 공개되었습니다.

  1. 이 동작에 대한 문서가 있습니까?
  2. 데비안에서 이러한 동작에 직면했을 때 systemd가 경고를 발행하도록 하는 충돌은 무엇입니까?
  3. rsync를 설치할 때 차단하면 이 동작이 어떻게든 감지되고, rsync를 제거하고 다시 설치할 때 자동으로 차단이 해제되지 않는다는 사실에 놀랐습니다. 이것이 어떻게 달성됩니까? ? 다른 미묘한 제한 사항이 있습니까?

패키지가 제거된 것으로 확인되면 자동으로 패키지를 차단합니다.

rsync가 원래 설치되었지만 지금은 제거되었다는 것을 알고 있습니다. 마스크를 벗었더니 이렇게 남았습니다.

$ sudo systemctl status rsync
● rsync.service - LSB: fast remote file copy program daemon
   Loaded: loaded (/etc/init.d/rsync; generated; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:systemd-sysv-generator(8)

$ # reset status of all systemd services
$ # DO NOT TRY THIS COMMAND INSIDE A REAL, NON-CONTAINER SYSTEM...
$ # IT DOES NOT GO WELL.
$ sudo systemctl isolate default.target

$ sudo systemctl status rsync
● rsync.service - LSB: fast remote file copy program daemon
   Loaded: loaded (/etc/init.d/rsync; generated; vendor preset: enabled)
   Active: active (exited) since Wed 2017-06-07 11:35:27 BST; 1s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 432 ExecStart=/etc/init.d/rsync start (code=exited, status=0/SUCCESS)
   CGroup: /machine.slice/machine-unstable.scope/system.slice/rsync.service

Jun 07 11:35:27 unstable systemd[1]: Starting LSB: fast remote file copy program daemon...
Jun 07 11:35:27 unstable systemd[1]: Started LSB: fast remote file copy program daemon.

이 출력은 오해의 소지가 있습니다. 아무것도 변경하지 않았기 때문에 데비안이 /etc/init.d/rsync시작되지 않았습니다 . (이 경우 init 스크립트 자체는 자동으로 종료되지만 systemd는 위에 표시된 로그 메시지와 유사한 시작 메시지로 시작한다고 생각합니다.) rsync --daemon따라서 마스킹은 여기서 유용한 역할을 합니다.RSYNC_ENABLE=false/etc/default/rsync

(패키지를 제거한 후에도 /etc/init.d/rsync가 남아 있는 이유는 initscript가 사용자가 편집할 수 있는 구성 파일로 간주되기 때문입니다)

rsync를 다시 설치하면 rsync.service가 차단 해제되는 것으로 나타났습니다. 삭제하면 rsync.service가 다시 차단됩니다.

rsync를 설치하고 차단한 다음 rsync를 제거하고 다시 설치하면 rsync가 차단된 상태로 유지됩니다.

apt-get remove --purge rsync나머지 구성 파일을 포함하여 완전히 제거를 사용하면 마스크가 제거됩니다.

etckeeper를 설치했기 때문에 완전히 제거하면 /etc/systemd/system/multi-user.target.wants/rsync.service마스크( /etc/systemd/system/rsync.service-> /dev/null)도 제거될 뿐만 아니라 etckeeper도 제거되는 것으로 나타났습니다. 이러한 파일은 모두 패키지( dpkg-query -L rsync)에 속하지 않으므로 이러한 삭제는 패키지 스크립트로 인해 발생한 것으로 보입니다.

소프트웨어 버전

최신 데비안 불안정 컨테이너. 이 질문은 스트레치가 출시되기 직전에 제기되었습니다.

호스트는 systemd-container 버전 231-15.fc25를 사용합니다.

시스템 메시지 "무시: 단위 rsync.service 차단됨"에 대한 추가 컨텍스트

$ sudo systemd-nspawn -b -D unstable
Spawning container unstable on /home/nspawn/unstable.
Press ^] three times within 1s to kill container.
systemd 232 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Detected virtualization systemd-nspawn.
Detected architecture x86-64.

Welcome to Debian GNU/Linux 9 (stretch)!

Set hostname to <unstable>.
Failed to install release agent, ignoring: File exists
rsync.service: Cannot add dependency job, ignoring: Unit rsync.service is masked
[  OK  ] Started Dispatch Password Requests to Console Directory Watch.

답변1

이 동작에 대한 문서가 있습니까?

그것은 기록되었습니다. 포인터이는 나중에 다른 곳으로 이동된 파일에 대한 커밋 메시지에서 발견되었습니다.

rsync를 설치할 때 차단하면 이 동작이 어떻게든 감지되고, rsync를 제거하고 다시 설치할 때 자동으로 차단이 해제되지 않는다는 사실에 놀랐습니다. 이것이 어떻게 달성됩니까? ? 다른 미묘한 제한 사항이 있습니까?

주의 깊게 살펴보면 여전히 찾을 수 있습니다.소스 내역. 그것은 다음으로 연결됩니다질문이는 systemd에서 마스킹을 사용하면 System V init 스크립트를 최대한 효과적으로 처리할 수 있음을 확인합니다.

Tangent: 이에 대한 필요성을 제거하는 구현되지 않은 제안이 있습니다.#749400 - dh_installinit: 패키지 제거 시 init 스크립트를 비활성화합니다.. 그렇다고 그것이 명백히 좋은 생각이라고 말하는 것은 아닙니다. IIUC에서는 사용자가 스크립팅을 활성화했는지 여부를 추적할 방법이 없습니다. (이것은 시스템 V init의 각 런레벨에 대한 별도의 설정입니다.)

단서는 내가 찾은 패키지 스크립트에 있었습니다 /var/lib/dpkg/info/rsync.postrm.

## from /usr/share/debhelper/autoscripts/postrm-systemd :

if [ "$1" = "remove" ]; then
    if [ -x "/usr/bin/deb-systemd-helper" ]; then
        deb-systemd-helper mask rsync.service >/dev/null
    fi
fi

그 기능은 에 설명되어 있습니다 . man deb-systemd-helper"'차단' 작업은 서비스가 이전에 활성화/비활성화되었는지 여부를 유지하고 '차단 해제' 시 해당 상태로 올바르게 돌아갑니다." rsync.postinst

## from /usr/share/debhelper/autoscripts/postinst-systemd-enable :

# This will only remove masks created by d-s-h on package removal.
deb-systemd-helper unmask rsync.service >/dev/null || true

Fedora Linux(버전 25)는 이 동작을 구현하지 않습니다. 아마도 시스템 V init를 지원하지 않고 레거시 init 스크립트를 완전히 제거하는 정책이 있기 때문일 것입니다. 전환 중에 이 문제를 어떻게 처리하는지 모르겠지만 기능적 문제를 일으키지 않고 무시할 수 있습니다.

데비안에서 이러한 동작에 직면했을 때 systemd가 경고를 발행하도록 하는 충돌은 무엇입니까?

일반적으로 차단 가능한 서비스는 조금 수상쩍은 것 같죠?

rpm 기반 배포판은 initscripts를 활성화하려고 시도하지 않거나 시도하지 않는 것 같습니다. checkconf --del제거되면 실행되기 때문입니다 .https://www.cyberciti.biz/faq/centos-rhel-suse-rpm-see-installation-uninstallation-scripts/


최신 Fedora rpm에는 비슷한 코드가 있습니다.

$ rpm -q --scripts rsync
...
    # Package removal, not upgrade 
    systemctl --no-reload disable --now avahi-daemon.socket avahi-daemon.service > /dev/null 2>&1 || :
...

rsync-daemon을 제거해도 제거되지 않는다는 것을 알았기 때문에 이것을 보았습니다 /etc/systemd/system/multi-user.target.wants/rsyncd.service. 왜냐하면 systemctl disable심볼릭 링크가 삭제된 파일을 가리키는 경우 해당 파일은 현재 삭제되지 않기 때문입니다. 이는 rsync 패키지와 관련된 오류입니다. 서비스 파일은 패키지에 있지만 rsync서비스를 참조하는 rpm 스크립트는 패키지에 있습니다 rsync-daemon.

관련 정보