Im folgenden möchte ich ein paar Wege aufzeigen, wie man ein Binärpaket mit Debian erzeugt. Das Ganze ist mehr als Merkzettel zu verstehen und ersetzt nicht die offizielle Dokumentation zur Erstellung von Binärpaketen mit Debian. Am Ende finden sich nützliche Links für alle, die sich mehr mit den technischen Details beschäftigen möchten. Außerdem finden sich dort auch Links zu Videos, die den Prozess ausführlich und nachvollziehbar erklären.
Die folgende Übersicht ist in Teilen eine Übersetzung des englischen Howto "How to build a package from source the smart way".
Der bessere Weg - Debianisierte Quellen kompilieren
Der allgemeine Weg ein Binärpaket aus den Quellpaketen zu erstellen läuft immer so ab:
- Zuerst muss der Paketmanager wissen, woher er die Quelldateien beziehen soll, wozu die Datei /etc/apt/sources.list modifiziert wird.
- Dann wird das Quellpaket als normaler Nutzer heruntergeladen.
- Dann wird
dpkg-buildpackage
ausgeführt, um ein .deb Paket zu erstellen. - Und schließlich wird
dpkg -i
benutzt, um das .deb Paket zu installieren.
1. Folgende Zeile in die /etc/apt/sources.list eintragen, sofern man sid installiert hat.
deb-src http://ftp.de.debian.org/debian/ sid main
2. Die Paketabhängigkeiten zum erfolgreichen Kompilieren als root installieren
aptitude update
aptitude install build-essential fakeroot devscripts
aptitude build-dep Paketname
3. Quellen herunterladen und Binärpakete bauen (alle weiteren Befehle als normaler Nutzer ausführen)
mkdir /home/XXXX/tmp/
cd /home/XXXX/tmp/
apt-get source Paketname
cd Paketname-version/
Nun kann die Datei debian/rules oder weitere debianspezifische Dateien wie debian/control oder debain/changelog angepasst werden. Ein wichtiges Programm hierfür ist debchange
welches sich im Paket devscripts befindet.
Nach der Konfiguration wird das .deb Paket erstellt.
dpkg-buildpackage -rfakeroot -us -uc
Mit -us -uc
überspringt man den Schritt, bei dem üblicherweise Debian Pakete vom Paketersteller signiert werden.
4. Installieren
cd /home/XXXX/tmp/
dpkg -i Paketname_Version_Architektur.deb
Nicht debianisierte Quellpakete kompilieren
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ßend mit dem Debianprogramm dh_make
in eine debianisierte Version umgewandelt werden. Die Abhängigkeiten des Pakets müssen dann manuell mit apt installiert werden.
aptitude install dh-make
Als normaler Nutzer wieder:
mkdir /home/XXXX/tmp/
cd /home/XXXX/tmp/
tar -xvf Paketname_Version.tar.gz
mv Paketname_Version/ paketname-version/
mv Paketname_Version.tar.gz paketname_version.orig.tar.gz
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 dh_make
ausführen.
dh_make
dh_make
wird eine Reihe von Fragen stellen und schließlich müssen die Felder für den Paketbetreuer ausgefüllt werden. (das was man mit aptitude show
zu sehen bekommt)
Nachdem dies erledigt ist
dpkg-buildpackage -rfakeroot -us -uc
dpkg -i paketname_version_architektur.deb
Chroot Umgebung und pbuilder
Am besten führt man alle Schritte zum Kompilieren in einer speziellen chroot Umgebung durch, die vom restlichen System getrennt ist und die sich später sehr leicht auch wieder entfernen lässt. Ein weiterer wichtiger Vorteil ist, dass Pakete, die in dieser Umgebung richtig gebaut werden, auch auf anderen Rechnern erfolgreich übersetzt werden können. Der Prozess wird dadurch reproduzierbar.
Ich benutze entweder die debootstrap Methode oder das Programm pbuilder.
1. Pbuilder installieren
aptitude install pbuilder
2. Chroot Umgebung erstellen
pbuilder create --distribution squeeze
Standardmäßig wird ein auf sid basierendes chroot Image erstellt. Die Option --distribution ändert das.
3. Pbuilder aktualisieren
pbuilder update
Falls man längere Zeit nichts mehr kompiliert hat, sollte die chroot Umgebung aktualisiert werden.
4. Quellpaket herunterladen
apt-get source Paket
5. In das Quellverzeichnis wechseln und debianisiertes Quellpaket in chroot Umgebung bauen
pbuilder build Paket_Version.dsc
Die fertigen Binärpakete befinden sich danach in /var/cache/pbuilder/result.
Der herkömmliche Weg - autoconf und automake
In den meisten Quellpaketen befindet sich ein sogenanntes configure Skript, welches automatisch von dem GNU Programm autoconf generiert wird. In der Regel muss man in das Quellverzeichnis wechseln und folgende Befehle ausführen, um ein Binärpaket zu erstellen. Zuvor müssen Abhängigkeiten manuell oder mit aptitude build-dep
installiert werden.
Als Ziel für die Installation wird /usr/local gewählt, /opt ist ebenfalls eine gute Alternative.
./configure --prefix=/usr/local --beliebige Optionen zur Konfiguration
Danach genügt es mit make die Quellen zu übersetzen und mit make install die Binärpakete in das gewählte Zielverzeichnis zu installieren.
make
make install
Für Debian ist es dabei besser make install durch checkinstall 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ängigkeiten berücksichtigen kann.
su -c "checkinstall -D make install"
Ein Beispiel für diese Methode war meine Dillo2 Kompilierung auf dem Toshiba Portege.
Links
Basics of the Debian package management system
Debian New Maintainers' Guide
Ubuntu - Packaging Guide Complete
Videos von der MiniDebConf 2010 in Berlin in Deutsch
Die .ogv Dateien zu Packaging und Advanced Packaging zeigen einen Vortrag zum Thema Paketerstellung mit Debian.
Nach der Lektüre und den Videos sollte man in der Thematik fit sein. 😉
Gute Zusammenfassung, aber eine Anmerkung hätte ich da noch: Sollte man bei den nicht-debianisierten Quellpaketen nicht auch Fakeroot (also die Option -rfakeroot bei dpkg-buildpackage) verwenden, damit die Rechte richtig gesetzt werden?
Du hast Recht. Ich bin mir nicht sicher, ob
dpkg-buildpackage
eine Warnung ausgeben oder abbrechen wird, wenn root Rechte gefordert sind, man aber nur als normaler Nutzer das Paket baut. Als Test hatte ich den Quellcode des Midnight Commander mal debianisiert, wobei sichdpkg-buildpackage
ohne Parameter nicht beschwert hat.Soweit ich die Hilfeseite von dpkg-buildpackage verstehe, wird
-rfakeroot
auch nur dann angewendet, wenn tatsächlich root Rechte benötigt werden. Man kann also nichts falsch machen, wenn man es immer benutzt. Von daher vielen Dank für deinen Hinweis. Habe es im Text korrigiert.Das wäre doch was für das Wiki auf debianforum.de, falls du dort aktiv bist. 😉
Hi Martin!
Beim debianforum war ich in meinen Anfangsjahren bei Linux fleißiger Leser, habe dort aber noch nie etwas gepostet. Ich versuche aber im Wiki auf debian.org etwas mitzuhelfen und an anderen Baustellen wie z.B. Mediathekview im Moment.
Du kannst diesen Artikel gerne per Copy&Paste in das Wiki des Debianforums übertragen, solange er dort unter der gleichen oder einer ähnlichen Lizenz wie CC-BY-SA steht und du einen Link auf den Originalbeitrag setzt. So war dieses Blog hier auch immer gedacht.
Ich möchte mich vor allem dafür bedanken das dieser Artikel in Deutsch ist.
Sehr entäuscht bin ich meisst darüber das solche Artikel fast aussschliesslich in Englisch verfügbar sind. Es ist eine Sparche die mir nicht zugänglich wurde.
Ich möchte mich nicht bei jeder Gelegenheit Outen das ich nie eine Fremdspache erlernt habe.
Es tut mir immer leid, weil ich auch der Meinung bin das es einige andere auch immer schwer haben. Das merke ich wenn ich dann doch mal das Thema anspreche. Vielen geht es ähnlich wie mir.
lg Emmerich
Gern geschehen. Ich denke auch, dass es die Materie leichter zugänglich macht, wenn man es in der jeweiligen Muttersprache erklärt. Englisch lässt sich zwar bei einem internationalen Projekt wie Debian nicht vermeiden, aber wie man ein spezifisches Problem lösen kann, das lässt sich auch gut in Deutsch erklären. 🙂