데비안 패키징을 통해 조건부로 시스템 파일 활성화

데비안 패키징을 통해 조건부로 시스템 파일 활성화

나는서비스 패키지를 설치합니다.

임베디드 장치에서 이 패키지가 자동으로 서비스를 활성화하기를 원합니다. 우리 개발자 워크스테이션에서는 개발자가 수동으로 작업을 수행하기를 원합니다 systemctl start foo(무거운 서비스이므로 데스크톱 환경에서 항상 실행되는 경우 리소스만 소모합니다).

이 단계에서 사용자에게 결정을 내리도록 요청하려면 어떻게 해야 합니까 apt-get? 이것이 최선의 해결책입니까?

저는 dh_make이 패키지를 사용하고 생성했으며 debhelper다음을 통해 활성화했습니다.

%:
    dh $@ --with=systemd

override_dh_systemd_enable:
    dh_systemd_enable --name=foo foo.service

답변1

당신은 그것을 사용할 수 있습니다시스템 기본값설치 중에 systemd 서비스가 기본적으로 활성화 또는 비활성화되는지 여부에 영향을 줍니다.

/etc/systemd/system-preset/80-foo.presetDebian 사전 설정은 설치 시 기본적으로 모든 서비스를 활성화하므로 다음 줄이 포함된 파일과 같은 파일을 보내 개발 워크스테이션(기본 동작이 프로덕션에서 원하는 것과 일치하는 경우)으로 간단히 사전 설정을 보낼 수 있습니다 .

disable foo.service

Puppet, Chef, Ansible 등과 같은 시스템을 사용하여 개발자 워크스테이션을 관리하는 경우 이러한 시스템 사전 설정 구성을 제공하여 프로덕션 머신이 아닌 개발자 워크스테이션에만 정책을 쉽게 적용할 수 있습니다.

.deb 패키지는 systemctl preset사전 설정된 구성을 따르므로 이 명령을 사용하여 서비스를 활성화해야 합니다.

~처럼@JdeBP그리고@소스제디deb-helpers(예: )의 Debian 매크로가 이미 이 작업을 수행하고 있으며 기본적으로 사용되는 매크로를 dh_systemd_enable호출한다는 점을 지적했습니다 (패키지를 제거(그러나 정리하지 않음)한 다음 다시 설치하는 경우 작은 주의 사항이 있음). 프리셋 파일을 삭제해도 서비스가 활성화되지 않습니다.) 참조하세요.deb-systemd-helpersystemctl presetdeb-systemd-helperenable이 댓글이 실제로 작동 중입니다.:

    # We use 'systemctl preset' on the initial installation only.
    # On upgrade, we manually add the missing symlinks only if the
    # service already has some links installed. Using 'systemctl
    # preset' allows administrators and downstreams to alter the
    # enable policy using systemd-native tools.

사전 설정된 시스템 기능에 대한 자세한 내용은 매뉴얼 페이지를 참조하십시오.시스템 기본값그리고 명령을 내리다systemctl preset그것을 달성했습니다.

답변2

설치 중에 사용자에게 메시지를 표시하려면당신은 사용해야합니다debconf. 데비안 정책 관련 환경이 아니더라도 여기에는 많은 장점이 있습니다. 일관된 최종 사용자 경험을 제공하고 다양한 프런트엔드를 지원하며 사전 시드를 지원합니다. 미리 설정한다는 것은 패키지를 미리 구성할 수 있다는 의미이며, 이 경우 메시지가 전혀 표시되지 않습니다. 수준이 다르다는 것은 특정 상황에서만 표시되도록 프롬프트를 설정할 수 있다는 의미입니다. 그런 다음 기본적으로 (내장된 대상의 경우) 프롬프트 없이 패키지를 설치할 수 있으며 개발자에게 프롬프트가 표시되도록 프런트엔드를 적절하게 설정하도록 지시할 수 있습니다.

다만, 가능하면 프롬프트를 완전히 표시하지 않는 것이 가장 좋다고 생각합니다. 이는 최종 사용자 기본 설정을 처리하는 다른 방법이 있는 서비스의 경우 특히 그렇습니다. 사용자 기본 설정을 처리하면 유지 관리 스크립트가 복잡해집니다(이미 많은 세부 사항을 처리하는 패키지에서 생성된 스크립트를 참조하세요. deb-systemd-helper- 모두 복사해야 함) 선호하는 처리를 먼저 설정하세요).

개발자가 서비스 실행이 필요하지 않은 경우 패키지를 설치하기 전에 서비스를 차단하면 서비스가 활성화되지 않습니다.

sudo systemctl mask foo

개발자가 때때로 서비스를 실행하기 위해 systemd 장치를 사용해야 하는 경우, 패키지를 처음 설치한 후 이를 비활성화할 수 있으며 후속 설치에서는 다음 사항을 기억합니다.

sudo apt install foo
sudo systemctl disable --now foo

이 서비스는 기본적으로 활성화되어 있습니다.

관련 정보