[[Vorlage(Fortgeschritten)]] [[Vorlage(Archiviert, )]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Paketquellen freischalten: Bearbeiten von Paketquellen] [:Grundlagen der Paketerstellung:] [:Launchpad/PPA:Launchpad PPA einrichten] }}} [[Inhaltsverzeichnis()]] 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 (→ [ubuntu:SbuildLVMHowto:] {en}). 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 [ubuntu:PbuilderHowto:] {en} befindet sich im [:Archiv/pBuilder: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. {{{#!vorlage Paketinstallation pbuilder ubuntu-dev-tools debootstrap devscripts }}} = Syntax = Der Befehl `pbuilder-dist` ist folgendermaßen aufgebaut: {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Paketinstallation qemu-user-static, universe }}} 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo apt-get update }}} Im folgenden werden die Quelltexte von '''bc''', einem einfachen Taschenrechner heruntergeladen: {{{#!vorlage Befehl apt-get source bc }}} Abschließend wird mit dem nächsten Befehl das Paket in eine vorbereiteten chroot-Umgebung gebaut: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl debuild -S -sa }}} Dieses Hilfsprogramm kümmert sich gleich um drei Punkte: 1. es ruft `dpkg-buildpackage` zur Paketerstellung auf 1. dann wird der Paketbau mit `lintian` kontrolliert 1. 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl pbuilder-dist trusty update }}} = Pakete aus einem PPA einbinden = Das Einbinden eines PPAs[6] ist etwas komplizierter und wird hierbei am Beispiel des [launchpad:~gnome3-team/+archive/ubuntu/gnome3: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 [launchpad:~gnome3-team/+archive/ubuntu/gnome3: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: {{{#!vorlage Befehl pbuilder-dist trusty login --save-after-login }}} und fügt den Schlüssel mit folgendem Befehl hinzu: {{{#!vorlage Befehl apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B1510FD }}} Als Letztes verlässt man die chroot-Umgebung wieder. {{{#!vorlage Befehl exit }}} Nun kann das PPA mit folgendem Befehl hinzugefügt werden: {{{#!vorlage Befehl 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. {{{#!vorlage 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:] {{{#!vorlage Befehl pbuilder-dist vivid create }}} Eine Umgebung für Debian sid {{{#!vorlage Befehl pbuilder-dist sid create }}} Eine Umgebung für Ubuntu [:Trusty:] mit i386-Architektur {{{#!vorlage Befehl pbuilder-dist trusty i386 create }}} Die chroot-Umgebung für [:Precise:] aktualisieren {{{#!vorlage Befehl pbuilder-dist precise update }}} Ein Paket mit Ubuntu [:Trusty:] als chroot-Umgebung bauen {{{#!vorlage Befehl pbuild-dist trusty build *.dsc }}} Ein Paket mit Ubuntu [:Utopic:] als chroot-Umgebung und i386-Architektur bauen {{{#!vorlage Befehl pbuild-dist utopic i386 build *.dsc }}} = Weblinks = * [:Grundlagen der Paketerstellung:] – Grundlagendartikel * [:Launchpad/PPA:] – Pakete in Lauchpad hochladen * [http://pbuilder.alioth.debian.org/pbuilder-doc.html pbuilder Handbuch] ([http://pbuilder.alioth.debian.org/pbuilder-doc.pdf PDF-Download]) {en} * [man:pbuilder-dist:] {en} – Ubuntu Manpage #tag: Paketverwaltung, Paketbau