pbuilder-dist
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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.
Installation¶
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
Befehl zum Installieren der Pakete:
sudo apt-get install pbuilder ubuntu-dev-tools debootstrap devscripts
Oder mit apturl installieren, Link: apt://pbuilder,ubuntu-dev-tools,debootstrap,devscripts
Syntax¶
Der Befehl pbuilder-dist
ist folgendermaßen aufgebaut:
pbuilder-dist DISTRIBUTION [ARCHITEKTUR] OPERATION [OPTION]
Erstellen der Umgebung¶
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/.
Umgebung für andere Versionen erstellen¶
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.
i386-Pakete auf einem 64-bit System bauen¶
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
ARM-Pakete auf einem 64-bit System bauen¶
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)
Befehl zum Installieren der Pakete:
sudo apt-get install qemu-user-static
Oder mit apturl installieren, Link: apt://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.
Bestehendes Paket neu bauen¶
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
Pakete für neue Programme bauen¶
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 aufdann wird der Paketbau mit
lintian
kontrolliertZum 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/.
chroot aktualisieren¶
Es wird empfohlen den chroot täglich vor jedem Bau zu aktualisieren:
pbuilder-dist trusty update
Pakete aus einem PPA einbinden¶
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.
Hinweis:
Haben sich die Pakete im PPA verändert, dann empfiehlt es sich die chroot-Umgebung mit vorherigen Befehl zu aktualisieren.
Beispiele¶
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
Weblinks¶
Grundlagen der Paketerstellung – Grundlagendartikel
Launchpad/PPA – Pakete in Lauchpad hochladen
pbuilder-dist 🇬🇧 – Ubuntu Manpage