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
Die im System vorhandenen Pakete kann man nach irregulärem Abbruch eines Installations- oder Update-Vorganges mit dem Befehl pacman -Dk
auf Gültigkeit überprüfen. Sollte die Ausgabe des Befehls eine vermisste Abhängigkeit für ein Paket anzeigen, kann das Paket mit pacman -S <Paketname>
erneut installiert werden.
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 der lokalen Paketdatenbank auf beschriebenem Wege nicht möglich sein, wird man an einer Neuinstallation des Systems nicht vorbeikommen. Um eine solche Neuinstallation möglichst einfach vornehmen zu können, ist es ratsam, vorsorglich Listen installierter Pakete als Textdatei zu sichern.
Folgender Befehl erstellt eine Liste der Pakete, die aus den Pacman-Repos über die Grundinstallation des Metapaketes base
und der Paketgruppe base-devel
hinausgehend ausdrücklich installiert worden sind:
pkg=$(comm -23 <(pacman -Qenq | sort) <(pactree -ld1 base | sort)) && comm -23 <(echo -e "$pkg") <(pacman -Qgq base-devel | sort) > Pakete-Repos
Hinweis: Um den Befehl ausführen zu können, muss das Paket pacman-contrib installiert sein.
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