Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Ubuntu 14.04 Trusty Tahr
Mit pbuilder lässt sich eine chroot-Umgebung zum Paketbau erstellen. Für Maintainer von Ubuntu oder Debianpaketen wird dieses Vorgehen empfohlen. Man kann auch ohne pbuilder Pakete bauen, aber man muss alle build dependencies des Paketes auf dem laufenden System installieren. Dadurch wird es möglich Pakete zu erstellen, welche nicht nur auf seinem eigenen Computer funktionieren, sonder auch auf anderen. Falls man LVM verwendet, kann man die Erstellung der chroot-Umgebung beschleunigen (→ SbuildLVMHowto ).
Im folgenden wird überwiegend der Befehl pbuilder-dist
verwendet, welche gegenüber dem ursprünglichen Befehl pbuilder
komfortabler das Arbeiten mit mehreren unterschiedliche Architekturen und Versionen von Debian und Ubuntu unterstützt. Außerdem wird angenommen, dass Ubuntu 14.04 Trusty Tahr installiert ist. Falls man eine andere Version besitzt ersetzt man trusty gegen den Codenamen der verwendeten Distribution.
Die Übersetzung des englischen PbuilderHowto befindet sich im Archiv.
Zunächst werden die nötigen Pakete installiert [1] wobei devscripts nicht unbedingt nötig ist, jedoch für den ernsthaften Paketbau empfohlen wird.
pbuilder
ubuntu-dev-tools
debootstrap
devscripts
mit apturl
Paketliste zum Kopieren:
sudo apt-get install pbuilder ubuntu-dev-tools debootstrap devscripts
sudo aptitude install pbuilder ubuntu-dev-tools debootstrap devscripts
Der Befehl pbuilder-dist
ist folgendermaßen aufgebaut:
pbuilder-dist DISTRIBUTION [ARCHITEKTUR] OPERATION [OPTION]
Zuallererst öffnet man ein Terminal [2] und erstellt mit folgendem Befehl einen Archiv mit der chroot-Umgebung zum Paketbau.
pbuilder-dist trusty create
Nach erfolgtem Paketbau finden sich die Binär und Quellpakete unter ~/pbuilder/trusty_result/.
Man kann für alle unterstützten und in Entwicklung befindlichen Ubuntu und Debian Versionen jeweils eine chroot-Umgebung erstellen und diese parallel verwenden.
pbuilder-dist DISTRIBUTION create
DISTRIBUTION
muss man dann durch den entsprechenden Codenamen der gewünschten Version ersetzten.
Distributionen | |
Distribution | Codename |
Ubuntu 12.04 | precise |
Ubuntu 14.04 | trusty |
Ubuntu 15.04 | vivid |
Debian Sid | sid |
Debian 8 | jessie |
Es ist zusätzlich möglich chroot-Umgebung für 32bit-Betriebsysteme zu erstellen. Dafür muss man einfach "i386" hinter dem Namen der zu erstellenden Version setzten:
pbuilder-dist DISTRIBUTION i386 create
Mithilfe von QEMU ist es möglich auch Pakete für Prozessoren auf ARM-Basis zu erstellen. Dafür benötigt man noch folgendes Paket:
qemu-user-static (universe)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install qemu-user-static
sudo aptitude install qemu-user-static
Nach der Installation kann man Pakete für die Architekturen "armhf", "arm64" und "armel" (nur Debian) bauen. Die dafür benötigten chroot-Umgebungen erstellt man folgendermaßen:
pbuilder-dist DISTRIBUTION ARCHITEKTUR create
Das anschließende Bauen der Pakete unterscheidet sich nicht vom Bau von Paketen für die eigene Architektur. Der einzige Nachteil ist, dass die Kompilierung des Programms wegen der Nutzung von QEMU mehr Zeit beansprucht.
Das folgende Beispiel soll zeigen, wie man mithilfe von pbuilder-dist
schon existierende Debian-Pakete neu bauen kann, um diese beispielsweise selbstständig zu patchen.
Zunächst müssen die Quelltext-Paketquellen (deb-src) eingebunden [4] werden.
Anschließend öffnet man ein Terminal [2] und führt folgenden Befehl mit root-Rechten[3] aus, um die Paketquellen zu aktualisieren:
sudo apt-get update
Im folgenden werden die Quelltexte von bc, einem einfachen Taschenrechner heruntergeladen:
apt-get source bc
Abschließend wird mit dem nächsten Befehl das Paket in eine vorbereiteten chroot-Umgebung gebaut:
pbuilder-dist trusty build *.dsc
Bevor man mithilfe von pbuilder-dist
ein Debian-Paket für einen neues Programm bauen kann, muss man erst – falls diese noch nicht existieren – die dafür benötigten Debian-Dateien erstellen. Dies wird ausführlich im Artikel Grundlagen der Paketerstellung erläutert[5]. Falls man diese Dateien erfolgreich erstellt hat, öffnet man ein Terminal, wechselt in das Projektverzeichnis, in dem der Ordner mit dem Namen "Debian" liegt und führt folgenden Befehl aus
Nachdem alle erforderlichen Dateien vorhanden sind, werden die benötigten Dateien mit debuild
erzeugt:
debuild -S -sa
Dieses Hilfsprogramm kümmert sich gleich um drei Punkte:
es ruft dpkg-buildpackage
zur Paketerstellung auf
dann wird der Paketbau mit lintian
kontrolliert
Zum Schluss erfolgt die Signierung mit debsign
Dabei werden mehrere Dateien im übergeordneten Ordner erzeugt, u.a. Projektname-Version.dsc und Projektname-Version.changes. War die Erstellung des Projekts nicht erfolgreich, müssen mit den Hinweisen von lintian die Fehler ermittelt und korrigiert werden.
Anschließend wechselt man in den übergeordneten Ordner und lässt das Paket mithilfe von pbuilder-dist
bauen:
pbuilder-dist trusty build *.dsc
Das fertige Paket befindet sich – nach dem erfolgreichen Bau – unter ~/pbuilder/trusty_result/.
Es wird empfohlen den chroot täglich vor jedem Bau zu aktualisieren:
pbuilder-dist trusty update
Das Einbinden eines PPAs[6] ist etwas komplizierter und wird hierbei am Beispiel des GNOME3 PPAs erläutert.
Möchte man ein PPA in eine chroot-Umgebung einbinden, dann braucht man als erstes den Signierschlüssel des PPAs. Diesen findet man auf der Launchpad-Seite des PPAs unter "Technical details about this PPA" → "Signing key:". In diesen Beispiel erhält man die Zeichenkette "1024R/3B1510FD". Man benötigt davon nur die Zeichenkombination hinter dem Schrägstrich "3B1510FD".
Um diesen Signierschlüssel nun in die chroot-Umgebung zu importieren meldet man sich zuerst bei dieser an:
pbuilder-dist trusty login --save-after-login
und fügt den Schlüssel mit folgendem Befehl hinzu:
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B1510FD
Als Letztes verlässt man die chroot-Umgebung wieder.
exit
Nun kann das PPA mit folgendem Befehl hinzugefügt werden:
pbuilder-dist trusty update --override-config --othermirror "deb http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu trusty main"
Nun kann man wie oben beschrieben seine Pakete erstellen und dabei auf die eingebundenen PPAs zugreifen.
Haben sich die Pakete im PPA verändert, dann empfiehlt es sich die chroot-Umgebung mit vorherigen Befehl zu aktualisieren.
Im folgenden noch ein paar Beispiele, wie pbuilder-dist
verwendet werden kann:
Eine Umgebung für Ubuntu Vivid
pbuilder-dist vivid create
Eine Umgebung für Debian sid
pbuilder-dist sid create
Eine Umgebung für Ubuntu Trusty mit i386-Architektur
pbuilder-dist trusty i386 create
Die chroot-Umgebung für Precise aktualisieren
pbuilder-dist precise update
Ein Paket mit Ubuntu Trusty als chroot-Umgebung bauen
pbuild-dist trusty build *.dsc
Ein Paket mit Ubuntu Utopic als chroot-Umgebung und i386-Architektur bauen
pbuild-dist utopic i386 build *.dsc
Grundlagen der Paketerstellung – Grundlagendartikel
Launchpad/PPA – Pakete in Lauchpad hochladen
pbuilder-dist – Ubuntu Manpage
Diese Revision wurde am 10. Oktober 2015 10:44 von Justin-Time erstellt.