debconf 是 Debian 系統下用來設定各個 Debian 套件的設定維護系統。許多 Debian 套件使用 debconf 來提供一個標準的設定機制,在用戶安裝系統時詢問相關的選項或是設定細節。


對於開發者而言,以往要撰寫複雜的腳本檔(script)來詢問使用者的設定細節,例如一個簡單的 yes or no 寫成 shell script 就像是


#!/bin/sh -e
echo -n "Do you like debian? [yn] "
read like
case "$like" in
n*|N*)
echo "Poor misguided one. Why are you installing this package, then?"
/etc/init.d/subliminal_messages start "I like debian"
;;
esac
除了繁雜外,還容易因為打錯字(無論用戶或開發者)而造成意料外的臭虫。而使用 debconf ,開發者只需要寫下要問用戶的問題以及回答的類型,是選擇、複選、是非、字串或是密碼。

只需要寫一個問題範本


Template: foo/like_debian
Type: boolean
Description: Do you like Debian?
We'd like to know if you like the Debian GNU/Linux system.

然後把程式碼改成如下的腳本即可。


#!/bin/sh -e
# Source debconf library.
. /usr/share/debconf/confmodule

db_get foo/like_debian
if [ "$RET" = "false" ]; then
/etc/init.d/subliminal_messages start "I like debian."
fi

就是這麼簡單,如此一來便提供用戶多種圖形介面的選單。開發者應該盡量在包裝 deb 檔案時,盡量使用 debconf 。你也可以用 debconf 提醒用戶他應該注意的事項。只需要把 Type 改為 note。


Template: foo/why_debian_is_great
Type: note
Description: Poor misguided one. Why are you installing this package?
Debian is great. As you continue using Debian, we hope you will
discover the error in your ways.

Debconf 提供其他數種 GUI 選項,有 Dialog、Readline、Gnome、Editor、Passthrough、Web 與 Nointeractive 。

其中 Dialog 在適合的終端機模擬軟體下可以使用滑鼠點選選項,而 Passthrough 與 Web 則是隱藏的功能,在初次設定 debconf 時並不會看到這些介面。但是可以使用

dpkg-reconfigure -f web debconf

來使用 Web 設定介面,它會在 http://localhost:8001/ 開啟一個設定網頁,請使用自己喜歡的瀏覽器來連結設定。至於 Passthrough 介面則是透過 Unix domain socket 配合簡單的協定來對話設定,適合使用程式來自動設定。

任何一個介面無法啟用時,如 X Window 沒設定妥善,以至於 Gnome 跑不起來,它會依照內定的順序自動選擇另外一種可以使用的介面。

以上的介面使用起來就像是

dialog interface

一般人最常用的 Dialog 介面,可在模擬終端機介面下使用。

Gnome interface

更友善美觀的 Gnome/GTK 介面。

readline interface

以輸入回答方式的介面。

editor interface

編輯器介面。

Web interface

網頁介面(隱藏功能)。

有多台機器時,可以設定把設定檔案儲存在 NFS 網路磁碟或是 LDAP 上,如此一來可以讓數台機器共享同樣設定。只需要把其他的子機器設定為 Nointeractive,這在你要建立農場而畜牧數台同樣設定的機器時十分方便。請參考 debconf.conf (5) 。

請使用

dpkg-reconfigure debconf

來玩。當然,其他的許多套件也都可以在你安裝完後使用 dpkg-reconfigure 來修改設定。

延伸閱讀:

debconf specification

An Introduction to Debconf 請安裝 debconf-doc

The Debconf Programmer's Tutorial 請安裝 debconf-doc

以及大量的手冊

apt-extracttemplates (1) - Utility to extract DebConf config and templates from Debian packages
debconf (1) - run a debconf-using program
debconf2pot (1) - extract gettext strings from master files
debconf2po-update (1) - update PO files about debconf templates
debconf (7) - Debian package configuration system
Debconf::Client::ConfModule (3) - client module for ConfModules
debconf-communicate (1) - communicate with debconf
debconf.conf (5) - debconf configuration file
debconf-copydb (1) - copy a debconf db
debconf-devel (7) - developers guide
debconf-getlang (1) - extract a language from a templates file
debconf-gettextize (1) - add gettext support to Debconf templates
debconf-loadtemplate (1) - load template file into debconf database
debconf-mergetemplate (1) - merge together multiple debconf template files
debconf-show (1) - query the debconf database
debconf-updatepo (1) - update PO files about debconf templates
dexconf (1) - generate XFree86 X server configuration file from debconf database values
dh_installdebconf (1) - install files used by debconf in package build directories
po2debconf (1) - merge master templates file and PO files
po-debconf (7) - introduction