以非互動方式將輸入值提供給 dpkg-reconfigure
我想通過 dpkg-reconfigure 配置 ubuntu 包,並使用通過非互動模式(在腳本中)提供的所有值。
事實上,我的情況是火鳥配置(http://www.firebirdsql.org/manual/ubusetup.html),使用命令時:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
問我 2 個值,答案是 ‘Y’ 和 ’newpwd’ 。
範例輸出如下所示:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline * Firebird 2.5 superclassic server not running Configuring firebird2.5-superclassic ------------------------------------ Accept if you want Firebird server to start automatically. If you only need the Firebird client and there are no databases that will be served by this host, decline. Enable Firebird server? Y Password for firebird 2.5 ------------------------- Firebird has a special user named SYSDBA, which is the user that has access to all databases. SYSDBA can also create new databases and users. Because of this, it is necessary to secure SYSDBA with a password. The password is stored in /etc/firebird/2.5/SYSDBA.password (readable only by root). You may modify it there (don't forget to update the security database too, using the gsec utility), or you may use dpkg-reconfigure to update both. To keep your existing password, leave this blank. Password for SYSDBA: * Starting Firebird 2.5 superclassic server... ...done. * Firebird 2.5 superclassic server already running
我嘗試過
here strings
這樣的bash腳本:sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
但是,由於某種原因,這不起作用,它要求提供值。
任何想法如何將所需的值提供給腳本?
Debian 軟體包使用debconf來收集安裝時設置。Debconf 支持多個前端來提示使用者輸入值。選擇使用哪個 debconf 前端的
-f
選項。dpkg-reconfigure
readline
前端是為互動式使用而設計的。不要在自動腳本中使用它。如果預設值沒問題,那麼只需使用
noninteractive
前端。如果你想提供不同的值,你有兩個選擇。您可以堅持使用
noninteractive
前端,並預置 debconf 數據庫。最簡單的方法是在一台機器上安裝包並進行互動配置,然後從中提取相關部分/var/cache/debconf/config.dat
並將此文件提供給 debconf:DEBCONF_DB_OVERRIDE='File {/path/to/config.dat}' dpkg-reconfigure -fnoninteractive firebird2.5-superclassic
另一種方法是使用
editor
前端,並將環境變數VISUAL
(或EDITOR
,但如果已設置VISUAL
則優先EDITOR
)設置為一個程序,該程序將包含目前設置的文件作為參數,並用您想要的設置覆蓋該文件。
使用
debconf-set-selections
命令將新值插入 debconf 數據庫 (/var/cache/debconf/config.dat
)。Eli的答案對我來說並不清楚,所以我將逐步解釋。
首先要做的是以互動方式安裝包並通過(更改
firebird
為您的包名稱)獲取選擇的選項:sudo debconf-get-selections | grep ^firebird
或者:
grep -C2 firebird /var/cache/debconf/config.dat
然後在 debconf 數據庫中預先設置答案
debconf-set-selections
,例如:echo firebird2.5-superclassic shared/firebird/enabled boolean true | sudo debconf-set-selections -v echo firebird2.5-superclassic shared/firebird/sysdba_password/new_password password foo | sudo debconf-set-selections -v
其中語法是:
echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections
這是另一個
ttf-mscorefonts-installer
包的例子:echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
注意:輸入選擇可以來自標準輸入或文件。
檢查:
man debconf-set-selections
了解更多資訊。注意:如果
debconf-get-selections
找不到,請使用apt-get install debconf-utils
安裝。
另一種方法是使用Kickstart。