Pacnew- und Pacsave-Dateien

Aus wiki.archlinux.de

Während der Installation oder dem Entfernen von Paketen wird Pacman eventuell über Dateien informieren (üblicherweise Konfigurationsdateien in /etc), die mit der Endung .pacnew installiert werden, oder mit der Endung .pacsave gesichert werden.

Eine .pacnew-Datei kann während einer System-Aktualisierung (pacman -Syu, pacman -Su, oder pacman -U) erstellt werden, um zu verhindern, dass eine bereits existierende, vom Nutzer veränderte Datei überschrieben wird. Wenn dies geschieht, gibt Pacman eine Nachricht ähnlich der folgenden aus:

Warnung: /etc/pam.d/usermod installiert als /etc/pam.d/usermod.pacnew

Eine .pacsave-Datei kann während des Entfernen eines Paketes (nach pacman -R), oder während einer System-Aktualisierung angelegt werden (wenn das ältere Paket zunächst entfernt werden muss). Wenn Pacman aus seiner Datenbank erfährt, dass eine bestimmte Datei einem Paket gehört, dass aktualisiert werden soll, wird eine .pacsave-Datei angelegt. Wenn dies geschieht, gibt Pacman eine Nachricht ähnlich der folgenden aus:

Warnung: /etc/pam.d/usermod gespeichert als /etc/pam.d/usermod.pacsave

Diese Dateien erfordern einen manuellen Eingriff des Nutzers und sollten idealerweise nach jeder Aktualisierung oder Lösch-Aktion bearbeitet werden. Wenn sie unbehandelt bleiben, kann dies zu Konfigurationsfehlern führen, oder die Software funktioniert vielleicht überhaupt nicht mehr.

Paket-Sicherungsdateien

Das PKGBUILD eines Paketes legt fest, welche Dateien beibehalten oder gesichert werden sollen, wenn das Paket aktualisiert oder entfernt wird. So enthält z.B. das PKGBUILD für pulseaudio die folgende Zeile:

 backup=('etc/pulse/client.conf' 'etc/pulse/daemon.conf' 'etc/pulse/default.pa')

Typen von *.pac*-Dateien

*.pacnew

Für jede Sicherungsdatei innerhalb eines zu aktualisierenden Paketes vergleicht Pacman drei MD5-Summen, die aus dem Inhalt der Datei erstellt werden: Eine Summe für die Version, die ursprünglich von dem Paket installiert wurde, eine für die Version, die sich derzeit innerhalb des Dateisystems befindet, und eine weitere für die zu installierende Version. Wenn die derzeit bestehende Version verändert wurde und somit von der ursprünglich installierten abweicht, kann Pacman diese Änderungen nicht in die zu installierende Version übernehmen. Statt die veränderte Version zu überschreiben, legt Pacman nun eine neue Fassung mit der Endung .pacnew an.

Der Vergleich der drei MD5-Summen führt zu einem der folgenden Ergebnisse:

original = X, aktuell = X, neu = X
Alle drei Dateien haben den gleichen Inhalt, und die Überschreibung kann keine Probleme verursachen. Die aktuelle Version wird mit der neuen überschrieben, ohne den Nutzer zu benachrichtigen. (Obwohl die Inhalte der Dateien gleich sind, wird diese Aktion die Informationen des Dateisystems in Bezug auf Installations-, Modifizierungs- und Zugangszeiten aktualisieren. Gleichzeitig wird sichergestellt, dass veränderte Zugriffsberechtigungen übernommen werden.)
original = X, aktuell = X, neu = Y
Die aktuelle Version entspricht der ursprünglich installierten, doch die neue unterscheidet sich davon. Da der Nutzer die Datei bisher nicht verändert hat und die neue Version Verbesserungen oder Fehlerbehebungen enthalten kann, wird die aktuelle Fassung mit der neuen überschrieben, ohne den Nutzer zu benachrichtigen. Dies ist die einzige Form des automatischen Zusammenführens von Dateien, die Pacman beherrscht.
original = X, aktuell = Y, neu = X
Die ursprüngliche Version stimmt exakt mit der neuen überein, doch die Datei wurde zwischenzeitlich vom Nutzer verändert. Die aktuelle Version wird beibehalten und die neue verworfen, ohne den Nutzer zu benachrichtigen.
original = X, aktuell = Y, neu = Y
Die neue Fassung entspricht der aktuellen. Die aktuelle Version wird mit der neuen überschrieben, ohne den Nutzer zu benachrichtigen. (Obwohl die Inhalte der Dateien gleich sind, wird diese Aktion die Informationen des Dateisystems in Bezug auf Installations-, Modifizierungs- und Zugangszeiten aktualisieren. Gleichzeitig wird sichergestellt, dass veränderte Zugriffsberechtigungen übernommen werden.)
original = X, aktuell = Y, neu = Z
Alle drei Versionen unterscheiden sich voneinander. Die aktuelle Fassung wird beibehalten und die neue mit der Endung .pacnew gespeichert. Der Nutzer wird über die Existenz der .pacnew-Datei informiert. Er muss nun die früheren Änderungen manuell in die neue Version übertragen.

.pacsave

Wenn der Nutzer eine der Dateien verändert hat, die in backup spezifiziert sind, wird diese Datei in die Endung .pacsave umbenannt und verbleibt im Dateisystem, nachdem der Rest des Paketes entfernt wurde.

Hinweis: Die Verwendung der Option -n zusammen mit pacman -R wird zu einer vollständigen Entfernung aller Dateien in dem spezifizierten Paket führen. Daher werden in diesem Fall keine .pacsave-Dateien erstellt.

*.pac*-Dateien finden

Arch Linux stellt keine offiziellen Werkzeuge zum Bearbeiten von .pacnew-Dateien bereiten. Diese müssen vom Nutzer selbst aktualisiert werden; einige Vorschläge dazu finden sich im folgenden Abschnitt. Als Erstes müssen die entsprechenden Dateien gefunden werden. Besonders wenn eine große Anzahl von Dateien aktualisiert oder entfernt wird, können neue *.pac*-Dateien leicht übersehen werden.

Am besten sucht man zunächst dort, wo die meisten globalen Einstellungen gespeichert werden:

find /etc -name "*.pac*"

oder gleich auf der gesamten Festplatte:

find / -name "*.pac*"

Man kann auch locate verwenden, wenn dieses installiert ist. Zunächst muss die Datenbank neu indiziert werden:

# updatedb

Dann folgt:

locate -e --regex "\.pac"

Oder man durchsucht die Log-Dateien von Pacman:

egrep "pac(new|orig|save)" /var/log/pacman.log

Beachte, dass das Log nicht jene Dateien verzeichnet, die gegenwärtig im Dateisystem enthalten sind, oder die bereits entfernt wurden.

.pacnew-Dateien bearbeiten

Wenn alle .pacnew-Dateien gefunden wurden, können sie leicht mit Hilfe einiger Werkzeuge bearbeitet werden, die eigens dem Verschmelzen zweier Dateien dienen. Zur Auswahl stehen u.a.:

  • vimdiff für vim-Nutzer
  • ediff für Emacs-Nutzer
  • Kompare für KDE-Nutzer
  • meld für Gnome-Nutzer, oder
  • sdiff aus dem Paket diffutils
  • pacdiff - Ein sehr rudimentäres Werkzeug, das inzwischen in Pacman enthalten ist. Der Befehl pacdiff -h zeigt die verfügbaren Optionen an.

Nach dem Verschmelzen können die .pacnew-Dateien entfernt werden.

Von dritter Seite werden weitere Werkzeuge im Extra-Repo oder im AUR bereitgestellt:

  • pacmerge-git - Ein interaktives Kommandozeilen-Programm im AUR