Pacman-Datenbank reparieren: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Zur Navigation springen Zur Suche springen
 
Zeile 2: Zeile 2:
  
 
== Beschädigung der Pacman-Datenbank ==
 
== Beschädigung der Pacman-Datenbank ==
Eine Beschädigung der Synchronisationsdatenbank im Verzeichnis {{ic|/var/lib/pacman/sync}} ist in der Regel kein Problem, da sie mit dem Befehl {{ic|pacman -Syy}} neu generiert werden kann. Anders ist es mit dem Verzeichnis {{ic|/var/lib/pacman/local}}. Dieser Teil der Datenbank ist als Ausgangsreferenz der lokalen Paketverwaltung ein Unikat, das im Falle einer Beschädigung nicht neu generiert werden kann.
+
Eine Beschädigung der Synchronisationsdatenbank im Verzeichnis {{ic|/var/lib/pacman/sync}} ist in der Regel kein Problem, da sie mit dem Befehl {{ic|pacman -Syy}} neu erstellt werden kann. Anders ist es mit dem Verzeichnis {{ic|/var/lib/pacman/local}}. Dieser Teil der Datenbank ist als Ausgangsreferenz der lokalen Paketverwaltung ein Unikat, das im Falle einer Beschädigung nicht neu generiert werden kann.
  
 
Anzeichen für eine Beschädigung der lokalen Datenbank sind:
 
Anzeichen für eine Beschädigung der lokalen Datenbank sind:

Version vom 11. März 2018, 19:39 Uhr

Sollte es während eines laufenden Pacman-Updates aus irgend einem Grund zu einem irregulären Abbruch kommen (Systemabsturz, Stromausfall o.ä.), besteht die Gefahr, dass die Pacman-Datenbank dadurch beschädigt worden ist.

Beschädigung der Pacman-Datenbank

Eine Beschädigung der Synchronisationsdatenbank im Verzeichnis /var/lib/pacman/sync ist in der Regel kein Problem, da sie mit dem Befehl pacman -Syy neu erstellt werden kann. Anders ist es mit dem Verzeichnis /var/lib/pacman/local. Dieser Teil der Datenbank ist als Ausgangsreferenz der lokalen Paketverwaltung ein Unikat, das im Falle einer Beschädigung nicht neu generiert werden kann.

Anzeichen für eine Beschädigung der lokalen Datenbank sind:

  • Der Befehl pacman -Q zeigt keine Ausgabe
  • Der Befehl pacman -Syu meldet fälschlicherweise, dass das System aktuell sei
  • Der Befehl pacman -S <Paket> gibt eine Liste zu installierender Abhängigkeiten aus, die bereits im System installiert sind

Backup der lokalen Pacman-Datenbank

Für den Fall einer Beschädigung der lokalen Pacman-Datenbank ist man mit einem frischen Backup des Verzeichnisses /var/lib/pacman/local gut gerüstet.

Manuelles Backup

Ein manuelles Backup der lokalen Pacman-Datenbank kann mit diesem Befehl vorgenommen werden:

tar -cjf pacman-local-backup.tar.bz2 /var/lib/pacman/local

Zur Wiederherstellung der lokalen Pacman-Datenbank legt man die Backup-Datei pacman-local-backup.tar.bz2 in das Root-Verzeichnis / und führt diesen Befehl aus:

tar -xjvf pacman-local-backup.tar.bz2

Automatisiertes Backup

Um das Backup stets auf aktuellem Stand zu halten, ist eine Automatisierung des vorgenannten Backup-Befehles sinnvoll. Diese kann mit dem Tool pakbak-gitAUR realisiert werden. Bei Pakbak handelt es sich um ein Bash-Script, das über einen Systemd-Dienst angestoßen wird, sobald die Inhalte des Verzeichnisses /var/lib/pacman/local verändert worden sind.

Nach der Installation von Pakbak können der Zielort und die Anzahl der im Rotationsverfahren aufzubewahrenden Backups festgelegt werden.

/etc/pakbak.conf
# Backup the database to this folder
target_folder=/var/local/pakbak

# Define how long backups should be kept
keep_days=5

# Define how many backups should be kept
keep_number=5

Hinweis: Das Zielverzeichnis muss angelegt werden bzw. bereits existieren. Umgebungsvariablen in der Pfadangabe wie z.B. $HOME werden nicht verarbeitet.

Um zu testen, ob das Bash-Script erwartungsgemäß funktioniert, kann man die Ausführung mit Root-Rechten manuell anstoßen:

sh /usr/lib/systemd/scripts/pakbak

Anschließend aktiviert man den Systemd-Dienst, der das Verzeichnis /var/lib/pacman/local automatisch auf Veränderungen hin überwacht:

systemctl enable pakbak.path

Restaurierung der lokalen Datenbank

Sollte man nicht über ein zeitnahes Backup verfügen, kann man mit einigem Aufwand versuchen, die lokale Pacman-Datenbank zu restaurieren. Voraussetzung dafür ist, dass die Pacman-Logdatei /var/log/pacman.log vorhanden und unbeschädigt ist. Die einzelnen zur Restauration erforderlichen Verfahrensschritte sind im engl. Wiki detailliert beschrieben.

Listen installierter Pakete sichern

Sollte eine Restauration auf beschriebenem Wege nicht möglich sein, wird man um eine Neuinstallation des Systems nicht umhinkommen. Um eine solche Neuinstallation möglichst einfach vornehmen zu können, ist es ratsam, vorsorglich Listen installierter Paket als Textdatei zu sichern.

Folgender Befehl erstellt eine Liste von Paketen, die aus den Pacman-Repos nach der Grundinstallation der Paketgruppen base und base-devel ausdrücklich installiert worden sind:

comm -23 <(pacman -Qenq | sort) <(pacman -Qgq base base-devel | sort) > Pakete-Repos

Nach einer Neuinstallation des Grundsystems können die in der Liste enthaltenen Pakete reinstalliert werden:

pacman -S -< Pakete-Repos

Eine Liste der Pakete, die außerhalb der Pacman-Repos wie z.B. aus dem AUR installiert worden sind, kann man mit diesem Befehl erstellen:

pacman -Qqem > Pakete-AUR

Siehe auch