특정 패키지에 대해 debconf를 생성하는 방법은 무엇입니까?

특정 패키지에 대해 debconf를 생성하는 방법은 무엇입니까?

다음과 같은 방법으로 가상 머신에서 Debian10 머신을 자동으로 복제하려고 합니다..

나는 처음부터 시작한다그런 다음 모든 패키지와 구성을 다시 설치하십시오.

그래서 하드웨어 컴퓨터에서 시도해 보았습니다.

dpkg --get-selections > dpkg
debconf-get-selections > debconf

그런 다음 가상 머신에서 가져옵니다.

debconf-set-selections < debconf
apt-get -y install dselect
dselect update
dpkg --force-confold --set-selections < dpkg
apt-get -y update
apt-get -y -o Dpkg::Options::="--force-confold" dselect-upgrade
apt-get -o Dpkg::Options::="--force-confold" -f install

모든 것이 예상대로 작동하지만 msmtp및 의 경우 phpldadmin의사 터미널 대화 상자를 통해 이전 구성을 선택하라는 메시지가 표시됩니다 ucf.

debconf두 대화 상자에 자동으로 응답하려면 어떻게 해야 합니까 (또는 다른 트릭)?

debconf수동 선택 대화 상자로 인해 업데이트를 시도했지만 성공하지 못했습니다.

이것 pstree:

  │                       └─dpkg,18446 --force-confold -i phpldapadmin_1.2.2-6.1~bpo9+1_all.deb
  │                           └─frontend,18456 -w /usr/share/debconf/frontend /var/lib/dpkg/info/phpldapadmin.postinst configure 
  │                               ├─phpldapadmin.po,18470 -e /var/lib/dpkg/info/phpldapadmin.postinst configure 
  │                               │   └─ucf,18483 /usr/bin/ucf --debconf-ok /tmp/tmp.eP3bVeYBPp /etc/phpldapadmin/config.php
  │                               └─whiptail,18522 --backtitle Package configuration --title Configuring phpldapadmin --output-fd 11 --nocancel --default-item ...

여기에 이미지 설명을 입력하세요.

에서 man dpkg:

confifold: conf 파일이 수정되고 패키지의 버전이 변경된 경우 --force-confdef도 지정하지 않는 한 프롬프트 없이 이전 버전이 항상 유지됩니다. 이 경우 기본 작업이 선호됩니다.

하지만 이 스위치를 사용해도 메시지가 표시됩니다.

msmtpDeb 미팅:

$ grep msmtp debconf 
# Action souhaitée pour le fichier de configuration modifié msmtprc :
msmtp   msmtp/auto_from boolean true
msmtp   msmtp/tls   boolean on on on /etc/ssl/certs/ca-certificates.crt
msmtp   msmtp/host  string  smtp.foobarmail.com
msmtp   msmtp/maildomain    string  
msmtp   msmtp/port  string  587
msmtp   msmtp/sysconfig boolean true

phpldapadminDeb 미팅:

$ grep phpldapadmin ../../files/debconf.db 
phpldapadmin    phpldapadmin/restart-webserver  boolean true
phpldapadmin    phpldapadmin/ldap-authtype  select  session
phpldapadmin    phpldapadmin/ldap-server    string  127.0.0.1
phpldapadmin    phpldapadmin/ldap-basedn    string  xxxx
phpldapadmin    phpldapadmin/ldap-bindpw    string  secret
phpldapadmin    phpldapadmin/ldap-tls   boolean false
phpldapadmin    phpldapadmin/reconfigure-webserver  multiselect apache2
phpldapadmin    phpldapadmin/ldap-binddn    string xxxx

답변1

다음과 같이 해결되었습니다.

export LANG=C
export DEBIAN_FRONTEND=noninteractive # very important
debconf-set-selections < debconf
apt-get -y install dselect
dselect update
dpkg --force-confold --set-selections < /root/pkgs
apt-get -y update
yes '' | apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" dselect-upgrade
yes '' | apt-get -y -o Dpkg::Options::="--force-confdef" -o DPkg::options::="--force-confold" -f install

if ! dpkg -l | grep -q phpldapadmin; then
    wget http://ftp.fr.debian.org/debian/pool/main/p/phpldapadmin/phpldapadmin_1.2.2-6.1~bpo9+1_all.deb -O  phpldapadmin_1.2.2-6.1~bpo9+1_all.deb
    yes '' | dpkg --force-confold --force-confdef -i phpldapadmin_1.2.2-6.1~bpo9+1_all.deb
fi

고마워요^^

관련 정보