ubuntuusers.de

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.

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

Paketliste zum Kopieren:

sudo apt-get install pbuilder ubuntu-dev-tools debootstrap devscripts 

Oder mit apturl die Pakete 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)

Paketliste zum Kopieren:

sudo apt-get install qemu-user-static 

Oder mit apturl die Pakete 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:

  1. es ruft dpkg-buildpackage zur Paketerstellung auf

  2. dann wird der Paketbau mit lintian kontrolliert

  3. 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/.

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 

Diese Revision wurde am 9. Februar 2020 19:26 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Paketverwaltung, Paketbau