{"id":2535,"date":"2011-06-11T19:25:54","date_gmt":"2011-06-11T17:25:54","guid":{"rendered":"https:\/\/www.gambaru.de\/blog\/?p=2535"},"modified":"2020-01-05T01:24:59","modified_gmt":"2020-01-05T00:24:59","slug":"wie-man-debian-pakete-aus-den-quellen-baut","status":"publish","type":"post","link":"https:\/\/gambaru.de\/blog\/2011\/06\/11\/wie-man-debian-pakete-aus-den-quellen-baut\/","title":{"rendered":"Wie man Debian-Pakete aus den Quellen baut"},"content":{"rendered":"<p>Im folgenden m\u00f6chte ich ein paar Wege aufzeigen, wie man ein Bin\u00e4rpaket mit Debian erzeugt. Das Ganze ist mehr als Merkzettel zu verstehen und ersetzt nicht die offizielle Dokumentation zur Erstellung von Bin\u00e4rpaketen mit Debian. Am Ende finden sich n\u00fctzliche Links f\u00fcr alle, die sich mehr mit den technischen Details besch\u00e4ftigen m\u00f6chten. Au\u00dferdem finden sich dort auch Links zu Videos, die den Prozess ausf\u00fchrlich und nachvollziehbar erkl\u00e4ren.<br \/>\nDie folgende \u00dcbersicht ist in Teilen eine \u00dcbersetzung des englischen Howto \"<a href=\"http:\/\/forums.debian.net\/viewtopic.php?f=16&amp;t=38976\">How to build a package from source the smart way<\/a>\".<\/p>\n<h2>Der bessere Weg - Debianisierte Quellen kompilieren<\/h2>\n<p>Der allgemeine Weg ein Bin\u00e4rpaket aus den Quellpaketen zu erstellen l\u00e4uft immer so ab:<\/p>\n<ol>\n<li>Zuerst muss der Paketmanager wissen, woher er die Quelldateien beziehen soll, wozu die Datei <em>\/etc\/apt\/sources.list<\/em> modifiziert wird.<\/li>\n<li>Dann wird das Quellpaket als <strong>normaler Nutzer<\/strong> heruntergeladen.<\/li>\n<li>Dann wird <code>dpkg-buildpackage<\/code> ausgef\u00fchrt, um ein .deb Paket zu erstellen.<\/li>\n<li>Und schlie\u00dflich wird <code>dpkg -i<\/code> benutzt, um das .deb Paket zu installieren.<\/li>\n<\/ol>\n<p><strong>1.<\/strong> Folgende Zeile in die \/etc\/apt\/sources.list eintragen, sofern man sid installiert hat.<\/p>\n<blockquote><p>\ndeb-src http:\/\/ftp.de.debian.org\/debian\/ sid main<\/p><\/blockquote>\n<p><strong>2.<\/strong> Die Paketabh\u00e4ngigkeiten zum erfolgreichen Kompilieren als root installieren<\/p>\n<blockquote><p>\naptitude update<br \/>\naptitude install build-essential fakeroot devscripts<br \/>\naptitude build-dep Paketname<\/p><\/blockquote>\n<p><strong>3. <\/strong> Quellen herunterladen und Bin\u00e4rpakete bauen (alle weiteren Befehle als <strong>normaler Nutzer<\/strong> ausf\u00fchren)<\/p>\n<blockquote><p>mkdir \/home\/XXXX\/tmp\/<br \/>\ncd \/home\/XXXX\/tmp\/<br \/>\napt-get source Paketname<br \/>\ncd Paketname-version\/<\/p><\/blockquote>\n<p>Nun kann die Datei <strong>debian\/rules<\/strong> oder weitere debianspezifische Dateien wie <strong>debian\/control<\/strong> oder <strong>debain\/changelog<\/strong> angepasst werden. Ein wichtiges Programm hierf\u00fcr ist <code>debchange<\/code> welches sich im Paket <strong>devscripts<\/strong> befindet.<br \/>\nNach der Konfiguration wird das .deb Paket erstellt.<\/p>\n<blockquote><p>dpkg-buildpackage -rfakeroot -us -uc<\/p><\/blockquote>\n<p>Mit <code>-us -uc<\/code> \u00fcberspringt man den Schritt, bei dem \u00fcblicherweise Debian Pakete vom Paketersteller signiert werden.<br \/>\n<strong>4.<\/strong> Installieren<\/p>\n<blockquote><p>cd \/home\/XXXX\/tmp\/<br \/>\ndpkg -i Paketname_Version_Architektur.deb<\/p><\/blockquote>\n<h2>Nicht debianisierte Quellpakete kompilieren<\/h2>\n<p>Obwohl Debian ein riesiges Paketarchiv hat, kann es vorkommen, dass es zu einem Paket noch keine angepasste Debianversion gibt. Hierzu muss also das Original-Tarball mit den Quellen von der Projektseite heruntergeladen werden und anschlie\u00dfend mit dem Debianprogramm <code>dh_make<\/code> in eine debianisierte Version umgewandelt werden. Die Abh\u00e4ngigkeiten des Pakets m\u00fcssen dann manuell mit apt installiert werden.<\/p>\n<blockquote><p>\naptitude install dh-make<\/p><\/blockquote>\n<p>Als <strong>normaler Nutzer<\/strong> wieder:<\/p>\n<blockquote><p>\nmkdir \/home\/XXXX\/tmp\/<br \/>\ncd \/home\/XXXX\/tmp\/<br \/>\ntar -xvf Paketname_Version.tar.gz<br \/>\nmv Paketname_Version\/ paketname-version\/<br \/>\nmv Paketname_Version.tar.gz paketname_version.orig.tar.gz<\/p><\/blockquote>\n<p>Die Benennung des Pakets und die Unterstriche sind wichtig, damit sie Debians Konventionen entsprechen. Anderenfalls wird dh_make eine Fehlermeldung ausgeben. Danach in das entpackte Verzeichnis wechseln und <code>dh_make<\/code> ausf\u00fchren.<\/p>\n<blockquote><p>dh_make<\/p><\/blockquote>\n<p><code>dh_make<\/code> wird eine Reihe von Fragen stellen und schlie\u00dflich m\u00fcssen die Felder f\u00fcr den Paketbetreuer ausgef\u00fcllt werden. (das was man mit <code>aptitude show<\/code> zu sehen bekommt)<br \/>\nNachdem dies erledigt ist<\/p>\n<blockquote><p>dpkg-buildpackage -rfakeroot -us -uc<br \/>\ndpkg -i paketname_version_architektur.deb<\/p><\/blockquote>\n<h2>Chroot Umgebung und pbuilder<\/h2>\n<p>Am besten f\u00fchrt man alle Schritte zum Kompilieren in einer speziellen chroot Umgebung durch, die vom restlichen System getrennt ist und die sich sp\u00e4ter sehr leicht auch wieder entfernen l\u00e4sst. Ein weiterer wichtiger Vorteil ist, dass Pakete, die in dieser Umgebung richtig gebaut werden, auch auf anderen Rechnern erfolgreich \u00fcbersetzt werden k\u00f6nnen. Der Prozess wird dadurch reproduzierbar.<br \/>\nIch benutze entweder die <a href=\"https:\/\/www.gambaru.de\/blog\/?p=1343\">debootstrap Methode<\/a> oder das Programm <a href=\"http:\/\/www.netfort.gr.jp\/~dancer\/software\/pbuilder-doc\/pbuilder-doc.html\">pbuilder<\/a>.<br \/>\n<strong>1.<\/strong> Pbuilder installieren<\/p>\n<blockquote><p>aptitude install pbuilder<\/p><\/blockquote>\n<p><strong>2.<\/strong> Chroot Umgebung erstellen<\/p>\n<blockquote><p>\npbuilder create --distribution squeeze<\/p><\/blockquote>\n<p>Standardm\u00e4\u00dfig wird ein auf sid basierendes chroot Image erstellt. Die Option --distribution \u00e4ndert das.<br \/>\n<strong>3.<\/strong> Pbuilder aktualisieren<\/p>\n<blockquote><p>\npbuilder update<\/p><\/blockquote>\n<p>Falls man l\u00e4ngere Zeit nichts mehr kompiliert hat, sollte die chroot Umgebung aktualisiert werden.<br \/>\n<strong>4. <\/strong> Quellpaket herunterladen<\/p>\n<blockquote><p>apt-get source Paket<\/p><\/blockquote>\n<p><strong>5.<\/strong> In das Quellverzeichnis wechseln und debianisiertes Quellpaket in chroot Umgebung bauen<\/p>\n<blockquote><p>pbuilder build Paket_Version.dsc<\/p><\/blockquote>\n<p>Die fertigen Bin\u00e4rpakete befinden sich danach in <em>\/var\/cache\/pbuilder\/result<\/em>.<\/p>\n<h2>Der herk\u00f6mmliche Weg - autoconf und automake<\/h2>\n<p>In den meisten Quellpaketen befindet sich ein sogenanntes <strong>configure<\/strong> Skript, welches automatisch von dem GNU Programm autoconf generiert wird. In der Regel muss man in das Quellverzeichnis wechseln und folgende Befehle ausf\u00fchren, um ein Bin\u00e4rpaket zu erstellen. Zuvor m\u00fcssen Abh\u00e4ngigkeiten manuell oder mit <code>aptitude build-dep<\/code> installiert werden.<br \/>\nAls Ziel f\u00fcr die Installation wird \/usr\/local gew\u00e4hlt, \/opt ist ebenfalls eine gute Alternative.<\/p>\n<blockquote><p>.\/configure --prefix=\/usr\/local --beliebige Optionen zur Konfiguration<\/p><\/blockquote>\n<p>Danach gen\u00fcgt es mit <strong>make<\/strong> die Quellen zu \u00fcbersetzen und mit <strong>make install<\/strong> die Bin\u00e4rpakete in das gew\u00e4hlte Zielverzeichnis zu installieren.<\/p>\n<blockquote><p>\nmake<br \/>\nmake install<\/p><\/blockquote>\n<p>F\u00fcr Debian ist es dabei besser <em>make install<\/em> durch <a href=\"http:\/\/www.asic-linux.com.mx\/~izto\/checkinstall\/\">checkinstall<\/a> zu ersetzen. Checkinstall erstellt ein .deb Paket und merkt sich wohin die Pakete installiert werden. Der Nachteil ist, dass es weder die Quelldateien debianisiert noch Paketabh\u00e4ngigkeiten ber\u00fccksichtigen kann.<\/p>\n<blockquote><p>su -c \"checkinstall -D make install\"<\/p><\/blockquote>\n<p>Ein Beispiel f\u00fcr diese Methode war meine <a href=\"https:\/\/www.gambaru.de\/blog\/?p=526\">Dillo2 Kompilierung<\/a> auf dem Toshiba Portege.<\/p>\n<h2>Links<\/h2>\n<p><a href=\"http:\/\/www.debian.org\/doc\/FAQ\/ch-pkg_basics.en.html\">Basics of the Debian package management system<\/a><br \/>\n<a href=\"http:\/\/www.debian.org\/doc\/manuals\/maint-guide\/\">Debian New Maintainers' Guide<\/a><br \/>\n<a href=\"https:\/\/wiki.ubuntu.com\/PackagingGuide\/Complete\">Ubuntu - Packaging Guide Complete<\/a><br \/>\n<a href=\"http:\/\/meetings-archive.debian.net\/pub\/debian-meetings\/2010\/minidebconf-berlin\/\">Videos von der MiniDebConf 2010 in Berlin in Deutsch<\/a><br \/>\nDie .ogv Dateien zu Packaging und Advanced Packaging zeigen einen Vortrag zum Thema Paketerstellung mit Debian.<br \/>\nNach der Lekt\u00fcre und den Videos sollte man in der Thematik fit sein. \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im folgenden m\u00f6chte ich ein paar Wege aufzeigen, wie man ein Bin\u00e4rpaket mit Debian erzeugt. Das Ganze ist mehr als Merkzettel zu verstehen und ersetzt nicht die offizielle Dokumentation zur Erstellung von Bin\u00e4rpaketen mit Debian. Am Ende finden sich n\u00fctzliche Links f\u00fcr alle, die sich mehr mit den technischen Details besch\u00e4ftigen m\u00f6chten. Au\u00dferdem finden sich &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gambaru.de\/blog\/2011\/06\/11\/wie-man-debian-pakete-aus-den-quellen-baut\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eWie man Debian-Pakete aus den Quellen baut\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,202],"_links":{"self":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/2535"}],"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=2535"}],"version-history":[{"count":1,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/2535\/revisions"}],"predecessor-version":[{"id":11100,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/2535\/revisions\/11100"}],"wp:attachment":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/media?parent=2535"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/categories?post=2535"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/tags?post=2535"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}