Makepkg ohne /tmp

Makepkg

Das Tool makepkg gehört zur Toolsammlung von Arch Linux und deren Derivaten. Mit dem Bash Skript lassen sich die Pakete, die der Paketmanager Pacman verwaltet, bauen. Zum Bau der Pakete verwendet makepkg die BUILDSKRIPTS.

Das Temporäre Filesystem

Standardmäßig hängt Arch Linux oder dessen Derivat Manjaro das tmpfs auf /tmp ein, um eine dynamische RAM Disk für temporäre Dateien zur Verfügung zu stellen. Dieses bringt bei vielen Anwendungen Performanceverbesserung wie z.B. Firefox und Chrome die viele kleine Dateien zum Cachen ablegen.

Das Build

Beim Bau der Pakete werden zunächst die Quellen entpackt. Verwendet man yaourt, dann werden die Dateien nach /tmp/yaourt-user in ein eigenes Verzeichnis entpackt. Als nächstes folgt in der Regel die Kompilation der Quelltext und ein anschließendes Packen zu einem Archiv mit und auch ohne Kompression.

Das Problem

Da heute Softwaren nicht immer klein sind und nicht jedes Gerät mehr als 4 GB Arbeitsspeicher verfügt, kann es beim Bau der Pakete schnell zu dem Fehler “no space left on device” kommen, was nichts anderes bedeutet als das der Arbeitsspeicher verbraucht worden ist.

Lösungen

Zum einen kann man das automatische Mounten des temporären Dateisystems mit Systemd tmpfs maskieren und somit das einhängen beim Start verhindern. Das hat aber auch zur Folge das der gewüschte Performancezuwachs nicht mehr vorhanden ist.

Eine andere Lösung ist, dass man dem Programm makepkg den Pfad für die temporären Dateien vorgibt.

#-- Specify a directory for package building.
BUILDDIR=/home/sascha/PKGBUILDS/build

Ich habe immer ein lokales Verzeichnis, wo ich Änderungen an den Buildskripten vornehme. Dieses ist das Verzeichnis /home/sascha/PKGBUILDS und darin befindet sich der Ordner build. Wenn man jetzt ein großes Paket baut, so werden die Daten auf die Festplatte geschrieben und das Paket kann erfolgreich gebaut werden.