4.8 debconf

debconf ist ein zentrales System zur Verwaltung von Debian Paketen. Es gibt auch ein selten verwendetes Programm namens debconf, dies soll jedoch an dieser Stelle nicht weiter betrachtet werden (siehe hierzu debconf ). debconf bietet eine einheitliche Schnittstelle zur Konfiguration von Debian Paketen, der Benutzer kann dabei zwischen verschiedenen Frontends wählen. debconf kann vor der Installation von Paketen die notwendigen Parameter erfragen, so dass die weitere Installation einer großen Anzahl von Paketen unbeaufsichtigt erfolgen kann. Hierzu ist es notwendig, dass APT in der Version 0.5 oder höher installiert ist, weiterhin wird das Paket apt-utils benötigt.

Sollen Pakete nicht vor der Installation konfiguriert werden, so kann dies in der Datei /etc/apt/apt.conf.d/70debconf angepasst werden. Wie dort beschrieben, ist einfach eine Zeile mit einem Kommentarzeichen zu versehen. Ein einzelnes Paket kann vor der Installation gezielt vorkonfiguriert werden, hierzu dient das Kommando dpkg-preconfigure. Dieses findet sich im Paket apt-utils.

Ist nun ein Paket installiert und wurden alle debconf-Fragen während der Installation beantwortet, so kann es nach einiger Zeit wünschenswert sein, Anpassungen an der Konfiguration vorzunehmen. Ein einfaches Neuinstallieren des Pakets führt dabei nicht zum Erfolg, da die Antworten in der debconf-Datenbank gespeichert wurden. Bei einer neu Installation des Pakets versucht das System zunächst, diese Antworten in der Datenbank zu finden. Ist dies erfolgreich, so werden keine Fragen zur Konfiguration gestellt. Um nun ein Paket, beispielsweise debconf selbst, neu zu konfigurieren, kann das Kommando dpkg-reconfigure eingesetzt werden.

dpkg-reconfigure debconf

Bei diesem Vorgang werden alle Fragen erneut angezeigt, die auch ursprünglich bei der ersten Installation von debconf gestellt wurden. Dies muss natürlich mit Administratorrechten ausgeführt werden.

4.8.1 Frontends

debconf kann unterschiedliche Frontends zur Konfiguration von Paketen verwenden, diese können vom Benutzer ausgewählt werden. Folgende Frontends stehen zur Auswahl:

debconf-Frontends

dialog

Das standardmäßig verwendete Frontend auf Basis von whiptail oder dialog. Eine einfache grafische Oberfläche auf Textbasis.

readline

Einfache, rein textbasierte Oberfläche. Es wird eine Frage gestellt, und es müssen Werte eingegeben werden. Sehr gut geeignet, um remote auf einem System zu arbeiten.

noninteractive

Dies ist eigentlich gar kein Frontend, denn es werden keinerlei Fragen angezeigt. Alle Werte werden mit den Vorgabewerten aus dem Paket belegt. Es werden allerdings E-Mails an den Administrator gesendet, mit dem Hinweis, dass Pakete konfiguriert wurden bzw. dass noch Einstellungen vorzunehmen sind. Dies ist das beste Frontend, um automatische Installationen durchzuführen.

gnome

Ein modernes Frontend auf Basis der GNOME- und GTK-Bibliotheken. Dieses Frontend lässt sich nur sinnvoll verwenden, wenn lokal ein X-Server installiert ist oder wenn eine entsprechende DISPLAY Variable gesetzt wurde, um den Konfigurationsdialog auf einem anderen System anzuzeigen. Ist das Anzeigen dieses Frontends nicht möglich, so wird auf ein einfacheres Frontend zurückgegriffen.

kde

Ein modernes Frontend auf Basis der QT-Bibliotheken. Dieses Frontend lässt sich nur sinnvoll verwenden, wenn lokal ein X-Server installiert ist oder wenn eine entsprechende DISPLAY-Variable gesetzt wurde, um den Konfigurationsdialog auf einem anderen System anzuzeigen. Ist das Anzeigen dieses Frontends nicht möglich, so wird auf ein einfacheres Frontend zurückgegriffen.

editor

Das Frontend für Unix-Freaks, die alles in einem Texteditor bearbeiten möchten. Hierbei werden nicht die Konfigurationsdateien zu einem Paket aufgerufen, vielmehr können debconf-Parameter in dem Editor verändert werden.

web

Dieses Frontend verhält sich wie ein Webserver; alle Einstellungen können über einen beliebigen Browser vorgenommen werden. Dieses Frontend befindet sich noch in der Entwicklung.

Das von debconf verwendete Frontend kann bei einer Rekonfiguration von debconf gesetzt werden. Soll dagegen das Frontend nur für eine einzelne Aktion geändert werden, so kann auch die Umgebungsvariable DEBIAN_FRONTEND auf den gewünschten Wert gesetzt werden.

DEBIAN_FRONTEND=readline apt-get install slrn

Es ist auch möglich, den Kommandos dpkg-reconfigure und dpkg-preconfigure die Option --frontend=readline zu übergeben und auf diesem Wege das Frontend zu bestimmen.

4.8.2 Prioritäten

Über die debconf-Prioritäten kann die Tiefe der Fragen bestimmt werden. Jede Frage zu einer Konfigurationsoption ist mit einer Priorität versehen, über die der Betreuer des Pakets steuern kann, wie wichtig die Frage für das Funktionieren des Pakets ist. Wenn es Ihnen nicht so darauf ankommt, ein Paket bis ins letzte Detail anzupassen, so kann debconf dazu veranlasst werden, lediglich die essenziell wichtigen Fragen zu stellen.

Die Prioritäten sind dabei (in aufsteigender Priorität):

Prioritäten von debconf

low

Sehr einfache Fragen, die mit Voreinstellungen belegt sind, die in den meisten Fällen sinnvoll sind.

medium

Normale Fragen mit sinnvollen Vorgaben.

high

Fragen, die keine Vorgaben haben.

critical

Fragen, die unbedingt beantwortet werden müssen.

Es werden immer nur Fragen mit einer Priorität angezeigt, die der gewünschten Tiefe entspricht, oder die in der Wertigkeit höher liegen. Die Priorität kann gesetzt werden, indem debconf neu konfiguriert wird oder indem die Option --priority=medium den Kommandos dpkg-reconfigure und dpkg-preconfigure übergeben wird. Alternativ kann auch die Umgebungsvariable DEBIAN_PRIORITY auf die gewünschte Tiefe gesetzt werden.

4.8.3 debconf - Backend-Datenbank

debconf benutzt eine sehr flexible Struktur, um die Ergebnisse der Fragen in einer Datenbankstruktur abzulegen. In der Datei /etc/debconf.conf wird diese Anbindung an die Datenbank konfiguriert. Im Normalfall liegt diese Datenbank in Form von ASCII-Dateien auf dem lokalen Dateisystem im Verzeichnis /var/cache/debconf/. In der Konfigurationsdatei finden Sie Beispiele, wie eine Datenbank via NFS oder LDAP genutzt werden kann.

[Tipp]debconf im Backup

Bei der Planung eines Backups für das neue System sollte auch das Verzeichnis /var/cache/debconf/ gesichert werden. Obwohl im Verzeichnis /var/cache/ lediglich Daten liegen, die laufend verändert werden, so erspart das Sichern dieses Verzeichnisses die Fragen bei der erneuten Installation des Systems.

4.8.4 Unattended Installation

Bei der automatischen, unbeaufsichtigten Installation oder Aktualisierung von vielen Systemen kann es wünschenswert sein, nicht die vorgegebenen Antworten zu nutzen. Vielmehr ist eine individuelle Anpassung, meist von nur sehr wenigen Werten, wünschenswert.

Es gibt verschiedene Möglichkeiten, um dies zu erreichen. So kann beispielsweise eine debconf-Datenbank mit den gewünschten Informationen aufgesetzt werden, die bei der Installation verwendet wird. Der einfachste Weg zu einer solchen, mit sinnvollen Werten gefüllten Datenbank ist es, auf einem anderen System eine komplette Installation mit den entsprechenden Einstellungen durchzuführen und dann die Datenbank zu kopieren. Alternativ kann auch dpkg-preconfigure eingesetzt werden, um eine Auswahl von Paketen zu konfigurieren, ohne diese zu installieren. Natürlich kann die komplette debconf-Datenbank auch mit einem Texteditor der Wahl erstellt werden.

Ist die Datenbank mit den benötigten Werten vorbereitet, so ist zu überlegen, wie die zu installierenden Systeme auf diese Datenbank zugreifen können. Soll ein zentraler LDAP-Server verwendet werden, so kann bei der Installation von Paketen auf diesen zugegriffen werden, um die dort hinterlegten Werte auszulesen. debconf benutzt die beiden Umgebungsvariablen DEBCONF_DB_FALLBACK und DEBCONF_DB_OVERRIDE, um den Zugriff auf eine andere Datenbank zu steuern. Ein Beispiel:

cat /var/cache/debconf/config.dat | ssh root@target "DEBCONF_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe apt-get upgrade"

Dieses Kommando benutzt die lokale Datenbank, die via ssh auf das System gebracht wird. Dort wird die Datenbank als Fallback ausgelesen, falls lokal keine entsprechenden Antworten verfügbar sind. Dabei wird nur in die lokale Datenbank geschrieben; die via ssh nur temporär verwendete Datenbank wird ausschließlich gelesen.

ssh -R 389:ldap:389 root@target "DEBCONF_DB_FALLBACK='LDAP{host:localhost}' apt-get upgrade"

In diesem Beispiel wird eine über ssh getunnelte LDAP-Datenbank genutzt. Wieder wird diese Datenbank nur als Fallback, also read-only, eingesetzt.

scp config.dat root@target:
ssh root@target "DEBCONF_DB_FALLBACK='File{/root/config.dat}' apt-get upgrade

In diesem Beispiel wird zunächst die Datenbank mittels ssh kopiert. Danach wird über ssh ein Update angestoßen, bei dem die zuvor kopierte Datenbank benutzt wird.

In allen Beispielen wird die zentrale Datenbank als Fallback eingesetzt. Dies bedeutet, dass auf diesem Wege Antworten gesetzt werden können, die auf dem Zielsystem noch nie aufgetaucht sind, aber diese Werte werden ausschließlich genutzt, wenn in anderen Datenbanken keine Informationen gefunden werden: deshalb der Name Fallback. Um bereits gesetzte Werte zu überschreiben, ist die Umgebungsvariable DEBCONF_DB_OVERRIDE einzusetzen. Diese bewirkt ebenfalls, dass eine andere debconf-Datenbank abgefragt wird, dies jedoch, bevor andere Datenbanken zu Rate gezogen werden.

4.8.5 Paketentwicklung für debconf

Detaillierte Informationen zur Entwicklung von Debian Paketen, die die debconf-Datenbank nutzen, finden Sie in der Manpage zu debconf-devel. Im Wesentlichen kommuniziert debconf mit den Skripten über Standard-In und -Output. Es wird dabei ein einfaches, SMTP-ähnliches Protokoll verwendet. Die Fragen selbst werden in einem Template abgelegt, das vom Format her einer Debian control-Datei ähnelt.

4.8.6 debconf-Umgebungsvariablen

Folgende Umgebungsvariablen können von debconf genutzt werden:

debconf-Umgebungsvariablen

DEBIAN_FRONTEND

Wird benutzt, um das Frontend zu bestimmen.

DEBIAN_PRIORITY

Setzt die minimale Priorität der zu stellenden Fragen.

DEBCONF_DEBUG

Aktiviert Meldungen zur Fehlersuche auf der Standard-Ausgabe. Es kann eine Facility oder ein regulärer Ausdruck (beispielsweise .* für alle Meldungen) angegeben werden. Mögliche Facilities sind:

user

Für den Benutzer interessante Informationen

developer

Für Entwickler interessante Informationen

db

Informationen zur Datenbank

DEBCONF_NOWARNINGS

Deaktiviert Warnungen von debconf. Fehlermeldungen werden weiterhin ausgegeben.

DEBCONF_TERSE

Wird dieser Wert auf YES gesetzt, so gibt debconf so wenige Meldungen wie möglich aus.

DEBCONF_DB_FALLBACK

Setzt eine zusätzliche Datenbank mit geringerer Priorität. Alle anderen Datenbanken (aus /etc/debconf.conf) werden bevorzugt behandelt. Wird eine Fallback-Datenbank über diese Umgebungsvariable gesetzt, so ist diese immer nur les-, aber nicht beschreibbar.

DEBCONF_DB_OVERRIDE

Setzt eine zusätzliche Datenbank mit hoher Priorität. Alle anderen Datenbanken werden erst benutzt, wenn in dieser Datenbank keine brauchbaren Informationen gefunden werden.

DEBCONF_SYSTEMRC

Beim Start von debconf wird eine ggf. vorhandene Datei ~/.debconfrc des Benutzers ausgewertet. Dies kann durch Setzen dieser Variablen verhindert werden.

DEBCONF_FORCE_DIALOG

Mit dieser Variablen lässt sich die Verwendung von dialog statt whiptail zur Anzeige des Frontends erzwingen.

DEBCONF_FORCE_XDIALOG

Das Setzen dieser Variablen führt dazu, dass Xdialog statt dialog oder whiptail verwendet wird.

4.8.7 debconf (Kommando)

Neben dem zentralen System zur Verwaltung von Konfigurationsparametern debconf (siehe debconf ) gibt es auch ein Kommandozeilenprogramm gleichen Namens.

Das Programm debconf führt ein Programm oder Skript aus, das normalerweise bei der Installation eines Pakets ausgeführt wird. So lassen sich Skripte bei der Entwicklung von Paketen testen. Die Syntax lautet:

debconf [options] command [args]

Optionen

-opackage, --owner=package

Hiermit kann bestimmt werden, zu welchem Paket das Skript gehört. So werden beispielsweise Benutzer- und Gruppenrechte korrekt gesetzt.

-ftype, --frontend=type

Bestimmt das zu verwendende debconf-Frontend.

-pvalue, --priority=value

Gibt die minimale Priorität der debconf-Fragen an, die noch angezeigt werden sollen.

Um nun beispielsweise ein Shell-Skript zu testen, kann folgendes Kommando genutzt werden:

DEBCONF_DEBUG=developer debconf my-shell-prog

Alternativ funktioniert aber auch:

debconf --frontend=readline sh -x my-shell-prog

4.8.8 debconf-show

Mit debconf-show lassen sich gezielt Informationen zu einzelnen Paketen aus der Debconf-Datenbank extrahieren. Die Syntax lautet:

debconf-show packagename [...] [--db=dbname]
debconf-show --listowners [--db=dbname]
debconf-show --listdbs

Am häufigsten wird debconf-show sicher zusammen mit einem Paketnamen verwendet, um Informationen zu diesem Paket aus der Datenbank auszulesen. Hier am Beispiel Apache gezeigt:

wasabi:/home/fr# debconf-show apache
* apache/server-name: hoshi.homeunix.net
* apache/document-root: /var/www
* apache/server-port: 80
* apache/enable-suexec: false
* apache/init: true
* apache/server-admin: webmaster@wasabi

Fragen, die dem Benutzer bereits gestellt wurden, sind am Anfang der Zeile mit einem * gekennzeichnet.

Optionen

--db=dbname

Name der abzufragenden Datenbank.

--listowners

Zeigt die Besitzer der Fragen in der Datenbank an. Ein Besitzer entspricht immer einem Paketnamen.

--listdbs

Zeigt alle verfügbaren Datenbanken an.

4.8.9 debconf-get-selections

debconf-get-selections liest die gespeicherten Informationen aus der Debconf-Datenbank und schreibt diese auf die Standard-Ausgabe. Die Syntax für diesen Befehl lautet:

debconf-get-selections [--installer]

Das Ausgabeformat kann direkt wieder vom Kommando debconf-set-selections eingelesen werden. Soll dies auf einem anderen System geschehen, so ist die Ausgabe in eine Datei zu schreiben und diese auf das zweite System zu transferieren. Dieses Prinzip wird auch vom Debian Installer genutzt, um eine automatische Installation zu erlauben.

Informationen, die während der Installation des Systems gesetzt werden, sind in einer getrennten Datenbank (/var/log/installer/cdebconf) abgelegt. Diese können über die einzige Option von debconf-get-selections - --installer - ausgelesen werden. Um alle Debconf-Einstellungen eines Systems in eine Datei zu schreiben, sind zwei Kommandos notwendig:

debconf-get-selections --installer > config.cfg
debconf-get-selections >> config.cfg

4.8.10 debconf-set-selections

debconf-set-selections setzt oder verändert Werte in der Debconf-Datenbank. Zusätzlich werden die so mit Werten vorbelegten Fragen auch als "gesehen" markiert, so dass diese Werte nicht während der Installation des Systems oder eines Paketes abgefragt werden. Die Syntax für dieses Kommando lautet:

debconf-set-selections dateiname

Wie jedes gute Kommandozeilenprogramm liest debconf-set-selections zunächst aus einer Datei. Wird kein Dateiname auf der Kommandozeile übergeben, so wird versucht, aus der Standard-Eingabe zu lesen.

Sollen die Informationen von einem System auf ein anderes übertragen werden, so kann folgendes Kommando verwendet werden, ein funktionierendes Netzwerk zwischen beiden Systemen wird vorausgesetzt:

debconf-get-selections | ssh systemname debconf-set-selections

Das Format der Datei ist recht einfach aufgebaut. Zeilen ohne Inhalt werden ignoriert, Zeilen, die mit dem Zeichen # beginnen, sind Kommentare und werden ebenfalls nicht ausgewertet. Alle anderen Zeilen werden interpretiert und müssen vier Werte enthalten, die jeweils durch Leerzeichen getrennt sind. Der erste Wert ist der Paketname, zu dem die Frage gehört. Der zweite Wert ist der Name der Frage. Der dritte Wert ist der Typ der Frage, und der vierte Wert ist die Antwort. Hier ein einfaches Beispiel:

# Comment out extension_dir config from /etc/php4/apache/php.ini?
php4    php4/update_apache_php_ini      boolean true

Optionen

--verbose, -v

Ausführliche Ausgabe von Informationen

--checkonly, -c

Prüft die Eingabedatei auf Formatfehler, speichert keine Informationen in der Datenbank.

 Impressum