패키지의 서비스 단위 파일을 사용자 정의 버전으로 올바르게 교체하려면 어떻게 해야 합니까?

패키지의 서비스 단위 파일을 사용자 정의 버전으로 올바르게 교체하려면 어떻게 해야 합니까?

특정 패키지의 서비스 단위 파일을 내 버전으로 교체하는 방법이 궁금합니다. 즉, 이 서비스 단위 파일에서 몇 가지 문제를 발견하고 수정했습니다. 그러나 다음 패키지 업데이트에서는 변경 사항이 손실됩니다.

원래 패키지를 수정하고 고정 등을 사용할 수 있다는 것을 알고 있습니다. 하지만 이 경우에는 지나치게 복잡해 보이며 일반적인 방법으로 해당 패키지에 대한 업데이트를 받고 싶습니다. 이것은 수정된 버전으로 유지하고 싶은 서비스 단위 파일일 뿐입니다.

나는 다음과 같은 해결책을 생각해 냈습니다.

  • /lib/systemd/system/daemon.service를 /etc/systemd/system/my-daemon.service에 복사합니다.
  • 장애를 입히다그리고 마스크daemon.service는 systemd가 더 이상 시작하지 않도록 하고 패키지 업데이트로 인해 다시 활성화되지 않기를 바랍니다.
  • my-daemon.service에서 적절하게 수정하십시오.
  • my-daemon.service 활성화

이것이 합리적인 접근 방식입니까? 이 문제에 대한 "공식적인" 해결책이 있습니까?

답변1

기본적으로 systemd는 의 서비스 단위를 사용합니다 /usr/lib/systemd/system/daemon.service. 그러나 에서 서비스 단위를 찾으면 /etc/systemd/system/daemon.service자동으로 해당 단위를 사용하고 기본 단위를 무시합니다.

그래서 기본적으로

cp /usr/lib/systemd/system/daemon.service /etc/systemd/system/daemon.service

파일에서 필요한 사항을 변경합니다 /etc/systemd/system/daemon.service.

대체 방법:

이것이 마음에 들지 않거나 약간의 편집이 필요한 경우 systemctl edit daemon.service거기에서 실행하여 변경할 수 있습니다. 이러한 변경 사항은병합서비스 단위 systemd는 단위가 에 있는지 /usr/lib/...여부 에 관계없이 실행을 시도합니다 /etc/....

이점:

패키지와 함께 제공되는 단위 파일이 업데이트되면 이러한 변경 사항이 자동으로 조정 사항과 병합됩니다.

결점:

패키지와 함께 제공되는 단위 파일이 업데이트되면 이러한 변경 사항이 자동으로 조정 사항과 병합됩니다. (농담이 아닙니다. 때로는 정말 원하지 않는 경우도 있습니다.)

추악합니다. systemd는 /etc/systemd/system/daemon.overrides.d/변경 사항이 있는 디렉터리를 만듭니다. 조금 특이하고 놓치기 쉬우므로 나중에는 의아해할 수도 있습니다.

이 방법으로 콘텐츠를 바꿀 수는 없으며 재정의가 셀에 병합되므로 새 콘텐츠를 추가하기만 하면 됩니다. (확실하지는 않지만, 이 기능을 마지막으로 사용한 것은 얼마 전이었습니다.)

관련 정보