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. 😉