Debconf: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
K Textersetzung - „== Syntax ==“ durch „== Aufruf ==“ |
||
(14 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{DISPLAYTITLE:debconf}} | |||
'''debconf''' - Debians Konfiguration-Verwaltungssystem | '''debconf''' - Debians Konfiguration-Verwaltungssystem | ||
= Beschreibung = | == Beschreibung == | ||
Debconf ist ein Verwaltungssystem für die Konfiguration der Debian-Pakete. Pakete benutzen Debconf, um Fragen bei ihrer | Debconf ist ein Verwaltungssystem für die Konfiguration der Debian-Pakete. Pakete benutzen Debconf, um Fragen bei ihrer | ||
Installation zu stellen. | Installation zu stellen. | ||
= Installation = | == Installation == | ||
== Dateien == | === Dateien === | ||
/etc/apt/apt.conf.d/70debconf | /etc/apt/apt.conf.d/70debconf | ||
/etc/debconf.conf | /etc/debconf.conf | ||
Zeile 32: | Zeile 34: | ||
/var/cache/debconf | /var/cache/debconf | ||
= | == Aufruf == | ||
== Parameter == | === Parameter === | ||
== Optionen == | === Optionen === | ||
== Umgebungsvariablen == | === Umgebung === | ||
== | === Rückgabewert === | ||
== Konfiguration == | |||
=== Dateien === | |||
== Anwendung == | |||
== Sicherheit == | |||
== Dokumentation == | |||
=== RFC === | |||
=== Man-Page === | |||
=== Info-Pages === | |||
=== Siehe auch === | |||
== Links == | |||
=== Projekt === | |||
=== Weblinks === | |||
[[Kategorie:Debian/Paketverwaltung]] | |||
[[Kategorie:Linux/Befehl]] | |||
{{DEFAULTSORT:debconf}} | |||
= TMP = | |||
== debconf == | |||
<tt>debconf</tt> ist ein zentrales System zur Verwaltung von Debian Paketen. | |||
* Es gibt auch ein selten verwendetes Programm namens <tt>debconf</tt>, dies soll jedoch an dieser Stelle nicht weiter betrachtet werden. <tt>debconf</tt> bietet eine einheitliche Schnittstelle zur Konfiguration von Debian Paketen, der Benutzer kann dabei zwischen verschiedenen Frontends wählen. <tt>debconf</tt> 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 <tt>apt-utils</tt> benötigt. | |||
Sollen Pakete nicht vor der Installation konfiguriert werden, so kann dies in der Datei <tt>/etc/apt/apt.conf.d/70debconf</tt> 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 <tt>dpkg-preconfigure</tt>. | |||
* Dieses findet sich im Paket <tt>apt-utils</tt>. | |||
Ist nun ein Paket installiert und wurden alle <tt>debconf</tt>-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 <tt>debconf</tt>-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 <tt>debconf</tt> selbst, neu zu konfigurieren, kann das Kommando <tt>dpkg-reconfigure</tt> eingesetzt werden. | |||
# dpkg-reconfigure debconf | |||
Bei diesem Vorgang werden alle Fragen erneut angezeigt, die auch ursprünglich bei der ersten Installation von <tt>debconf</tt> gestellt wurden. | |||
* Dies muss natürlich mit Administratorrechten ausgeführt werden. | |||
=== Frontends === | |||
<tt>debconf</tt> kann unterschiedliche Frontends zur Konfiguration von Paketen verwenden, diese können vom Benutzer ausgewählt werden. | |||
* Folgende Frontends stehen zur Auswahl: | |||
{|| class="wikitable sortable" | |||
|- | |||
|| '''dialog''' | |||
|| Das standardmäßig verwendete Frontend auf Basis von <tt>whiptail</tt> oder <tt>dialog</tt>. | |||
* 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 <tt>DISPLAY</tt> 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 <tt>DISPLAY</tt>-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 <tt>debconf</tt>-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 <tt>debconf</tt> verwendete Frontend kann bei einer Rekonfiguration von <tt>debconf</tt> gesetzt werden. | |||
* Soll dagegen das Frontend nur für eine einzelne Aktion geändert werden, so kann auch die Umgebungsvariable <tt>DEBIAN_FRONTEND</tt> auf den gewünschten Wert gesetzt werden. | |||
# DEBIAN_FRONTEND=readline apt-get install slrn | |||
Es ist auch möglich, den Kommandos <tt>dpkg-reconfigure</tt> und <tt>dpkg-preconfigure</tt> die Option <tt>--frontend=readline</tt> zu übergeben und auf diesem Wege das Frontend zu bestimmen. | |||
=== Prioritäten === | |||
Über die <tt>debconf</tt>-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 <tt>debconf</tt> dazu veranlasst werden, lediglich die essenziell wichtigen Fragen zu stellen. | |||
Die Prioritäten sind dabei (in aufsteigender Priorität) | |||
{|| class="wikitable sortable" | |||
|- | |||
|| '''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 <tt>debconf</tt> neu konfiguriert wird oder indem die Option <tt>--priority=medium</tt> den Kommandos <tt>dpkg-reconfigure</tt> und <tt>dpkg-preconfigure</tt> übergeben wird. | |||
* Alternativ kann auch die Umgebungsvariable <tt>DEBIAN_PRIORITY</tt> auf die gewünschte Tiefe gesetzt werden. | |||
=== debconf - Backend-Datenbank === | |||
<tt>debconf</tt> benutzt eine sehr flexible Struktur, um die Ergebnisse der Fragen in einer Datenbankstruktur abzulegen. | |||
* In der Datei <tt>/etc/debconf.conf</tt> wird diese Anbindung an die Datenbank konfiguriert. | |||
* Im Normalfall liegt diese Datenbank in Form von ASCII-Dateien auf dem lokalen Dateisystem im Verzeichnis <tt>/var/cache/debconf/</tt>. | |||
* 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 <tt>/var/cache/debconf/</tt> gesichert werden. | |||
* Obwohl im Verzeichnis <tt>/var/cache/</tt> lediglich Daten liegen, die laufend verändert werden, so erspart das Sichern dieses Verzeichnisses die erneuten Fragen bei der Neuinstallation des Systems. | |||
=== 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 <tt>debconf</tt>-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 <tt>dpkg-preconfigure</tt> eingesetzt werden, um eine Auswahl von Paketen zu konfigurieren, ohne diese zu installieren. | |||
* Natürlich kann die komplette <tt>debconf</tt>-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. <tt>debconf</tt> benutzt die beiden Umgebungsvariablen <tt>DEBCONF_DB_FALLBACK</tt> und <tt>DEBCONF_DB_OVERRIDE</tt>, um den Zugriff auf eine andere Datenbank zu steuern. | |||
=== 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 <tt>ssh</tt> 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 <tt>ssh</tt> 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 <tt>ssh</tt> getunnelte LDAP-Datenbank genutzt. | |||
* Wieder wird diese Datenbank nur als Fallback, also read-only, eingesetzt. | |||
# scp config.dat [mailto:root@target root@target]: | |||
ssh root@target "DEBCONF_DB_FALLBACK='File{/root/config.dat}' apt-get upgrade | |||
In diesem Beispiel wird zunächst die Datenbank mittels <tt>ssh</tt> kopiert. | |||
* Danach wird über <tt>ssh</tt> 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 <tt>DEBCONF_DB_OVERRIDE</tt> einzusetzen. | |||
* Diese bewirkt ebenfalls, dass eine andere <tt>debconf</tt>-Datenbank abgefragt wird, dies jedoch, bevor andere Datenbanken zu Rate gezogen werden. | |||
=== Paketentwicklung für debconf === | |||
Detaillierte Informationen zur Entwicklung von Debian Paketen, die die <tt>debconf</tt>-Datenbank nutzen, finden Sie in der Manpage zu <tt>debconf-devel</tt>. | |||
* Im Wesentlichen kommuniziert <tt>debconf</tt> 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 <tt>control</tt>-Datei ähnelt. | |||
=== debconf-Umgebungsvariablen === | |||
Folgende Umgebungsvariablen können von <tt>debconf</tt> genutzt werden: | |||
{|| class="wikitable sortable" | |||
|- | |||
|| <tt>'''DEBIAN_FRONTEND</tt> ''' | |||
|| Wird benutzt, um das Frontend zu bestimmen. | |||
|- | |||
|| <tt>'''DEBIAN_PRIORITY</tt> ''' | |||
|| Setzt die minimale Priorität der zu stellenden Fragen. | |||
|- | |||
|| <tt>'''DEBCONF_DEBUG</tt> ''' | |||
|| Aktiviert Meldungen zur Fehlersuche auf der Standard-Ausgabe. | |||
* Es kann eine Facility oder ein regulärer Ausdruck (beispielsweise <tt>.*</tt> für alle Meldungen) angegeben werden. | |||
* Mögliche Facilities sind: <tt>user</tt> Für den Benutzer interessante Informationen <tt>developer</tt> Für Entwickler interessante Informationen <tt>db</tt> Informationen zur Datenbank | |||
|- | |||
|| <tt>'''DEBCONF_NOWARNINGS</tt> ''' | |||
|| Deaktiviert Warnungen von <tt>debconf</tt>. | |||
* Fehlermeldungen werden weiterhin ausgegeben. | |||
|- | |||
|| <tt>'''DEBCONF_TERSE'''</tt> | |||
|| Wird dieser Wert auf <tt>YES</tt> gesetzt, so gibt <tt>debconf</tt> so wenige Meldungen wie möglich aus. | |||
|- | |||
|| <tt>'''DEBCONF_DB_FALLBACK</tt> ''' | |||
|| Setzt eine zusätzliche Datenbank mit geringerer Priorität. | |||
* Alle anderen Datenbanken (aus <tt>/etc/debconf.conf</tt>) werden bevorzugt behandelt. | |||
* Wird eine Fallback-Datenbank über diese Umgebungsvariable gesetzt, so ist diese immer nur les-, aber nicht beschreibbar. | |||
|- | |||
|| <tt>'''DEBCONF_DB_OVERRIDE</tt> ''' | |||
|| Setzt eine zusätzliche Datenbank mit hoher Priorität. | |||
* Alle anderen Datenbanken werden erst benutzt, wenn in dieser Datenbank keine brauchbaren Informationen gefunden werden. | |||
|- | |||
|| <tt>'''DEBCONF_SYSTEMRC</tt> ''' | |||
|| Beim Start von <tt>debconf</tt> wird eine ggf. | |||
* vorhandene Datei <tt>~/.debconfrc</tt> des Benutzers ausgewertet. | |||
* Dies kann durch Setzen dieser Variablen verhindert werden. | |||
|- | |||
|| <tt>'''DEBCONF_FORCE_DIALOG</tt> ''' | |||
|| Mit dieser Variablen lässt sich die Verwendung von <tt>dialog</tt> statt <tt>whiptail</tt> zur Anzeige des Frontends erzwingen. | |||
|- | |||
|| <tt>'''DEBCONF_FORCE_XDIALOG</tt> ''' | |||
|| Das Setzen dieser Variablen führt dazu, dass <tt>Xdialog</tt> statt <tt>dialog</tt> oder <tt>whiptail</tt> verwendet wird. | |||
|- | |||
|} | |||
=== debconf (Kommando) === | |||
Neben dem zentralen System zur Verwaltung von Konfigurationsparametern <tt>debconf</tt> (siehe [../../debiananwenderhandbuch/debconf.html debconf ]) gibt es auch ein Kommandozeilenprogramm gleichen Namens. | |||
Das Programm <tt>debconf</tt> 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 === | |||
{|| class="wikitable sortable" | |||
|- | |||
|| <tt>'''-opackage</tt>, <tt>--owner=package'''</tt> | |||
|| Hiermit kann bestimmt werden, zu welchem Paket das Skript gehört. | |||
* So werden beispielsweise Benutzer- und Gruppenrechte korrekt gesetzt. | |||
|- | |||
|| <tt>'''-ftype</tt>, <tt>--frontend=type'''</tt> | |||
|| Bestimmt das zu verwendende <tt>debconf</tt>-Frontend. | |||
|- | |||
|| <tt>'''-pvalue</tt>, <tt>--priority=value'''</tt> | |||
|| Gibt die minimale Priorität der <tt>debconf</tt>-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 | |||
=== debconf-show === | |||
Mit <tt>debconf-show</tt> 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 <tt>debconf-show</tt> 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 | |||
<nowiki>* apache/server-name: hoshi.homeunix.net</nowiki> | |||
<nowiki>* apache/document-root: /var/www</nowiki> | |||
<nowiki>* apache/server-port: 80</nowiki> | |||
<nowiki>* apache/enable-suexec: false</nowiki> | |||
<nowiki>* apache/init: true</nowiki> | |||
<nowiki>* apache/server-admin: webmaster@wasabi</nowiki> | |||
Fragen, die dem Benutzer bereits gestellt wurden, sind am Anfang der Zeile mit einem <tt><nowiki>*</nowiki></tt> gekennzeichnet. | |||
=== Optionen === | |||
{|| class="wikitable sortable" | |||
|- | |||
|| <tt>'''--db=dbname</tt> ''' | |||
|| Name der abzufragenden Datenbank. | |||
|- | |||
|| <tt>'''--listowners</tt> ''' | |||
|| Zeigt die „Besitzer“ der Fragen in der Datenbank an. | |||
* Ein Besitzer entspricht immer einem Paketnamen. | |||
|- | |||
|| <tt>'''--listdbs</tt> ''' | |||
|| Zeigt alle verfügbaren Datenbanken an. | |||
|- | |||
|} | |||
=== debconf-get-selections === | |||
<tt>debconf-get-selections</tt> 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 <tt>debconf-set-selections</tt> 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 [../../debiananwenderhandbuch/installation-etch.html#diautomatischeinstallation Automatische Installation mit dem Debian Installer]). | |||
Informationen, die während der Installation des Systems gesetzt werden, sind in einer getrennten Datenbank (<tt>/var/log/debian-installer/cdebconf</tt>) abgelegt. | |||
* Diese können über die einzige Option von <tt>debconf-get-selections</tt> - <tt>--installer</tt> - 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 | |||
=== debconf-set-selections === | |||
<tt>debconf-set-selections</tt> 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 <tt>debconf-set-selections</tt> 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 <tt><nowiki>#</nowiki></tt> 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: | |||
# <nowiki># Comment out extension_dir config from /etc/php4/apache/php.ini?</nowiki> | |||
php4 php4/update_apache_php_ini boolean true | |||
= | === Optionen === | ||
== | |||
{|| class="wikitable sortable" | |||
|- | |||
|| <tt>'''--verbose</tt>, <tt>-v'''</tt> | |||
|| Ausführliche Ausgabe von Informationen | |||
|- | |||
< | || <tt>'''--checkonly</tt>, <tt>-c'''</tt> | ||
'' | || Prüft die Eingabedatei auf Formatfehler, speichert keine Informationen in der Datenbank. | ||
< | |||
< | |||
< | |||
|- | |||
|} |
Aktuelle Version vom 12. November 2024, 18:48 Uhr
debconf - Debians Konfiguration-Verwaltungssystem
Beschreibung
Debconf ist ein Verwaltungssystem für die Konfiguration der Debian-Pakete. Pakete benutzen Debconf, um Fragen bei ihrer Installation zu stellen.
Installation
Dateien
/etc/apt/apt.conf.d/70debconf /etc/debconf.conf
/usr/bin/debconf /usr/bin/debconf-apt-progress /usr/bin/debconf-communicate /usr/bin/debconf-copydb /usr/bin/debconf-escape /usr/bin/debconf-set-selections /usr/bin/debconf-show /usr/sbin/dpkg-preconfigure /usr/sbin/dpkg-reconfigure
/usr/share/bash-completion/completions /usr/share/bash-completion/completions/debconf /usr/share/bash-completion/completions/debconf-show
/usr/share/debconf/confmodule /usr/share/debconf/confmodule.sh /usr/share/debconf/debconf.conf /usr/share/debconf/fix_db.pl /usr/share/debconf/frontend
/var/cache/debconf
Aufruf
Parameter
Optionen
Umgebung
Rückgabewert
Konfiguration
Dateien
Anwendung
Sicherheit
Dokumentation
RFC
Man-Page
Info-Pages
Siehe auch
Links
Projekt
Weblinks
TMP
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. 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.
Frontends
debconf kann unterschiedliche Frontends zur Konfiguration von Paketen verwenden, diese können vom Benutzer ausgewählt werden.
- Folgende Frontends stehen zur Auswahl:
dialog | Das standardmäßig verwendete Frontend auf Basis von whiptail oder dialog.
|
readline | Einfache, rein textbasierte Oberfläche.
|
noninteractive | Dies ist eigentlich gar kein Frontend, denn es werden keinerlei Fragen angezeigt.
|
gnome | Ein modernes Frontend auf Basis der GNOME- und GTK-Bibliotheken.
|
kde | Ein modernes Frontend auf Basis der QT-Bibliotheken.
|
editor | Das Frontend für Unix-Freaks, die alles in einem Texteditor bearbeiten möchten.
|
web | Dieses Frontend verhält sich wie ein Webserver; alle Einstellungen können über einen beliebigen Browser vorgenommen werden.
|
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.
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)
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.
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.
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.
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.
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.
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.
debconf-Umgebungsvariablen
Folgende Umgebungsvariablen können von debconf genutzt werden:
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.
|
DEBCONF_NOWARNINGS | Deaktiviert Warnungen von debconf.
|
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.
|
DEBCONF_DB_OVERRIDE | Setzt eine zusätzliche Datenbank mit hoher Priorität.
|
DEBCONF_SYSTEMRC | Beim Start von debconf wird eine ggf.
|
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. |
debconf (Kommando)
Neben dem zentralen System zur Verwaltung von Konfigurationsparametern debconf (siehe [../../debiananwenderhandbuch/debconf.html 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.
|
-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
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.
|
--listdbs | Zeigt alle verfügbaren Datenbanken an. |
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 [../../debiananwenderhandbuch/installation-etch.html#diautomatischeinstallation 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
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. |