데비안 불안정 컨테이너를 시작했습니다. 초기에는 컨테이너 내의 시스템이 나타났습니다 rsync.service: Cannot add dependency job, ignoring: Unit rsync.service is masked
.
rsync 패키지가 제거되었기 때문에 rsync.service가 자동으로 차단된다고 확신합니다. 패키지를 다시 설치하면 다시 공개되었습니다.
- 이 동작에 대한 문서가 있습니까?
- 데비안에서 이러한 동작에 직면했을 때 systemd가 경고를 발행하도록 하는 충돌은 무엇입니까?
- 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
. 왜냐하면 이는 rsync 패키지와 관련된 오류입니다. 서비스 파일은 패키지에 있지만 systemctl disable
심볼릭 링크가 삭제된 파일을 가리키는 경우 해당 파일은 현재 삭제되지 않기 때문입니다.rsync
서비스를 참조하는 rpm 스크립트는 패키지에 있습니다 rsync-daemon
.