ucf - Konfigurationsdatei aktualisieren: Benutzeränderungen in Konfigurationsdateien beibehalten
SYNOPSIS
ucf [Optionen] <Neue Datei> <Ziel>
ucf [Optionen] --purge <Ziel>
BESCHREIBUNG
Dieses Dienstprogramm bietet eine Möglichkeit, den Benutzer zu fragen, ob er neue Versionen von Konfigurationsdateien akzeptieren möchte, die vom Paketbetreuer bereitgestellt werden, wobei verschiedene Heuristiken verwendet werden, um die Interaktionszeit zu minimieren. Es verwendet debconf, um mit dem Benutzer zu interagieren, gemäß der Debian-Richtlinie. In der obigen SYNOPSIS ist „Neue Datei“ die Konfigurationsdatei, die vom Paket bereitgestellt wird (entweder mit dem Paket ausgeliefert oder von den Skripten des Betreuers dynamisch generiert), und „Ziel“ ist der Speicherort (üblicherweise unter /etc), an dem sich die tatsächliche Konfigurationsdatei befindet und möglicherweise vom Endbenutzer geändert wurde. Da die bearbeiteten Dateien keine symbolischen Links sind, sondern echte Dateien, folgt und löst ucf symbolische Links, bevor es Aktionen ausführt. Soweit wie möglich versucht ucf, die Eigentums- und Berechtigungsverhältnisse der „Neuen Datei“ beizubehalten, wenn diese an den neuen Speicherort kopiert wird.
Dieses Skript versucht, eine ähnliche Behandlung wie „conffiles“ für Dateien bereitzustellen, die unter /etc installiert sind, aber nicht in einem Debian-Paket enthalten sind, sondern stattdessen von den Skripten nach der Installation verarbeitet werden. Die Debian-Richtlinie besagt, dass Dateien unter /etc, die Konfigurationsdateien sind, Benutzeränderungen beibehalten müssen, und dies gilt auch für Dateien, die von Wartungsskripten verarbeitet werden. Mit ucf kann ein Satz von Standardkonfigurationsdateien an einem Ort in /usr (z. B. /usr/share/<pkg>) gespeichert werden und gleichzeitig Dateien in /etc verwaltet werden, wobei Benutzeränderungen beibehalten und im Allgemeinen die gleichen Funktionen bereitgestellt werden, die dpkg normalerweise für „conffiles“ bereitstellt.
Darüber hinaus bietet dieses Skript Funktionen, um eine Datei, die bisher nicht wie ein „conffile“ behandelt wurde, so zu behandeln, dass sie in dieses Schema einbezogen wird, und versucht, die Anzahl der bei der Installation gestellten Fragen zu minimieren. Tatsächlich ist die Übergangsfunktion besser als die, die dpkg beim Übergang einer Datei von einem Nicht-„conffile“- in einen „conffile“-Status bietet. Die zweite Form in der obigen SYNOPSIS dient dazu, Informationen über die Konfigurationsdatei zu löschen, wenn das Paket gelöscht wird, und ist entscheidend, um eine reibungslose Neuinstallation zu ermöglichen.
Während der Operationen erstellt ucf optional Kopien der Versionen der betreffenden Konfigurationsdatei, wenn es mit Konfigurationsdateien arbeitet. Beispielsweise enthält eine Datei mit dem Suffix ucf-old die alte Version einer Konfigurationsdatei, die von ucf ersetzt wurde. Außerdem können Kopien der Konfigurationsdatei mit den Suffixen ucf-new und ucf-dist erstellt werden, und die Wartungsskripte sollten in Betracht ziehen, Kopien der Konfigurationsdatei mit diesen Erweiterungen während der Löschung zu entfernen.
OPTIONEN
-h, --help
Gibt eine kurze Hilfenachricht aus.
-n, --no-action
Testlauf. Gibt die Aktionen aus, die ausgeführt würden, wenn das Skript aufgerufen wird, führt aber keine Aktionen aus.
-d[n], --debug=[n]
Setzt die Debug-Ebene auf die (optionale) Ebene n (n hat standardmäßig den Wert 1). Bitte beachten Sie, dass vor der optionalen Ziffer n keine Leerzeichen stehen dürfen. Dies aktiviert eine ausführliche Debug-Ausgabe.
-p, --purge
Entfernt alle Spuren der Datei aus der Status-Hash-Datei. Dies ist erforderlich, um die Neuinstallation eines Pakets nach dem Löschen zu ermöglichen; andernfalls wird die eigentliche Konfigurationsdatei entfernt, aber sie verbleibt in der Hash-Datei; und bei der Neuinstallation wird keine Aktion ausgeführt, da die MD5-Summe der neuen Datei mit der in der Hash-Datei übereinstimmt. Kurz gesagt, denken Sie daran, diese Option in dem Postrm für jede von ucf verwaltete Konfigurationsdatei zu verwenden, wenn das Paket gelöscht wird (vorausgesetzt, ucf selbst existiert). Hinweis: ucf greift bei dieser Operation nicht tatsächlich auf die Datei auf der Festplatte zu, sodass alle Dateilöschvorgänge in der Verantwortung des aufrufenden Pakets liegen.
-v, --verbose
Bewirkt, dass das Skript sehr ausführlich über das Setzen interner Variablen Bescheid gibt.
-P foo, --package foo
Verhindert, dass bei der Aktualisierung von Konfigurationsdateien dpkg-Divert-Diversionen für das Paket foo berücksichtigt werden.
-s foo, --src-dir foo
Setzt das Quellverzeichnis (es wird erwartet, dass sich die historischen MD5-Summen in Dateien und Unterverzeichnissen dieses Verzeichnisses befinden) auf foo. Standardmäßig wird davon ausgegangen, dass das Verzeichnis, in dem sich die neue Datei befindet, das Quellverzeichnis ist. Das Setzen dieser Option überschreibt Einstellungen in der Umgebungsvariablen UCF_SOURCE_DIR und in der Konfigurationsdateivariablen conf_source_dir.
--sum-file foo
Erzwingt, dass die historischen MD5-Summen aus dieser Datei gelesen werden, anstatt davon auszugehen, dass sie sich im Quellverzeichnis befinden. Das Setzen dieser Option überschreibt Einstellungen in der Umgebungsvariablen UCF_OLD_MDSUM_FILE und in der Konfigurationsdateivariablen conf_old_mdsum_file.
--three-way
Dadurch wird die Option während der Installation aktiviert, dass dem Benutzer die Möglichkeit geboten wird, eine Zusammenführung der Änderungen zwischen der alten Version des Entwicklers und der neuen Version des Entwicklers in die lokale Kopie der Konfigurationsdatei anzuzeigen. Wenn der Benutzer das Ergebnis mag, kann er die Zusammenführung in die lokale Kopie der Konfigurationsdatei übernehmen. Dies ermöglicht es, neue Upstream-Änderungen auch dann zu übernehmen, wenn lokale Änderungen an der Konfigurationsdatei beibehalten werden. Dies wird erreicht, indem die Konfigurationsdatei während der Registrierung in einem Cache-Bereich gespeichert und während der Installation diff3 verwendet wird (der Name der gespeicherten Datei ist eine geänderte Version des vollständigen Pfads der Konfigurationsdatei, um Namenskonflikte zu vermeiden).
--debconf-ok
Gibt an, dass es in Ordnung ist, wenn ucf eine bereits laufende Debconf-Instanz für die Abfrage verwendet (es war immer in Ordnung, ucf zu verwenden, wenn Debconf nicht ausgeführt wird – es wird Debconf bei Bedarf aufrufen).
--debconf-template foo
Weisen Sie ucf an, die angegebene Multiauswahl-Debconf-Vorlage anstelle der von ucf bereitgestellten Standard-Debconf-Vorlage zu verwenden. Der Aufrufer ist dafür verantwortlich, dass die angegebene Vorlage vorhanden ist und eine Liste von Optionen enthält, die mit den Optionen der Standard-ucf-Vorlage übereinstimmen, und sollte Choices-C: ${CHOICES} festlegen, um sicherzustellen, dass die zurückgegebenen Werte mit denen der Standardvorlage übereinstimmen. Beachten Sie, dass die Optionen unterschiedlich sein müssen, je nachdem, ob die Option --three-way ebenfalls gesetzt ist.
--state-dir /path/to/dir
Legen Sie das Zustandsverzeichnis auf /path/to/dir anstelle des Standardverzeichnisses /var/lib/ucf fest. Wird hauptsächlich für Tests verwendet.
-Z
Legen Sie den SELinux-Sicherheitskontext der Zieldatei auf den Standardtyp fest.
VERWENDUNG
Der häufigste Anwendungsfall ist recht einfach: ein einzelner Befehl in der postinst-Datei bei der Konfiguration und ein weiterer Befehl in der postrm-Datei, um ucf mitzuteilen, die Konfigurationsdatei bei der Deinstallation (mit der Option --purge) zu vergessen (vorausgesetzt, ucf ist noch auf dem System installiert).
Es wird empfohlen, dass Sie auch alle von ucf verwalteten Dateien im ucf-Register registrieren; dies verknüpft die Konfigurationsdatei mit dem zugehörigen Paket. Dies geschieht mit einem einfachen Aufruf von ucfr. Benutzer können dann die Verknüpfung zwischen einer Konfigurationsdatei und dem Paket mit dem Tool ucfq abfragen. Weitere Informationen finden Sie in den entsprechenden Handbuchseiten.
Pakete, die Debhelper verwenden, können die Erstellung der erforderlichen Wartungsskript-Fragmente vereinfachen, indem sie das Hilfsprogramm dh_ucf verwenden.
Wenn eine Datei, die von Wartungsskripten verwaltet wird, von einem ungeschützten Status in den durch das Skript bereitgestellten Schutz übergeht, kann der Maintainer den Übergang erleichtern, indem er die Anzahl der Fragen, die zur Installationszeit gestellt werden, reduziert. Insbesondere sollten keine Fragen gestellt werden, wenn die betreffende Datei eine unveränderte Version ist, die in einer früheren Version dieses Pakets enthalten war, und der Maintainer kann dies unterstützen, indem er dem Skript die historischen MD5-Summen mitteilt, die die veröffentlichten Versionen dieser Datei enthielten.
Dies kann auf zwei Arten geschehen: Entweder durch das Erstellen einer Datei mit dem Namen <Neue Datei>.md5sum, die jeweils eine MD5-Summe pro Zeile enthält (die Dateinamen, die Sie verwenden, werden ignoriert, mit Ausnahme des Eintrags mit dem Namen „default“), oder durch das Erstellen eines Verzeichnisses mit dem Namen <Neue Datei>.md5sum.d, das eine beliebige Anzahl von Dateien enthalten kann, von denen jede eine einzelne Zeile enthält, nämlich die MD5-Summe einer früheren Version von <Neue Datei>. Die Namen dieser Dateien sind nicht wichtig, mit einer Ausnahme: Die Datei mit dem Namen „default“ wird speziell behandelt. Der Autor verwendet beispielsweise entweder Paketversionsnummern oder Codemamen, wie z. B. 7.6.3 oder potato. Wenn keine der historischen MD5-Summen übereinstimmt, sind wir fast sicher, dass entweder der historische Datensatz der MD5-Summen nicht vollständig ist oder der Benutzer die Konfigurationsdatei geändert hat.
Die Standard-MD5-Summe
Die Ausnahme von der Regel bezüglich der Namen, die oben erwähnt wurde, ist, dass, wenn keine MD5-Summen übereinstimmen und die Datei <Neue Datei>.md5sum.d/default vorhanden ist oder wenn es in <Neue Datei>.md5sum eine Zeile gibt, die einer Standarddatei entspricht, diese als Standard-MD5-Summe der früheren Version des Pakets verwendet wird, von der angenommen wird, dass sie auf dieser Maschine installiert wurde. Wie Sie sehen, trifft der Maintainer, es sei denn, es gibt eine begrenzte Anzahl von zuvor veröffentlichten Paketen (wie z. B. nur eines), auch eine fundierte Vermutung, aber diese Option wird dem Maintainer zur Verfügung gestellt.
Wenn die Datei <Neue Datei>.md5sum oder das Verzeichnis <Neue Datei>.md5sum.d nicht existiert oder keine der MD5-Summen übereinstimmt, wird die installierte <Zieldatei> getestet, um festzustellen, ob sie mit der <Neuen Datei> identisch ist. Wenn nicht, wird der Benutzer gefragt, ob er die Datei ersetzen möchte.
Eine zusätzliche Funktion wird ebenfalls angeboten: optional kann ucf eine alte Version der Konfigurationsdatei des Maintainers speichern und beim Upgrade die in der Version des Maintainers vorgenommenen Änderungen berechnen und diese auf die lokale Version der Datei anwenden (auf Anfrage des Benutzers). Es gibt auch eine Vorschaufunktion, mit der der Benutzer die Ergebnisse einer solchen Zusammenführung überprüfen kann, bevor er die Ausführung anfordert.
UMGEBUNGSVARIABLEN
Wenn die Variable UCF_FORCE_CONFFNEW gesetzt ist, wird die neue Datei immer verwendet, um die installierte Zieldatei zu überschreiben, während die Variable UCF_FORCE_CONFFOLD, wenn sie gesetzt ist, die installierte Datei stillschweigend beibehält. UCF_FORCE_CONFFMISS ist nur anwendbar, wenn die installierte Zieldatei nicht existiert (möglicherweise aufgrund der Löschung durch den Benutzer), und erzwingt, dass ucf die fehlende Datei neu erstellt (das Standardverhalten ist, die Wünsche des Benutzers zu respektieren und die lokal gelöschte Datei nicht neu zu erstellen). Wenn ucf eine untergeordnete Shell erstellt, werden außerdem die Variablen UCF_CONFFILE_NEW und UCF_CONFFILE_OLD festgelegt, die zur Überprüfung der Änderungen nützlich sind.
Die Flags confmiss, confnew, confold, confdef und confask der Variablen DPKG_FORCE werden ebenfalls unterstützt. Weitere Informationen finden Sie in dpkg(1).
DATEIEN
Dieses Skript erstellt die Datei new_file.md5sum und kann die Datei (wahrscheinlich mit dem Paket geliefert) <Neue Datei> an ihr Ziel <Zieldatei> kopieren.
/var/lib/ucf/hashfile und /var/lib/ucf/hashfile.X, wobei X eine kleine ganze Zahl ist, wo frühere Versionen der Hashdatei gespeichert werden.
/etc/ucf.conf
BEISPIELE
Wenn das Paket foo ucf verwenden möchte, um die Benutzerinteraktion für die Konfigurationsdatei foo.conf zu verarbeiten, wobei eine Version davon im Paket als /usr/share/foo/configuration bereitgestellt wird, ist ein einfacher Aufruf von ucf in der Datei post inst alles, was benötigt wird:
ucf /usr/share/foo/configuration /etc/foo.conf
Bei der Deinstallation sollte ucf angewiesen werden, die Datei zu vergessen (siehe detaillierte Beispiele in /usr/share/doc/ucf/examples):
ucf --purge /etc/foo.conf Bitte beachten Sie, dass purge auch verwendet werden kann, um ucf dazu zu bringen, den vorherigen Zustand der Dateien zu vergessen, und wenn das Paket das nächste Mal installiert oder aktualisiert wird, wird ucf den Benutzer auffordern, die aktuelle Konfigurationsdatei zu ersetzen. Verwenden Sie dies, wenn Sie Ihre Entscheidung, nicht auf eine vom Maintainer bereitgestellte Version der Konfigurationsdatei zu aktualisieren, ändern möchten.
Die Motivation für dieses Skript war die Bereitstellung einer Konfigurationsdateiverwaltung für Startdateien für Emacs-Lisp-Pakete (z. B. /etc/emacs21/site-start.d/50psgml-init.el). Diese Startdateien werden nicht mit dem Paket ausgeliefert, sondern werden während der Post-Installations-Konfigurationsphase durch das Skript /usr/lib/emacsen-common/emacs-package-install $package_name installiert.
Dieses Skript soll vom Paketinstallationsskript unter /usr/lib/emacsen-common/packages/install/$package_name für jede installierte Emacs-Version aufgerufen werden, indem es mit den entsprechenden Werten für die neue Datei (/usr/share/emacs/site-lisp/<pkg>/<pkg-init.el) und die Zieldatei (/etc/emacs21/site-start.d/50<pkg-init.el) aufgerufen wird, und es sollte den Rest erledigen.
SIEHE AUCH
ucf.conf(5), ucfr(1), ucfq(1), dpkg(1), dh_ucf(1), diff3(1).
Die Debian Emacs-Richtlinie, die mit dem Paket emacsen-common ausgeliefert wird.
AUTOR
Diese Manpage wurde von Manoj Srivastava <_> für das Debian GNU/Linux-System verfasst.