Dpkg

以非互動方式將輸入值提供給 dpkg-reconfigure

  • February 26, 2021

我想通過 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

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