Debian
如何為特定包生成 debconf?
我嘗試通過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
一切都按預期工作,但是對於
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
: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
謝謝我^^