{"id":9248,"date":"2012-09-30T23:59:09","date_gmt":"2012-09-30T21:59:09","guid":{"rendered":"https:\/\/www.gambaru.de\/blog\/?p=9248"},"modified":"2012-09-30T23:59:09","modified_gmt":"2012-09-30T21:59:09","slug":"unschlagbare-kombination-cowbuilder-eatmydata-und-ccache","status":"publish","type":"post","link":"https:\/\/gambaru.de\/blog\/2012\/09\/30\/unschlagbare-kombination-cowbuilder-eatmydata-und-ccache\/","title":{"rendered":"Unschlagbare Kombination: Cowbuilder, Eatmydata und ccache"},"content":{"rendered":"<p>Ich hatte gerade einen f\u00fcrchterlichen Einleitungssatz mit K\u00fchen und Essen im Kopf, deshalb versuche ich es im zweiten Anlauf mit diesem Klassiker.<br \/>\nMit welcher Formel kann man das Volumen einer Pizza mit dem Radius z und der Dicke a beschreiben?<br \/>\n<strong>Pi<\/strong> * <strong>z<\/strong> * <strong>z<\/strong> * <strong>a<\/strong><br \/>\nWer auch nur ein bi\u00dfchen geschmunzelt hat, sollte sich Kalkofe und die \"Jean P\u00fctz\"-Folge anh\u00f6ren oder Debian-Entwickler werden, die so etwas in ihren Signaturen stehen haben. \ud83d\ude09<br \/>\nNachdem 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\u00fctzliche Programme vorstellen, die man als Paketbauer f\u00fcr 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\u00f6nnen.<br \/>\nMein 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\u00dflich wurde ich im <a href=\"https:\/\/wiki.ubuntu.com\/PbuilderHowto\">Pbuilder-Howto<\/a> von Ubuntu.com f\u00fcndig. <a href=\"https:\/\/www.gambaru.de\/blog\/2011\/12\/12\/einen-masgeschneiderten-dwm-fenstermanager-von-sid-nach-squeeze-backporten\/\">Pbuilder<\/a> funktionierte schon letztes Jahr beim Kompilieren von DWM sehr gut und mit <a href=\"https:\/\/www.gambaru.de\/blog\/2011\/12\/14\/mehrere-pbuilder-und-hooks-rxvt-unicode-256color-von-debian-sid-nach-squeeze-backporten\/\">diesen zwei Skripten<\/a> k\u00f6nnt ihr sofort loslegen.<br \/>\nZum Optimieren des Vorgangs ben\u00f6tigt ihr <a href=\"http:\/\/packages.debian.org\/cowbuilder\">Cowbuilder<\/a>, 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\u00e4ngigkeiten. Apt oder besser dpkg synchronisiert jeden Schreibzugriff auf der Festplatte und wartet bis das System erfolgreich zur\u00fcckmeldet, dass das Paket auch tats\u00e4chlich ordnungsgem\u00e4\u00df installiert wurde. F\u00fcr eine normale Ubuntu- oder Debianinstallation ist das sinnvoll.<br \/>\nJedoch bei einer Chroot-Umgebung, die nach jedem (hoffentlich) erfolgreichen Bauen des Pakets wieder zerst\u00f6rt wird, kann man auf diese Verz\u00f6gerung verzichten. Signalisieren wir dem System einfach, dass der Schreibvorgang immer erfolgreich ist.<br \/>\nHier kommt <a href=\"http:\/\/packages.debian.org\/eatmydata\">Eatmydata<\/a> ins Spiel. Der Name ist Programm. In der <em>.pbuilderrc<\/em> muss folgendes eingetragen werden.<\/p>\n<h2>Eatmydata<\/h2>\n<pre>\nEXTRAPACKAGES=\"eatmydata ccache\"\nif [ -z \"$LD_PRELOAD\" ]; then\n  LD_PRELOAD=\/usr\/lib\/libeatmydata\/libeatmydata.so\nelse\n  LD_PRELOAD=\"$LD_PRELOAD\":\/usr\/lib\/libeatmydata\/libeatmydata.so\nfi\nexport LD_PRELOAD\n<\/pre>\n<p>In die Chroot-Umgebung l\u00e4sst sich auch manuell wechseln und eatmydata installieren.<br \/>\n<code>DIST=sid ARCH=amd64 cowbuilder --login --save<\/code><br \/>\n<code>apt-get install eatmydata<\/code><\/p>\n<h2>ccache<\/h2>\n<p>Ccache speichert die Ergebnisse des Kompilierens zwischen. Das Ergebnis sp\u00fcrt man, wenn man das gleiche Paket mehrmals hintereinander neu erstellen m\u00f6chte, weil Ver\u00e4nderungen notwendig waren.<br \/>\nIn der <em>.pbuilderrc<\/em> steht wiederum:<\/p>\n<pre>\nsudo mkdir -p \/var\/cache\/pbuilder\/ccache\nsudo chmod a+w \/var\/cache\/pbuilder\/ccache\nexport CCACHE_DIR=\"\/var\/cache\/pbuilder\/ccache\"\nexport PATH=\"\/usr\/lib\/ccache:${PATH}\"\nBINDMOUNTS=\"${CCACHE_DIR}\"\n<\/pre>\n<p>Ein Cowbuilder-Chroot erstellt ihr dann mit<br \/>\n<code>DIST=sid ARCH=amd64 cowbuilder --create<\/code><br \/>\nPakete werden mit<br \/>\n<code>DIST=sid ARCH=amd64 cowbuilder --build meinPaket.dsc <\/code><br \/>\ngebaut. Kombiniert das ganze mit dem gestern vorgestellten <a href=\"https:\/\/www.gambaru.de\/blog\/2012\/09\/30\/schroote-dein-linux-debian-in-ubuntu-installieren-teil-2\/\">Schroot<\/a> und ihr habt die perfekte Ausgangsbasis um Pakete sauber und ohne Ballast f\u00fcr euer normales Produktivsystem zu erstellen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich hatte gerade einen f\u00fcrchterlichen Einleitungssatz mit K\u00fchen 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\u00dfchen geschmunzelt hat, sollte &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gambaru.de\/blog\/2012\/09\/30\/unschlagbare-kombination-cowbuilder-eatmydata-und-ccache\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eUnschlagbare Kombination: Cowbuilder, Eatmydata und ccache\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[53,69],"_links":{"self":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/9248"}],"collection":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/comments?post=9248"}],"version-history":[{"count":0,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/9248\/revisions"}],"wp:attachment":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/media?parent=9248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/categories?post=9248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/tags?post=9248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}