Debconf: Unterschied zwischen den Versionen
K Textersetzung - „„“ durch „"“ |
Keine Bearbeitungszusammenfassung |
||
Zeile 367: | Zeile 367: | ||
{{DEFAULTSORT:debconf}} | {{DEFAULTSORT:debconf}} | ||
= TMP = | |||
== debconf == | |||
Manche Pakete sind mit dem debconf-Konfigurationssystem ausgestattet. Dadurch wird eine Intervention des Benutzers möglich, sodass diesem bestimmte Elemente wie beispielsweise Fragen oder Hinweise aus s.g. "Vorlagen" (eng. "templates") präsentiert werden, worauf der Benutzer bestimmte Entscheidungsmöglichkeiten hat. | |||
Dadurch kann beispielsweise direkt die standardmäßige Sprache festgelegt werden, ohne dass der Benutzer diese Änderung selbst in den Konfigurationsdateien vornehmen muss. | |||
Dieses Konfigurationssystem ist nicht auf einzelne Pakete beschränkt, sondern es können auch paketüberfreifende Konfigurationseinstellungen (anhand s.g. "shared templates") vorgenommen werden. Somit kann beispielsweise der aktuelle Displaymanager von einem anderen Loginmanager als Standard abgelöst werden. | |||
Debconf wird dabei über die Maintainerskripte '''preinst''' (vor der eigentlichen Installation) und '''postinst''' (nach der Installation) bzw. '''postrm''' (zum abschließenden Entfernen der Datenbankeinträge nach Deinstallation des Paketes) aufgerufen. | |||
Anhand der durch den Benutzer oder durch die Standardwerte gegebenen Rückgabewerte werden mit diesen Skripten bestimmte Einstellungen am System vorgenommen. | |||
Nachdem ein Benutzer die erste Programminstallation eines mit debconf ausgestatteten Paketes durchgeführt und somit eine gewisse Konfiguration vorgenommen hat, kann das Paket mit dem Befehl <tt>dpkg-reconfigure</tt> "neu konfiguriert" bzw. "rekonfiguriert" werden. | |||
Das heißt, dass nun eine Benutzerinteraktion wie bei der Erstinstallation stattfindet. | |||
Vorlagen und die Ergebnisse der Elemente werden in die debconf-Datenbanken unter '''/var/cache/debconf''' gespeichert. | |||
Ergebnisse und der Status (gesehen oder nicht) von Vorlagen, werden in die Datenbank '''config.dat''' geschrieben, die Vorlagen selbst sind unter '''templates.dat''' zu finden. | |||
In Ausnahmefällen wird ein Passwort abgefragt, welches dann nur unter Schutz der Rootrechte in '''passwords.dat''' gesichert wird. | |||
=== Konfigurierbaren Pakete anzeigen === | |||
Eine Liste der unter debconf registrierten "Besitzer von Konfigurationsdateien" (welche idR. den Paketnamen entsprechen) erhält man im Terminal mit: | |||
debconf-show --listowners | |||
Soll zusätzlich noch die Passwortdatenbank nach entsprechenden Besitzern durchsucht werden, sind Rootrechte vonnöten . | |||
=== Konfiguration abfragen === | |||
Die Einträge in der debconf-Datenbank lassen sich mit folgendem Befehl abfragen: | |||
debconf-show PAKET | |||
Soll zusätzlich noch die Passwortdatenbank nach entsprechenden Einstellungen durchsucht werden, sind Rootrechte vonnöten . | |||
=== Paket neu konfigurieren === | |||
Die Elemente wie Fragen oder Hinweise werden nach ihrer Priorität gefiltert. Die automatische Filterung hängt in erster Linie von der in der Vorlage festgelegten Priorität ab. | |||
Aber auch die von der Paketverwaltung abhängige Schnittstellenoberfläche oder der Status "bereits gesehen" (s.g. "seen") spielen eine Rolle. | |||
Mit der Option ''--priority'' können mit <tt>dpkg-reconfigure</tt> die Vorlagen bereits installierte Pakete mit festgelegter Filterung dargestellt werden: | |||
{| | |||
|- | |||
| colspan="2" | '''Anzeigefilter manuell vorgeben ''' | |||
|- | |||
| | '''Option + Parameter ''' | |||
| | '''Beschreibung ''' | |||
|- | |||
| | '''''--priority=low'' ''' | |||
| | Alle Elemente wie Fragen oder Hinweise werden dem Benutzer vorgelegt. | |||
|- | |||
| | '''''--priority=medium'' ''' | |||
| | Normale Elemente, die allgemein vernünftige Vorgaben haben, werden gezeigt. | |||
|- | |||
| | '''''--priority=high'' ''' | |||
| | Elemente, die keine allgemein vernünftigen Vorgaben haben, werden gezeigt. | |||
|- | |||
| | '''''--priority=critical'' ''' | |||
| | Fast alles wird auf die Vorgabewerte gesetzt, nur Elemente (idR. Fragen), die ohne Intervention des Benutzers die Systemintegrität stören könnten, werden gezeigt. | |||
|- | |||
|} | |||
Der folgende Befehl konfiguriert zum Beispiel das Paket '''ssh''' neu, wobei alle durch das Paket bereitgestellte Vorlagen durchgearbeitet werden: | |||
sudo dpkg-reconfigure --priority=low ssh | |||
Analog gibt es den Befehl <tt>dpkg-preconfigure</tt>, mit welchem die debconf-Vorlagen, welche ''vor'' einer Paketinstallation durchzuführen waren, abgearbeitet werden. | |||
===== Hinweis ===== | |||
Standardmäßig wird bei dpkg-reconfigure und dpkg-preconfigure (unabhängig von der systemweiten debconf-Priorität) die Priorität "low" verwendet. | |||
=== Schnittstellenoberflächen === | |||
debconf kann auf mehrere Wege mit dem Benutzer kommunizieren. Es werden folgende Schnittstellenoberflächen (s.g. "frontends") unterstützt, wobei diese unterschiedlich funktional sind. | |||
{| | |||
|- | |||
| colspan="3" | '''Schnittstellenoberflächen ''' | |||
|- | |||
| | '''Typ ''' | |||
| | '''Beschreibung ''' | |||
| | '''Funktionalität ''' | |||
|- | |||
| | Dialog | |||
| | konsolenbasierte Vollbilddarstellung mit dialog | |||
| | vollständige Interaktion möglich | |||
|- | |||
| | Readline | |||
| | traditionelle, einfache Textschnittstelle | |||
| | um Momentanwert zu sehen, muss '''libterm-readline-gnu-perl''' installiert sein | |||
|- | |||
| | Gnome | |||
| | in Gnomeumgebung eingepasste X-Schnittstelle, ist nicht an GNOME gebunden | |||
| | vollständige Interaktion möglich | |||
|- | |||
| | Kde | |||
| | in KDE-Umgebung eingepasste X-Schnittstelle, ist nicht an KDE gebunden | |||
| | vollständige Interaktion möglich | |||
|- | |||
| | Editor | |||
| | Bearbeitung der Konfiguration über standardmäßigen (mit $EDITOR festgelegten) Texteditor | |||
| | vollständige Interaktion möglich | |||
|- | |||
| | Web | |||
| | Konfiguration über Browser, standardmäßig: https://localhost:8001/ | |||
| | vollständige Interaktion möglich | |||
|- | |||
| | Nicht-interaktiv | |||
| | Es findet keine Interaktion statt (nicht empfohlen!). | |||
| | keine Interaktion möglich | |||
|- | |||
|} | |||
Je nach benutztem Paketverwaltungsprogramm wird automatisch eine Schnittstellenoberfläche davon ausgewählt. Man kann den Standard aber durch Rekonfigurieren des Paketes '''debconf''' festsetzen. | |||
=== Gezielte Konfiguration === | |||
Die Datenbank kann nach folgendem Muster (am Beispiel einer einfachen Auswahl) direkt geändert werden. ''"BESITZER"'' ist dabei meist der entsprechende Paketname. | |||
echo "set BESITZER/VORLAGE WERT" | sudo debconf-communicate | |||
===== Hinweis ===== | |||
Es wird ausschließlich der Datenbankeintrag geändert. Eine Änderung an Konfigurationsdateien wird nicht vorgenommen (dies ist den Maintainerskripten '''preinst''', '''postinst''', ... vorbehalten). | |||
Deswegen ist ein solches Eingreifen nur in Ausnahmefällen sinnvoll. | |||
Durch manuelles Ausführen der entsprechenden Maintainerskripte unter '''/var/cache/dpkg/info''' kann aber <tt>dpkg-preconfigure</tt> und analog <tt>dpkg-reconfigure</tt> "nachgestellt" werden. | |||
Wie dieser Befehl sinnvoll einsetzbar ist, zeigt folgendes sehr spezielles Beispiel an dem Paket '''ttf-mscorefonts-installer''': | |||
Nach einem "Abwürgen" der Schnittstellenoberfläche mit der Frage ob die EULA akzeptiert werden soll, ist die debconf-Datenbank nicht konsistent. | |||
Nun kann die EULA nachträglich akzeptiert werden, sodass das Paket ohne Fehler reinstalliert werden kann: | |||
echo "set msttcorefonts/accepted-mscorefonts-eula true" | sudo debconf-communicate | |||
=== Grafische Konfiguration === | |||
==== configure-debian ==== | |||
configure-debian ist ein konsolenbasiertes Rekonfigurationsprogramm, welches die Besitzer von Paketen, in ihren Bereich (s.g. "Section") eingeordnet, darstellt. | |||
sudo apt-get install configure-debian | |||
==== gkdebconf ==== | |||
gkdebconf ist ein grafisches Rekonfigurationsprogramm, welches ebenfalls die Pakete in die Unterbereiche einteilt, aber auch alle auf einmal darstellen kann. Das Programm besitzt darüber hinaus die Fähigkeit, die Schnittstellenoberfläche frei zu wählen. | |||
sudo apt-get install gkdebconf | |||
=== Dateien und Paketen === | |||
Der folgende Befehl in einem Terminal zeigt an, zu welchem Paket eine Datei gehört: | |||
dpkg -S DATEINAME | |||
Das gefundene Paket kann dann, sofern ein Eintrag in der debconf-Datenbank besteht, mit <tt>dpkg-reconfigure</tt> neu konfiguriert werden. Existiert kein solcher Eintrag, wird bei Ausführung des Befehls nichts gemacht. |
Version vom 13. September 2025, 13:54 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.
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. |
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
TMP
debconf
Manche Pakete sind mit dem debconf-Konfigurationssystem ausgestattet. Dadurch wird eine Intervention des Benutzers möglich, sodass diesem bestimmte Elemente wie beispielsweise Fragen oder Hinweise aus s.g. "Vorlagen" (eng. "templates") präsentiert werden, worauf der Benutzer bestimmte Entscheidungsmöglichkeiten hat.
Dadurch kann beispielsweise direkt die standardmäßige Sprache festgelegt werden, ohne dass der Benutzer diese Änderung selbst in den Konfigurationsdateien vornehmen muss.
Dieses Konfigurationssystem ist nicht auf einzelne Pakete beschränkt, sondern es können auch paketüberfreifende Konfigurationseinstellungen (anhand s.g. "shared templates") vorgenommen werden. Somit kann beispielsweise der aktuelle Displaymanager von einem anderen Loginmanager als Standard abgelöst werden.
Debconf wird dabei über die Maintainerskripte preinst (vor der eigentlichen Installation) und postinst (nach der Installation) bzw. postrm (zum abschließenden Entfernen der Datenbankeinträge nach Deinstallation des Paketes) aufgerufen.
Anhand der durch den Benutzer oder durch die Standardwerte gegebenen Rückgabewerte werden mit diesen Skripten bestimmte Einstellungen am System vorgenommen.
Nachdem ein Benutzer die erste Programminstallation eines mit debconf ausgestatteten Paketes durchgeführt und somit eine gewisse Konfiguration vorgenommen hat, kann das Paket mit dem Befehl dpkg-reconfigure "neu konfiguriert" bzw. "rekonfiguriert" werden.
Das heißt, dass nun eine Benutzerinteraktion wie bei der Erstinstallation stattfindet.
Vorlagen und die Ergebnisse der Elemente werden in die debconf-Datenbanken unter /var/cache/debconf gespeichert.
Ergebnisse und der Status (gesehen oder nicht) von Vorlagen, werden in die Datenbank config.dat geschrieben, die Vorlagen selbst sind unter templates.dat zu finden.
In Ausnahmefällen wird ein Passwort abgefragt, welches dann nur unter Schutz der Rootrechte in passwords.dat gesichert wird.
Konfigurierbaren Pakete anzeigen
Eine Liste der unter debconf registrierten "Besitzer von Konfigurationsdateien" (welche idR. den Paketnamen entsprechen) erhält man im Terminal mit:
debconf-show --listowners
Soll zusätzlich noch die Passwortdatenbank nach entsprechenden Besitzern durchsucht werden, sind Rootrechte vonnöten .
Konfiguration abfragen
Die Einträge in der debconf-Datenbank lassen sich mit folgendem Befehl abfragen:
debconf-show PAKET
Soll zusätzlich noch die Passwortdatenbank nach entsprechenden Einstellungen durchsucht werden, sind Rootrechte vonnöten .
Paket neu konfigurieren
Die Elemente wie Fragen oder Hinweise werden nach ihrer Priorität gefiltert. Die automatische Filterung hängt in erster Linie von der in der Vorlage festgelegten Priorität ab.
Aber auch die von der Paketverwaltung abhängige Schnittstellenoberfläche oder der Status "bereits gesehen" (s.g. "seen") spielen eine Rolle.
Mit der Option --priority können mit dpkg-reconfigure die Vorlagen bereits installierte Pakete mit festgelegter Filterung dargestellt werden:
Anzeigefilter manuell vorgeben | |
Option + Parameter | Beschreibung |
--priority=low | Alle Elemente wie Fragen oder Hinweise werden dem Benutzer vorgelegt. |
--priority=medium | Normale Elemente, die allgemein vernünftige Vorgaben haben, werden gezeigt. |
--priority=high | Elemente, die keine allgemein vernünftigen Vorgaben haben, werden gezeigt. |
--priority=critical | Fast alles wird auf die Vorgabewerte gesetzt, nur Elemente (idR. Fragen), die ohne Intervention des Benutzers die Systemintegrität stören könnten, werden gezeigt. |
Der folgende Befehl konfiguriert zum Beispiel das Paket ssh neu, wobei alle durch das Paket bereitgestellte Vorlagen durchgearbeitet werden:
sudo dpkg-reconfigure --priority=low ssh
Analog gibt es den Befehl dpkg-preconfigure, mit welchem die debconf-Vorlagen, welche vor einer Paketinstallation durchzuführen waren, abgearbeitet werden.
Hinweis
Standardmäßig wird bei dpkg-reconfigure und dpkg-preconfigure (unabhängig von der systemweiten debconf-Priorität) die Priorität "low" verwendet.
Schnittstellenoberflächen
debconf kann auf mehrere Wege mit dem Benutzer kommunizieren. Es werden folgende Schnittstellenoberflächen (s.g. "frontends") unterstützt, wobei diese unterschiedlich funktional sind.
Schnittstellenoberflächen | ||
Typ | Beschreibung | Funktionalität |
Dialog | konsolenbasierte Vollbilddarstellung mit dialog | vollständige Interaktion möglich |
Readline | traditionelle, einfache Textschnittstelle | um Momentanwert zu sehen, muss libterm-readline-gnu-perl installiert sein |
Gnome | in Gnomeumgebung eingepasste X-Schnittstelle, ist nicht an GNOME gebunden | vollständige Interaktion möglich |
Kde | in KDE-Umgebung eingepasste X-Schnittstelle, ist nicht an KDE gebunden | vollständige Interaktion möglich |
Editor | Bearbeitung der Konfiguration über standardmäßigen (mit $EDITOR festgelegten) Texteditor | vollständige Interaktion möglich |
Web | Konfiguration über Browser, standardmäßig: https://localhost:8001/ | vollständige Interaktion möglich |
Nicht-interaktiv | Es findet keine Interaktion statt (nicht empfohlen!). | keine Interaktion möglich |
Je nach benutztem Paketverwaltungsprogramm wird automatisch eine Schnittstellenoberfläche davon ausgewählt. Man kann den Standard aber durch Rekonfigurieren des Paketes debconf festsetzen.
Gezielte Konfiguration
Die Datenbank kann nach folgendem Muster (am Beispiel einer einfachen Auswahl) direkt geändert werden. "BESITZER" ist dabei meist der entsprechende Paketname.
echo "set BESITZER/VORLAGE WERT" | sudo debconf-communicate
Hinweis
Es wird ausschließlich der Datenbankeintrag geändert. Eine Änderung an Konfigurationsdateien wird nicht vorgenommen (dies ist den Maintainerskripten preinst, postinst, ... vorbehalten).
Deswegen ist ein solches Eingreifen nur in Ausnahmefällen sinnvoll.
Durch manuelles Ausführen der entsprechenden Maintainerskripte unter /var/cache/dpkg/info kann aber dpkg-preconfigure und analog dpkg-reconfigure "nachgestellt" werden.
Wie dieser Befehl sinnvoll einsetzbar ist, zeigt folgendes sehr spezielles Beispiel an dem Paket ttf-mscorefonts-installer:
Nach einem "Abwürgen" der Schnittstellenoberfläche mit der Frage ob die EULA akzeptiert werden soll, ist die debconf-Datenbank nicht konsistent.
Nun kann die EULA nachträglich akzeptiert werden, sodass das Paket ohne Fehler reinstalliert werden kann:
echo "set msttcorefonts/accepted-mscorefonts-eula true" | sudo debconf-communicate
Grafische Konfiguration
configure-debian
configure-debian ist ein konsolenbasiertes Rekonfigurationsprogramm, welches die Besitzer von Paketen, in ihren Bereich (s.g. "Section") eingeordnet, darstellt.
sudo apt-get install configure-debian
gkdebconf
gkdebconf ist ein grafisches Rekonfigurationsprogramm, welches ebenfalls die Pakete in die Unterbereiche einteilt, aber auch alle auf einmal darstellen kann. Das Programm besitzt darüber hinaus die Fähigkeit, die Schnittstellenoberfläche frei zu wählen.
sudo apt-get install gkdebconf
Dateien und Paketen
Der folgende Befehl in einem Terminal zeigt an, zu welchem Paket eine Datei gehört:
dpkg -S DATEINAME
Das gefundene Paket kann dann, sofern ein Eintrag in der debconf-Datenbank besteht, mit dpkg-reconfigure neu konfiguriert werden. Existiert kein solcher Eintrag, wird bei Ausführung des Befehls nichts gemacht.