DEBCONF(7) Miscellaneous Information Manual DEBCONF(7)
NAME
debconf - Debian package configuration system
DESCRIPTION
Debconf is a configuration system for Debian packages. There is a
rarely-used command named debconf, documented in debconf(1)
Debconf provides a consistent interface for configuring packages, allow-
ing you to choose from several user interface frontends. It supports
preconfiguring packages before they are installed, which allows large
installs and upgrades to ask you for all the necessary information up
front, and then go do the work while you do something else. It lets you,
if you're in a hurry, skip over less important questions and information
while installing a package (and revisit it later).
Preconfiguring packages
Debconf can configure packages before they are even installed onto your
system. This is useful because it lets all the questions the packages
are going to ask be asked at the beginning of an install, so the rest of
the install can proceed while you are away getting a cup of coffee.
If you use apt (version 0.5 or above), and you have apt-utils installed,
each package apt installs will be automatically preconfigured. This is
controlled via /etc/apt/apt.conf.d/70debconf
Sometimes you might want to preconfigure a package by hand, when you're
not installing it with apt. You can use dpkg-preconfigure(8) to do that,
just pass it the filenames of the packages you want to preconfigure. You
will need apt-utils installed for that to work.
Reconfiguring packages
Suppose you installed the package, and answered debconf's questions, but
now that you've used it awhile, you realize you want to go back and
change some of your answers. In the past, reinstalling a package was of-
ten the thing to do when you got in this situation, but when you rein-
stall the package, debconf seems to remember you have answered the ques-
tions, and doesn't ask them again (this is a feature).
Luckily, debconf makes it easy to reconfigure any package that uses it.
Suppose you want to reconfigure debconf itself. Just run, as root:
dpkg-reconfigure debconf
This will ask all the questions you saw when debconf was first in-
stalled. It may ask you other questions as well, since it asks even low
priority questions that may have been skipped when the package was in-
stalled. You can use it on any other package that uses debconf, as
well.
Frontends
One of debconf's unique features is that the interface it presents to
you is only one of many, that can be swapped in at will. There are many
debconf frontends available:
dialog The default frontend, this uses the whiptail(1) or dialog(1) pro-
grams to display questions to you. It works in text mode.
readline
The most traditional frontend, this looks quite similar to how
Debian configuration always has been: a series of questions,
printed out at the console using plain text, and prompts done us-
ing the readline library. It even supports tab completion. The
libterm-readline-gnu-perl package is strongly recommended if you
chose to use this frontend; the default readline module does not
support prompting with default values. At the minimum, you'll
need the perl-modules package installed to use this frontend.
This frontend has some special hotkeys. Pageup (or ctrl-u) will
go back to the previous question (if that is supported by the
package that is using debconf), and pagedown (or ctrl-v) will
skip forward to the next question.
This is the best frontend for remote admin work over a slow con-
nection, or for those who are comfortable with unix.
noninteractive
This is the anti-frontend. It never interacts with you at all,
and makes the default answers be used for all questions. It might
mail error messages to root, but that's it; otherwise it is com-
pletely silent and unobtrusive, a perfect frontend for automatic
installs. If you are using this front-end, and require non-de-
fault answers to questions, you will need to preseed the debconf
database; see the section below on Unattended Package Installa-
tion for more details.
gnome This is a modern X GUI using the gtk and gnome libraries. Of
course, it requires a valid DISPLAY to work; debconf will fall
back to other frontends if it can't work. Note that this frontend
requires you have the libgtk3-perl package installed.
kde This frontend provides a modern X GUI based on the KDE Platform.
You of course need a DISPLAY to use this frontend and you must
install debconf-kde-helper package. The frontend will fall back
to dialog if some of the prerequisites are not met.
editor This is for those fanatics who have to do everything in a text
editor. It runs your editor on a file that looks something like a
typical unix config file, and you edit the file to communicate
with debconf. Debconf's author prefers to not comment regarding
the circumstances that led to this frontend being written.
web
This frontend acts as a web server, that you connect to with your
web browser, to browse the questions and answer them. It has a
lot of promise, but is a little rough so far. When this frontend
starts up, it will print out the location you should point your
web browser to. You have to run the web browser on the same ma-
chine you are configuring, for security reasons.
Do keep in mind that this is not a very secure frontend. Anyone
who has access to the computer being configured can currently ac-
cess the web server and configure things while this frontend is
running. So this is more of a proof of concept than anything.
You can change the default frontend debconf uses by reconfiguring deb-
conf. On the other hand, if you just want to change the frontend for a
minute, you can set the DEBIAN_FRONTEND environment variable to the name
of the frontend to use. For example:
DEBIAN_FRONTEND=readline apt-get install slrn
The dpkg-reconfigure(8) and dpkg-preconfigure(8) commands also let you
pass --frontend= to them, followed by the frontend you want them to use.
Note that not all frontends will work in all circumstances. If a fron-
tend fails to start up for some reason, debconf will print out a message
explaining why, and fall back to the next-most similar frontend.
Priorities
Another nice feature of debconf is that the questions it asks you are
prioritized. If you don't want to be bothered about every little thing,
you can set up debconf to only ask you the most important questions. On
the other hand, if you are a control freak, you can make it show you all
questions. Each question has a priority. In increasing order of impor-
tance:
low Very trivial questions that have defaults that will work in the
vast majority of cases.
medium Normal questions that have reasonable defaults.
high Questions that don't have a reasonable default.
critical
Questions that you really, really need to see (or else).
Only questions with a priority equal to or greater than the priority you
choose will be shown to you. You can set the priority value by reconfig-
uring debconf, or temporarily by passing --priority= followed by the
value to the dpkg-reconfigure(8) and dpkg-preconfigure(8) commands, or
by setting the DEBIAN_PRIORITY environment variable.
Backend Database
Debconf uses a rather flexible and potentially complicated backend data-
base for storing data such as the answers to questions. The file
/etc/debconf.conf is used to configure this database. If you need to set
up something complicated, like make debconf read a remote database to
get defaults, with local overrides, read the debconf.conf(5) man page
for all the gory details. Generally, the backend database is located in
/var/cache/debconf/
.
Unattended Package Installation
If you have many machines to manage you will sometimes find yourself in
the position of needing to perform an unattended installation or upgrade
of packages on many systems, when the default answers to some configura-
tion questions are not acceptable. There are many ways to approach this;
all involve setting up a database and making debconf use it to get the
answers you want.
You should really read debconf.conf(5) before this section, as you need
to understand how debconf's databases work.
The easiest way to set up the database is to install the packages on one
machine and answer their questions as usual. Or you might just use dpkg-
preconfigure(8) to configure a set of packages without actually in-
stalling them. Or you might even decide to write a plain text debconf
database by hand or something.
Once you have the database, you need to figure out how to make the re-
mote systems use it. This depends of course on the configuration of
those systems and what database types they are set up to use.
If you are using the LDAP debconf database, an entire network of debian
machines can also have any or all package installation questions an-
swered automatically by a single LDAP server.
But perhaps you're using something a little bit easier to set up like,
say, the default debconf database configuration, or you just don't want
your remote systems to use LDAP all the time. In this case the best ap-
proach is to temporarily configure the remote systems to stack your
database underneath their own existing databases, so they pull default
values out of it. Debconf offers two environment variables, DEB-
CONF_DB_FALLBACK and DEBCONF_DB_OVERRIDE, to make it easy to do this on
the fly. Here is a sample use:
cat /var/cache/debconf/config.dat | \
ssh root@target "DEBIAN_FRONTEND=noninteractive \
DEBCONF_DB_FALLBACK=Pipe apt-get upgrade"
This makes the debconf on the remote host read in the data that is piped
across the ssh connection and interpret it as a plain text format deb-
conf database. It then uses that database as a fallback database -- a
read-only database that is queried for answers to questions if the sys-
tem's main debconf database lacks answers.
Here's another way to use the DEBCONF_DB_FALLBACK environment variable:
ssh -R 389:ldap:389 root@target \
"DEBCONF_DB_FALLBACK='LDAP{host:localhost}' apt-get upgrade"
Here ssh is used to set up a tunneled LDAP connection and run debconf.
Debconf is told to use the LDAP server as the fallback database. Note
the use of "{host:localhost}" to configure how debconf accesses the LDAP
database by providing the "host" field with a value of "localhost".
Here's another method:
scp config.dat root@target:
ssh root@target "DEBCONF_DB_FALLBACK='File{/root/config.dat}' apt-get
upgrade
Here you copy the database over with scp, and then ssh over and make de-
bconf use the file you copied over. This illustrates a shorthand you can
use in the DEBCONF_DB_FALLBACK parameters -- if a field name is left
off, it defaults to "filename".
There is only one problem with these uses of the DEBCONF_DB_FALLBACK pa-
rameter: While the fallback database can provide answers to questions
the other debconf databases have never seen, it is only queried as a
fallback; after the other databases. If you need to instead temporarily
override an existing value on the remote host, you should instead use
the DEBCONF_DB_OVERRIDE variable. Like DEBCONF_DB_FALLBACK, it sets up a
temporary database, but this database is consulted before any others,
and can be used to override existing values.
Developing for Debconf
Package developers and others who want to develop packages that use deb-
conf should read debconf-devel(7)
.
Briefly, debconf communicates with maintainer scripts or other programs
via standard input and output, using a simple line-oriented command lan-
guage similar to that used by common internet protocols such as SMTP.
Programs use this protocol to ask debconf to display questions to the
user, and retrieve the user's answers. The questions themselves are de-
fined in a separate file, called the "templates file", which has a for-
mat not unlike a debian control file.
Debian packages which use debconf typically provide both a templates
file and a "config" script (run to preconfigure the package) in the con-
trol metadata section of the package.
ENVIRONMENT
DEBIAN_FRONTEND
Used to temporarily change the frontend debconf uses. See above.
DEBIAN_PRIORITY
Used to temporarily change the minimum priority of question deb-
conf will display. See above.
DEBCONF_DEBUG
Turns on debugging output on standard error. May be set to a fa-
cility name or a regular expression which matches a facility name
(such as '.*' to output all debug info). The facility names in-
clude:
user Debugging info of interest to a debconf user.
developer
Debugging info of interest to a package developer.
db Debugging info about the backend database.
DEBCONF_NOWARNINGS
Set to "yes" to disable some warnings that debconf may display.
Does not suppress display of fatal errors.
DEBCONF_TERSE
Set to "yes" to enable terse mode, in which debconf frontends cut
down on the verbiage as much as possible.
DEBCONF_DB_FALLBACK
Stack a database after the normally used databases, so that it is
used as a fallback to get configuration information from. See
"Unattended Package Installation" above. If the value of the
variable is the name of an existing database in debconf.conf,
then that database will be used. Otherwise, the environment
variable can be used to configure a database on the fly, by
telling the type of database, and optionally passing field:value
settings, inside curly braces after the type. Spaces are used to
separate fields, so you cannot specify a field value containing
whitespace.
Thus, this uses the fallbackdb in debconf.conf:
DEBCONF_DB_FALLBACK=fallbackdb
While this sets up a new database of type File, and tells it a filename
to use and turns off backups:
DEBCONF_DB_FALLBACK=File{Filename:/root/config.dat Backup:no}
And as a shorthand, this sets up a database of type File with a file-
name:
DEBCONF_DB_FALLBACK=File{/root/config.dat}
Note that if a fallback database is set up on the fly, it will be read-
only by default.
DEBCONF_DB_OVERRIDE
Stack a database before the normally used databases, so that it
can override values from them. The value of the variable works
the same as does the value of DEBCONF_DB_FALLBACK.
DEBCONF_DB_REPLACE
Use a given database instead of the normally used databases.
This may be useful for testing with a separate database without
having to create a separate debconf.conf, or to avoid locking the
normal databases.
DEBCONF_SYSTEMRC
If this environment variable is set, debconf will ignore a user's
~/.debconfrc file, and use the system one instead. If it is set
to the name of a regular file, debconf will use that file in
preference to the system configuration files.
DEBCONF_FORCE_DIALOG
If this environment variable is set, debconf will use dialog in
preference to whiptail for the dialog frontend.
DEBCONF_FORCE_XDIALOG
If this environment variable is set, debconf will use Xdialog in
preference to whiptail for the dialog frontend.
DEBCONF_NONINTERACTIVE_SEEN
Set to "true" to cause the seen flag to be set for questions
asked in the noninteractive frontend.
BUGS
Probably quite a few, there's a lot of code here.
If you do file a bug report, be sure to include the following informa-
tion:
* The debconf frontend you were using when the problem occurred
* What you did to trigger the problem.
* The full text of any error messages. If you can reproduce the
bug, do so with DEBCONF_DEBUG='.*' set and exported. This speeds
up debugging a lot.
SEE ALSO
debconf.conf(5), debconf-devel(7), dpkg-preconfigure(8), dpkg-reconfig-
ure(8), debconf(1),
AUTHOR
Joey Hess <joeyh@debian.org>
DEBCONF(7)
Generated by dwww version 1.16 on Sat Oct 3 05:06:39 CEST 2026.