Paketverwaltung von Arch Linux auf dem Raspberry Pi beschleunigen
Seit längerem stelle ich einen Server für Quake 3 Arena zur Verfügung. Dieser läuft auf einem Raspberry Pi 3 mit ALARM (Arch Linux für ARM). Da dieser jedem zur Verfügung steht, muss ich regelmäßig die Pakete aktualisieren. Hierbei hängt der Updatevorgang in der Regel bei (1 / 3) Updating manpage index… und (2 / 3) Updating the info directory file… für einige Minuten fest.
Um beides schnell abzuwickeln ist der Raspberry Pi einfach zu schwach. Daher habe mir überlegt, brauche ich direkt nach einem Update bzw. einer Installation eines Pakets z. B. einen aktuellen Manpage-Index auf dem Raspberry Pi? Eigentlich nicht. Verantwortlich für die beiden Schritte sind sogenannte Hooks die es seit Pacman 5 gibt. Diese liegen unter /usr/share/libalpm/hooks/. In dem Verzeichnis liegen unter anderem die Dateien man-db.hook und texinfo-install.hook. Laut der Manpage von libalpm lassen sich die Hooks deaktivieren, wenn man sie nach /dev/null umleitet. Um nicht an den originalen Hooks Änderungen vorzunehmen, erstellen wir unter /etc/pacman.d erst einmal das Verzeichnis hooks. Alle Hooks die dort vorhanden sind, überschreiben die, die unter /usr/share/libalpm/hooks/ vorhanden sind. Dort erstellen wir dann zwei Symlinks die nach /dev/null zeigen.
ln -s /dev/null /etc/pacman.d/hooks/man-db.hook
ln -s /dev/null /etc/pacman.d/hooks/texinfo-install.hook
Installiert oder aktualisiert man nun ein Paket und hat die Debug-Funktion von pacman aktiviert, sollte man folgende Zeilen in der Ausgabe finden und der Vorgang sollte schnell durchlaufen.
debug: skipping overridden hook /usr/share/libalpm/hooks/man-db.hook
debug: skipping overridden hook /usr/share/libalpm/hooks/texinfo-install.hook
So ganz ohne aktuellen Manpage-Index wollte ich dann aber doch nicht sein. Früh morgens findet auf dem Server im Grunde genommen keine Aktivität statt. Dann könnte man beide Hooks ja eigentlich laufen lassen. Lösen kann man das ganze über systemd und den timern. Diese sind in etwa vergleichbar mit den bekannten Cronjobs. Unter /etc/systemd/system/ erstellt man hierfür erst einmal zwei Service- sowie zwei Timer-Dateien mit folgendem Inhalt.
manpage-index.service
[Unit]
Description=Manpage-Index aktualisieren
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'mkdir -p /var/cache/man; exec mandb --quiet --no-purge'
manpage-index.timer
[Unit]
Description=Manpage-Index täglich aktualisieren
[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
texinfo-index.service
[Unit]
Description=Texinfo aktualisieren
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'for f in /usr/share/info/*.gz; do install-info "$f" /usr/share/info/dir 2> /dev/null; done'
texinfo-index.timer
[Unit]
Description=Run texinfo updater daily
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
Mit systemctl start texinfo-index.timer und systemctl start manpage-index.timer werden die beiden Timer dann noch abschließend aktiviert, sodass diese nun täglich um 2.30 und 3.30 Uhr gestartet werden.
Diese Artikel könnten auch interessant sein:
- Arch Linux Security Tracker veröffentlicht
- Archlinux.org schafft Beginners Guide ab
- Installationsmedium von Arch Linux nun mit Installationstool
- Der Mythos Arch Linux
- Workshop zum Erstellen von PKGBUILD-Dateien unter Arch