Pacman-Datenbank reparieren
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