Debian

如何為特定包生成 debconf?

  • February 14, 2021

我嘗試通過vagrant在 VM 中自動複製 Debian10 電腦。

我從頭開始使用打包程序,然後重新安裝所有包和配置。

所以,我嘗試從硬體電腦:

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

然後從 VM 導入它們:

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

一切都按預期工作,但是對於msmtpphpldadmin,我被提示在偽終端的對話框中通過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

confold:如果一個 conffile 被修改並且包中的版本確實發生了變化,請始終保留舊版本而不提示,除非還指定了 –force-confdef,在這種情況下,首選預設操作。

但即使使用此開關,我也會收到提示。

msmtp配置文件:

$ 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

phpldapadmin配置文件:

$ 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

像這樣解決:

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

謝謝我^^

引用自:https://unix.stackexchange.com/questions/631004