Ich hatte gerade einen fürchterlichen Einleitungssatz mit Kühen und Essen im Kopf, deshalb versuche ich es im zweiten Anlauf mit diesem Klassiker.
Mit welcher Formel kann man das Volumen einer Pizza mit dem Radius z und der Dicke a beschreiben?
Pi * z * z * a
Wer auch nur ein bißchen geschmunzelt hat, sollte sich Kalkofe und die "Jean Pütz"-Folge anhören oder Debian-Entwickler werden, die so etwas in ihren Signaturen stehen haben. 😉
Nachdem ich in den vergangenen Wochen mich mehr und mehr mit den ganzen Geek-Werkzeugen zur Debian-Entwicklung auseinandergesetzt hatte, wollte ich an dieser Stelle kurz drei sehr nützliche Programme vorstellen, die man als Paketbauer für Debian gut gebrauchen kann. Nach und nach hat sich herausgestellt, dass diese drei ausreichend sind, um ein Paket sauber, reproduzierbar und schnell erstellen zu können.
Mein Frage war, wie ich das Kompilieren von Debian-Paketen innerhalb einer Chroot-Umgebung beschleunigen kann, die mit Hilfe von Pbuilder oder besser noch Cowbuilder erstellt werden und schließlich wurde ich im Pbuilder-Howto von Ubuntu.com fündig. Pbuilder funktionierte schon letztes Jahr beim Kompilieren von DWM sehr gut und mit diesen zwei Skripten könnt ihr sofort loslegen.
Zum Optimieren des Vorgangs benötigt ihr Cowbuilder, einen Wrapper um Pbuilder, der das Anlegen der Chroot-Umgebung beschleunigt, indem Hardlinks auf schon bestehende Daten verweisen. Der zeitraubendste Prozess beim Bauen in einer Chroot-Umgebung ist jedoch das Installieren der Abhängigkeiten. Apt oder besser dpkg synchronisiert jeden Schreibzugriff auf der Festplatte und wartet bis das System erfolgreich zurückmeldet, dass das Paket auch tatsächlich ordnungsgemäß installiert wurde. Für eine normale Ubuntu- oder Debianinstallation ist das sinnvoll.
Jedoch bei einer Chroot-Umgebung, die nach jedem (hoffentlich) erfolgreichen Bauen des Pakets wieder zerstört wird, kann man auf diese Verzögerung verzichten. Signalisieren wir dem System einfach, dass der Schreibvorgang immer erfolgreich ist.
Hier kommt Eatmydata ins Spiel. Der Name ist Programm. In der .pbuilderrc muss folgendes eingetragen werden.
Eatmydata
EXTRAPACKAGES="eatmydata ccache" if [ -z "$LD_PRELOAD" ]; then LD_PRELOAD=/usr/lib/libeatmydata/libeatmydata.so else LD_PRELOAD="$LD_PRELOAD":/usr/lib/libeatmydata/libeatmydata.so fi export LD_PRELOAD
In die Chroot-Umgebung lässt sich auch manuell wechseln und eatmydata installieren.
DIST=sid ARCH=amd64 cowbuilder --login --save
apt-get install eatmydata
ccache
Ccache speichert die Ergebnisse des Kompilierens zwischen. Das Ergebnis spürt man, wenn man das gleiche Paket mehrmals hintereinander neu erstellen möchte, weil Veränderungen notwendig waren.
In der .pbuilderrc steht wiederum:
sudo mkdir -p /var/cache/pbuilder/ccache sudo chmod a+w /var/cache/pbuilder/ccache export CCACHE_DIR="/var/cache/pbuilder/ccache" export PATH="/usr/lib/ccache:${PATH}" BINDMOUNTS="${CCACHE_DIR}"
Ein Cowbuilder-Chroot erstellt ihr dann mit
DIST=sid ARCH=amd64 cowbuilder --create
Pakete werden mit
DIST=sid ARCH=amd64 cowbuilder --build meinPaket.dsc
gebaut. Kombiniert das ganze mit dem gestern vorgestellten Schroot und ihr habt die perfekte Ausgangsbasis um Pakete sauber und ohne Ballast für euer normales Produktivsystem zu erstellen.
Nett, kannte ich noch gar nicht. Danke für den Tip! Ein Tip von mir: Schreibe in die ersten paar Zeilen, worum es in dem Artikel überhaupt geht. Denn kommen sicher auch mehr Besucher aus dem osbn 😉
Danke dir. Bei ausführlicheren Artikeln achte ich immer auf eine seriöse Einleitung. Das war mehr als eine Art Merkzettel gedacht, den ich nicht ganz so trocken schreiben wollte. Sobald ich alle Schnipsel zusammen habe, mache ich daraus dann oft einen etwas größeren Artikel, der alles miteinander verbindet. Ich erwarte bei so speziellen Themen auch nie große Massen. 🙂