systemd 시스템에서 Debconf 오류가 발생했습니다.

systemd 시스템에서 Debconf 오류가 발생했습니다.

debconf설치 중에 Ubuntu 16.04에서 구성 패키지를 사용하는 동안 다음 문제가 발생했습니다.

보다 정확하게는 이 패키지는 debconf구성 파일을 저장한 다음 postinst스크립트에서 서비스를 시작하는 데 사용됩니다. 또한 서비스는 debconf모듈을 사용하여 이전 단계에서 저장한 구성을 로드합니다.

그러나 다음 오류로 인해 서비스가 systemd시작되지 않습니다.

debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarily unavailable

내가 아는 한, 이 파일은 dpkg여전히 ​​프런트엔드를 사용하여 액세스되고 debconf있으며 서비스가 다른 프런트엔드를 시작하려고 하면 충돌이 발생합니다(환경 변수가 DEBIAN_HAS_FRONTEND서비스에 전달되지 않음). DEBIAN_HAS_FRONTEND스크립트에서 env 변수를 강제로 적용하려고 시도했지만 다른 오류가 발생했습니다.

dpkg프로세스가 끝나고 debconf완료된 후에 데몬을 강제로 시작해야 한다고 생각합니다. 어떤 아이디어가 있습니까?

답변1

그래서 마침내 문제를 발견했고 나중에 누군가에게 도움이 될까봐 게시하겠습니다.

앞서 말했듯이 postinst스크립트에서 서비스를 시작하려고 하는데 서비스가 일부 구성 매개변수를 가져오려고 한다고 하는데 이미 실행 중인 인스턴스가 있기 때문에 debconfig오류가 발생합니다 (모든 구성이 파일 에 있음에도 불구하고). , 파일이 아님).debconfconfigpostinst

당시 문제는 스크립트 debconf를 실행하는 동안 postinst내가 사용하고 있지 않은 프런트엔드가 활성화되어 있다는 것이었습니다 debconf. 그러나 로드된 행에 주석을 달았습니다 confmodue.

# . /usr/share/debconf/confmodule

확실히,dpkg-reconfigure(저도 추측하고 있습니다 dpkg.) 파일( , 및 ) 의 "confmodule" 문자열과 일치 confmodule하면 로드되는 것으로 간주됩니다. 따라서 confmodule을 효과적으로 로드하지 않은 동안 dpkg-reconfigure는 프런트엔드를 해제하지 않았으므로 서비스가 다른 인스턴스를 시작할 수 없었습니다. 해결책은 단순히 줄을 삭제하는 것입니다.configpostinstprermdebconf

답변2

첫째, 독립형 프로그램에서 debconf를 사용하는 것은 잘못된 것 같습니다. man debconf-devel다른 스크립트 섹션 인용 :

다른 독립형 프로그램에서도 debconf를 사용할 수 있습니다. 여기서 주목해야 할 문제는 debconf가 의도된 것이 아니며 레지스트리로 사용할 수 없다는 것입니다. 이것은 결국 유닉스이고, 프로그램은 모호한 debconf 데이터베이스(어쨌든 단지 캐시일 뿐이며 아마도 날아갈 것임)가 아닌 /etc의 파일로 구성됩니다. 그러므로 독립형 프로그램에서 debconf를 사용하기 전에 신중하게 생각하십시오.

동일한 매뉴얼 페이지는 이전 섹션(POSTINST SCRIPT)의 실제 문제를 해결하는 데도 도움이 될 수 있습니다.

postinst가 데몬을 시작하는 경우 debconf에 마지막으로 중지하라고 지시해야 합니다. debconf는 postinst가 완료되는 시점에 대해 약간 혼란스러울 수 있기 때문입니다.

즉, db_stop데몬을 시작하기 전에 문제를 발행하십시오(debconf 자체를 사용하지 않더라도).

관련 정보