Kapitel 5. Paketmanagement
Zurück | 5.8 `debconf` | Weiter

## 5.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 Neuinstallation 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.

### 5.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.

### 5.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 in das 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.

### 5.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 Verzeichniss `/var/cache/debconf/`. In der Konfigurationsdatei finden Sie Beispiele, wie eine Datenbank via NFS oder LDAP genutzt werden kann.

### `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 erneuten Fragen bei der Neuinstallation des Systems.

### 5.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.

### 5.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.

### 5.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.

### 5.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

### 5.8.8 `debconf-show`

Mit `debconf-show` lassen sich geziehlt 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.

### 5.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 (siehe Automatische Installation mit dem Debian-Installer).

Informationen die während der Installation des Systems gesetzt werden, sind in einer getrennten Datenbank (`/var/log/debian-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

### 5.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 gutes 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. Zeile ohne Inhalt werden ignoriert, Zeilen die mit dem Zeichen `#` beginnen sind Kommentare und werden ebefalls 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.

Zurück | Nach oben | Weiter
5.7 Das Debian-Paketformat - `.deb` | Zum Anfang | 5.9 `dselect`

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).