Pbuilder-Benutzerhandbuch

Aufruf und Betrieb

Junichi Uekawa

This documentation is a work in progress; it might be incomplete and outdated.


Inhaltsverzeichnis

1. Einführung in Pbuilder
1. Ziele von Pbuilder
2. Pbuilder benutzen
1. Einen Basis-Chroot-Tarball erstellen
2. Das base.tgz aktualisieren
3. Ein Paket unter Benutzung von base.tgz bauen
4. Facilitating Debian Developers' typing: pdebuild
5. Konfigurationsdateien
6. Pakete innerhalb der Chroot bauen ohne Root zu sein
7. Pbuilder zur Rückportierung benutzen
8. Massenhaft Pakete bauen
9. Automatische Rückportierungsskripte
10. Pbuilder für das automatisierte Testen von Paketen benutzen
11. Pbuilder benutzen, um Builds mit alternativen Kompilern zu testen
3. User Mode Linux mit Pbuilder benutzen
1. User Mode Linux konfigurieren
2. Rootstrap konfigurieren
3. Pbuilder-uml konfigurieren
4. Betrachtungen, um Pbuilder-user-mode-linux auszuführen
5. Paralleles Ausführen von Pbuilder-user-mode-linux
6. Pbuilder-user-mode-linux als Wrapper-Skript benutzen, um eine virtuelle Maschine zu starten
4. Häufig gestellte Fragen
1. Fehlschlagen des Erstellens mit Pbuilder
2. Verzeichnisse, bei denen kein Bind-Mount möglich ist
3. In Pbuilder anmelden, um Fehlschlagen des Builds zu untersuchen
4. In Pbuilder anmelden, um die Umgebung zu ändern
5. BUILDRESULTUID für Sudo-Sitzungen setzen
6. Anmerkungen zum Gerauch von $TMPDIR
7. Ein Kürzel erstellen, um pbuilder mit einer speziellen Distribution auszuführen.
8. Using environmental variables for running pbuilder for a specific distribution
9. Spezielle Listen von Apt-Quellen und lokale Pakete verwenden
10. How to get pbuilder to run apt-get update before trying to satisfy build-dependencies
11. Unterschiedliche Eingabeaufforderungen innerhalb der Pbuilder-Anmeldung
12. Eine Chroot-Erinnerung erstellen
13. /var/cache/apt/archives für den Paket-Zwischenspeicher benutzen
14. Pbuilder auf Debian-Stable-Releases zurückportiert
15. Warnung, dass LOGNAME nicht definiert wurde
16. »Build-Conflikt« mit wesentlichem Paket nicht möglich
17. Vermeiden der Nachricht »ln: Ungültiger Link über Gerätegrenzen hinweg«
18. Fakechroot benutzen
19. Debconf innerhalb von Pbuilder-Sitzungen benutzen
20. »nodev«-Einhängeoptionen behindern Pbuilder-Aktivität
21. Pbuilder ist langsam
22. Pdebuild zum Fördern eines Pakets benutzen
23. Warum liegt in ../ eine source.changes-Datei?
24. Die Modi »amd64« und »i386«
25. Tmpfs für »buildplace« benutzen
26. Svn-buildpackage zusammen mit Pbuilder benutzen
5. Fehlerbehebung und Entwicklung
1. Fehler berichten
2. Mailingliste
3. IRC-Kanal
4. Informationen für Pbuilder-Entwickler
6. Andere Verwendungen von Pbuilder
1. Pbuilder für kleine Experimente benutzen
2. Kleine Programme innerhalb der Chroot ausführen
7. Experimental or wishlist features of pbuilder
1. LVM benutzen
2. Cowdancer benutzen
3. Pbuilder ohne tar.gz verwenden
4. PBuilder in einem Vserver verwenden
5. Gebrauch von Ccache
8. Referenzmaterial
1. Verzeichnisstruktur außerhalb der Chroot
2. Verzeichnisstruktur innerhalb der Chroot
9. Nebensächliche archäologische Einzelheiten
1. Dokumentations-Chronik
2. Möglicherweise ungenaue Hintergrundgeschichte von Pbuilder
2.1. Zeit vor Pbuilder
2.2. Geburt von Pbuilder
2.3. Und sein zweites Lebensjahr
2.4. Das fünfte Jahr von Pbuilder

Tabellenverzeichnis

5.1. Verzeichnisstruktur der Test-Suite
8.1. Verzeichnisstruktur außerhalb der Chroot
8.2. Verzeichnisstruktur innerhalb der Chroot

Kapitel 1. Einführung in Pbuilder

Inhaltsverzeichnis

1. Ziele von Pbuilder

1. Ziele von Pbuilder

pbuilder stands for Personal Builder, and it is an automatic Debian Package Building system for personal development workstation environments. pbuilder aims to be an easy-to-set-up system for auto-building Debian packages inside a clean-room environment, so that it is possible to verify that a package can be built on most Debian installations. The clean-room environment is achieved through the use of a base chroot image, so that only minimal packages will be installed inside the chroot.

Die Distribution Debian besteht aus freier Software, die zusammen mit Quellen weitergegeben wird. Der Quellkode innerhalb Debians Bereich »main« muss innerhalb Debian-»main« gebaut werden, nur mit den explizit angegebenen installierten Build-Abhängigkeiten.

Das vorrangige Ziel von pbuilder unterscheidet sich von anderen automatischen Bausystemen in Debian darin, dass es nicht das Ziel hat, so viele Pakete wie möglich zu bauen. Es versucht nicht abzuschätzen, was ein Paket benötigt und probiert, wenn eine Auswahl zu treffen ist, in den meisten Fällen die schlechtest mögliche Auswahl von allen.

Auf diese Art versucht pbuilder sicherzustellen, dass Pakete, die mit pbuilder getestet wurden, auf den meisten Debian-Installationen ordentlich gebaut werden, was hoffentlich in einer guten umfassenden Erstellbarkeit von Debian aus den Quellen resultiert.

The goal of making Debian buildable from source is somewhat accomplished, and has seen good progress. In the past age of Debian 3.0, there were many problems when building from source. More recent versions of Debian are much better.

Kapitel 2. Pbuilder benutzen

Es gibt mehrere einfache Befehle für den Betrieb. Normalerweise werden die Befehle pbuilder create, pbuilder update und pbuilder build benutzt. Sie werden nun nacheinander vorgestellt.

1. Einen Basis-Chroot-Tarball erstellen

pbuilder create will create a base chroot image tar-ball (base.tgz). All other commands will operate on the resulting base.tgz. If the Debian release to be created within chroot is not going to be "sid" (which is the default), the distribution code-name needs to be specified with the --distribution command-line option.

debootstrap [1] is used to create the bare minimum Debian installation, and then build-essential packages are installed on top of the minimum installation using the apt-get inside the chroot.

For more thorough documentation of command-line options, see the pbuilder(8) manual page. Some configuration will be required for /etc/pbuilderrc for the mirror site [2] to use, and proxy configuration may be required to allow access through HTTP. See the pbuilderrc(5) manual page for details.

2. Das base.tgz aktualisieren

pbuilder update will update the base.tgz. It will extract the chroot, invoke apt-get update and apt-get dist-upgrade inside the chroot, and then recreate the base.tgz (the base tar-ball).

It is possible to switch the distribution for which the base.tgz is targeted at at this point. Specify --distribution sid --override-config to change the distribution to sid. [3]

For more thorough documentation of command-line options, see the pbuilder(8) manual page.

3. Ein Paket unter Benutzung von base.tgz bauen

Um ein Paket innerhalb der Chroot zu bauen, rufen Sie pbuilder build wasauchimmer.dsc auf. pbuilder wird das base.tgz in ein temporäres Verzeichnis extrahieren, mit Chroot in das Verzeichnis wechseln, die Build-Abhängigkeiten erfüllen und das Paket bauen. Das gebaute Paket wird in das Verzeichnis verschoben, das mit der Befehlszeilenoption --buildresult angegeben wurde.

Die Option --basetgz kann benutzt werden, um anzugeben, welche base.tgz benutzt werden soll.

pbuilder will extract a fresh base chroot image from base.tgz. (base.tgz is created with the pbuilder create, and updated with the pbuilder update). The chroot is populated with build-dependencies by parsing debian/control and invoking apt-get.

For more thorough documentation of command-line options, see the pbuilder(8) manual page

4. Facilitating Debian Developers' typing: pdebuild

pdebuild is a little wrapper script that does the most frequent of all tasks. A Debian Developer may try to run debuild, and build a package inside a Debian source directory. pdebuild will allow similar control, and allow the package to be built inside the chroot, to check that the current source tree will build happily inside the chroot.

pdebuild ruft zum Bau der Quellpakete dpkg-source und dann für das resultierende Quellpaket pbuilder auf. Anders als bei Debuild können die resultierenden Deb-Dateien jedoch im mit --buildresult angegebenen Verzeichnis gefunden werden.

See the pdebuild(1) manual page for more details.

Es gibt einen etwas anderen Betriebsmodus, der in pdebuild seit Version 0.97 verfügbar ist. pdebuild führt debian/rules clean normalerweise außerhalb der Chroot aus; es ist jedoch möglich, dieses Verhalten mit --use-pdebuild-internal zu ändern, damit es innerhalb der Chroot läuft. Es wird versuchen, das Arbeitsverzeichnis innerhalb der Chroot einzuhängen und dpkg-buildpackage darin auszuführen. Es hat die folgenden Merkmale und ist noch nicht der Standardbetriebsmodus.

  • Satisfies build-dependency inside the chroot before creating source package (which is a good point that default pdebuild could not do).

  • Das Arbeitsverzeichnis wird von innerhalb der Chroot geändert.

  • Bauen mit pdebuild garantiert nicht, dass dies mit pbuilder funktioniert.

  • Falls das Erstellen des Quellpakets fehlschlägt, ist die Sitzung vergeudet, die die Chroot verwendet (Erstellen einer Chroot nimmt etwas Zeit in Anspruch, was mit Cowdancer verbessert werden sollte).

  • funktioniert nicht auf die gleiche Weise wie gewohnt; zum Beispiel hat --buildresult keine Auswirkungen.

  • The build inside chroot is run with the current user outside chroot.

5. Konfigurationsdateien

Es ist möglich, alle Einstellungen mit Befehlszeilenoptionen anzugeben. Wegen des Eingabekomforts ist es jedoch möglich, eine Konfigurationsdatei zu benutzen.

/etc/pbuilderrc and ${HOME}/.pbuilderrc are read in when pbuilder is invoked. The possible options are documented in the pbuilderrc(5) manual page.

It is useful to use the --configfile option to load up a preset configuration file when switching between configuration files for different distributions.

Please note that ${HOME}/.pbuilderrc supersedes system settings. A caveat is that if you have some configuration, you may need to tweak the configuration to work with new versions of pbuilder when upgrading.

6. Pakete innerhalb der Chroot bauen ohne Root zu sein

pbuilder requires full root privilege when it is satisfying the build-dependencies, but most packages do not need root privilege to build, or even refuse to build when they are built as root. pbuilder can create a user which is only used inside pbuilder and use that user id when building, and use the fakeroot command when root privilege is required.

The BUILDUSERID configuration option should be set to a value for a user id that does not already exist on the system, so that it is more difficult for packages that are being built with pbuilder to affect the environment outside the chroot. When the BUILDUSERNAME configuration option is also set, pbuilder will use the specified user name and fakeroot for building packages, instead of running as root inside chroot.

Sogar wenn die Fakeroot-Methode benutzt wird, wird pbuilder mit Root-Rechten ausgeführt, wenn dies erforderlich ist. Wenn beispielsweise Pakete in die Chroot installiert werden, wird pbuilder mit Root-Rechten ausgeführt.

Um pbuilder aufrufen zu können ohne Root zu sein, müssen Sie User Mode Linux benutzen, wie es unter Kapitel 3, User Mode Linux mit Pbuilder benutzen erklärt wird.

7. Pbuilder zur Rückportierung benutzen

pbuilder kann benutzt werden, um Software von der letzten Debian-Distribution auf eine ältere stabile Version zurück zu portieren, indem eine Chroot benutzt wird, die ein Image der älteren Distribution enthält, und die Pakete innerhalb der Chroot erstellt werden. Es sind mehrere Punkte zu beachten und wegen der folgenden Gründe ist automatische Rückportierung normalerweise nicht möglich und manuelle Interaktion erforderlich:

  • Das Paket von der Distribution Unstable könnte von Paketen oder Paketversionen abhängig sein, die nur in Unstable verfügbar sind. Daher ist es vielleicht nicht möglich, Build-Abhängigkeiten zu erfüllen: auf Stable (ohne zusätzliche Rückportierungsarbeiten).

  • Die Distribution Stable könnte Fehler haben, die in Unstable behoben wurden und an denen gearbeitet werden muss.

  • Das Paket in der Distribution Unstable könnte sogar Bauprobleme in Unstable haben.

8. Massenhaft Pakete bauen

pbuilder kann automatisiert werden, da seine Operationen nicht interaktiv sind. Es ist möglich, pbuilder für mehrere Pakete ohne Benutzerinteraktion auszuführen. Es ist bekannt, dass mehrere solche Skripte existieren. Junichi Uekawa führt solch ein Skript seit 2001 aus und reichte Fehlerberichte gegen Pakete ein, die beim Test von pbuilder scheiterten. Es gab mehrere Probleme beim automatischen Erstellen:

  • Build-Abhängigkeiten mussten interaktiv installiert werden, aber einige Pakete waren so kaputt, dass sie nicht ohne einzugreifen installiert werden konnten (wie PostgreSQL).

  • When a library package breaks, or gcc/gcj/g++ breaks, or even bison, a large number of build failures are reported. (gcj-3.0 had no "javac", bison got more strict, etc.)

  • Einige Leute waren ziemlich verärgert über Berichte fehlgeschlagener Builds.

Die meisten anfänglichen Fehler wurden im pbuilder-Kehraus um das Jahr 2002 gelöst, aber von Zeit zu Zeit treten einige Übergangsprobleme auf, die eine große Zahl von Debian-Archiven beeinflussen.Regressionstests haben ihren Preis.

Ein Skript, das in der anfänglichen Ausführung von Junichi Uekawa benutzt wurde, ist im nun verbreiteten pbuilder als pbuildd.sh enthalten. Es liegt in /usr/share/doc/pbuilder/examples/pbuildd/ und seine Konfiguration liegt in /etc/pbuilder/pbuildd-config.sh. Es sollte einfach genug für Leute einzurichten sein, die in pbuilder eingearbeitet sind. Es lief ziemlich lange und es sollte möglich sein, es auch auf Ihrem System einzurichten. Diese Version des Kodes ist nicht die am meisten getestete, sollte aber als Startpunkt funktionieren.

Um Pbuildd einzurichten, gibt es einige wissenswerte Punkte.

  • Um das Bauen zu verhindern, muss in der Paketliste eine ./avoidlist-Datei verfügbar sein.

  • It will try building anything, even packages that are not intended for your architecture.

  • Da Sie zufällige Build-Skripte ausführen, ist es besser, die Fakeroot-Option von pbuilder zu benutzen, um zu verhindern, dass das Bauen mit Root-Rechten ausgeführt wird.

  • Da nicht alle Builds garantiert in einer endlichen Zeit beendet sind, ist es wahrscheinlich nötig, eine Zeitüberschreitung festzulegen, ansonsten könnte Pbuildd bei einem schlechten Build zum Stillstand kommen.

  • Some packages require a lot of disk space; around 2GB seems to be sufficient for the largest packages for the time being. If you find otherwise, please inform the maintainer of this documentation.

9. Automatische Rückportierungsskripte

Es gibt einige Leute, die pbuilder benutzen, um eine Teilmenge von Paketen automatisch auf die Distribution Stable zurückzuportieren.

I would like some information on how people are doing it. I would appreciate any feedback or information on how you are doing it, or any examples.

10. Pbuilder für das automatisierte Testen von Paketen benutzen

pbuilder kann benutzt werden, um Pakete automatisch zu testen. Es hat die Eigenschaft, das Platzieren von Hooks zu erlauben. Diese Hooks können innerhalb der Chroot versuchen, Pakete zu installieren, sie auszuführen oder was auch immer sonst noch getan werden kann. Einige bekannte Tests und Ideen:

  • Automatic install-remove-install-purge-upgrade-remove-upgrade-purge test-suite (distributed as an example, B91dpkg-i), or just check that everything installs somewhat (execute_installtest.sh).

  • Automatisch Lintian ausführen (verteilt als Beispiel in /usr/share/doc/pbuilder/examples/B90lintian).

  • Automatic debian-test of the package? The debian-test package has been removed from Debian. A pbuilder implementation can be found as debian/pbuilder-test directory, implemented through the B92test-pkg script.

To use the B92test-pkg script, first, add it to your hook directory. [4]. The test files are shell scripts placed in debian/pbuilder-test/NN_name (where NN is a number) following the run-parts standard[5] for file names. After a successful build, packages are first tested for installation and removal, and then each test is run inside the chroot. The current directory is the top directory of the source-code. This means you can expect to be able to use the ./debian/ directory from inside your scripts.

Example scripts for use with pbuilder-test can be found in /usr/share/doc/pbuilder/examples/pbuilder-test.

11. Pbuilder benutzen, um Builds mit alternativen Kompilern zu testen

Most packages are compiled with gcc or g++ and use the default compiler version, which was gcc 2.95 for Debian GNU/Linux 3.0 (i386). However, Debian 3.0 was distributed with other compilers, under package names such as gcc-3.2 for gcc compiler version 3.2. It was therefore possible to try compiling packages against different compiler versions. pentium-builder provides an infrastructure for using a different compiler for building packages than the default gcc, by providing a wrapper script called gcc that calls the real gcc. To use pentium-builder in pbuilder, it is possible to set up the following in the configuration:

EXTRAPACKAGES="pentium-builder gcc-3.2 g++-3.2"
export DEBIAN_BUILDARCH=athlon
export DEBIAN_BUILDGCCVER=3.2

Es wird pbuilder anweisen, das Paket pentium-builder und außerdem die GCC 3.2-Kompilerpakete innerhalb der Chroot zu installieren und die zum Funktionieren von pentium-builder benötigten Umgebungsvariablen zu setzen.



[1] debootstrap oder cdebootstrap können ausgewählt werden

[2] Die Spiegel-Site sollte möglichst ein lokaler Spiegel oder ein Zwischenspeicher-Server sein, damit die öffentlichen Spiegel nicht mit vielen Zugriffen überladen werden. Die Benutzung von Werkzeugen wie Apt-proxy ist empfehlenswert.

[3] Nur das Durchführen von Upgrades wird unterstützt. Debian unterstützt generell (noch?) kein Downgrade.

[4] It is possible to specify a --hookdir /usr/share/doc/pbuilder/examples command-line option to include all example hooks as well.

[5] Siehe run-parts(8). Zum Beispiel kein ».« in Dateinamen!

Kapitel 3. User Mode Linux mit Pbuilder benutzen

It is possible to use user-mode-linux by invoking pbuilder-user-mode-linux instead of pbuilder. pbuilder-user-mode-linux doesn't require root privileges, and it uses the copy-on-write (COW) disk access method of User-mode-linux, which typically makes it much faster than the traditional pbuilder.

User-mode-linux is a somewhat less proven platform than the standard Unix tools that pbuilder relies on (chroot, tar, and gzip) but mature enough to support pbuilder-user-mode-linux since its version 0.59. And since then, pbuilder-user-mode-linux has seen a rapid evolution.

Die Konfiguration von pbuilder-user-mode-linux erfolgt in folgenden Schritten:

  • Konfiguration von User Mode Linux

  • Konfiguration von Rootstrap

  • Konfiguration von Pbuilder-uml

1. User Mode Linux konfigurieren

Die Einrichtung von User Mode Linux ist nicht ganz einfach. Es wäre wahrscheinlich nützlich, wenn Sie sich selbst ein wenig darüber informieren, bevor Sie versuchen rootstrap oder pbuilder-user-mode-linux zu benutzen. Um Einzelheiten zu erfahren, lesen Sie /usr/share/doc/uml-utilities/README.Debian und die Dokumentation von user-mode-linux. (Sie liegt in einem gesonderten Paket, user-mode-linux-doc.)

user-mode-linux erfordert, dass der Benutzer der Gruppe »uml-net« angehört, um das Netzwerk zu konfigurieren, außer wenn Sie Slirp benutzen.

Falls Sie Ihren eigenen Kernel kompilieren, möchten Sie möglicherweise überprüfen, ob Sie Unterstützung für TUN/TAP aktiviert haben und den SKAS-Patch betrachten.

2. Rootstrap konfigurieren

rootstrap ist ein Wrapper um Debootstrap. Er erstellt ein Debian-Platten-Image zur Benutzung mit UML. Um Rootstrap zu konfigurieren, gibt es mehrere Anforderungen.

  • Das Rootstrap-Paket installieren

  • Nur TUN/TAP: den Benutzer zur Gruppe »uml-net« hinzufügen, um Netzwerkzugriff zu gewähren

    adduser dancer uml-net

  • Nur TUN/TAP: prüfen, ob der Kernel die TUN/TAP-Schnittstelle unterstützt oder, falls nötig, den Kernel neu komplilieren.

  • Set up /etc/rootstrap/rootstrap.conf. For example, if the current host is 192.168.1.2, changing the following entries to something like this seems to work.

    transport=tuntap
    interface=eth0
    gateway=192.168.1.1
    mirror=http://192.168.1.2:8081/debian
    host=192.168.1.198
    uml=192.168.1.199
    netmask=255.255.255.0

    Some experimentation with configuration and running rootstrap ~/test.uml to actually test it would be handy.

    Die Benutzung vom Slirp erfordert weniger Konfiguration. Die Standardkonfiguration bringt ein funktionierendes Beispiel mit.

3. Pbuilder-uml konfigurieren

Das Folgende muss geschehen:

  • Installation des Pakets pbuilder-uml

  • Einrichten der Konfigurationsdatei /etc/pbuilder/pbuilder-uml.conf auf die folgende Weise. Sie unterscheidet sich bei Slirp.

    MY_ETH0=tuntap,,,192.168.1.198
    UML_IP=192.168.1.199
    UML_NETMASK=255.255.255.0
    UML_NETWORK=192.168.1.0
    UML_BROADCAST=255.255.255.255
    UML_GATEWAY=192.168.1.1
    PBUILDER_UML_IMAGE="/home/dancer/uml-image"

    Außerdem muss sie zur Rootstrap-Konfiguration passen.

  • Stellen Sie sicher, dass der Benutzer in BUILDPLACE schreiben darf. Ändern Sie BUILDPLACE in der Konfigurationsdatei auf eine Stelle, auf die der Benutzer zugreifen kann.

  • Führen Sie pbuilder-user-mode-linux create --distribution sid aus, um das Image zu erstellen.

  • Versuchen Sie pbuilder-user-mode-linux build auszuführen.

4. Betrachtungen, um Pbuilder-user-mode-linux auszuführen

pbuilder-user-mode-linux emuliert pbuilder größtenteils, es gibt aber einige Unterschiede.

  • pbuilder-user-mode-linux unterstützt noch nicht alle Optionen von pbuilder ordentlich. Dies ist ein Problem und wird angesprochen, während besondere Bereiche entdeckt werden.

  • /tmp wird innerhalb von pbuilder-user-mode-linux unterschiedlich gehandhabt. In pbuilder-user-mode-linux wird /tmp als Tmpfs innerhalb UML eingehängt, so dass der Zugriff auf Dateien unter /tmp von außerhalb des User Mode Linux nicht funktioniert. Es beeinflusst Optionen wie --configfile und wenn versucht wird, Pakete zu bauen, die unter /tmp liegen.

5. Paralleles Ausführen von Pbuilder-user-mode-linux

Um pbuilder-user-mode-linux parallel auf einem System auszuführen, sind ein paar Dinge zu berücksichtigen.

  • Die Methoden zum Erstellen und Aktualisieren dürfen nicht laufen, wenn ein Build-Prozess läuft oder eine COW-Datei entkräftet wird.

  • If you are not using slirp, user-mode-linux processes that are running in parallel need to have different IP addresses. Just trying to run the pbuilder-user-mode-linux several times will result in failure to access the network. But something like the following will work:

    for IP in 102 103 104 105; do
      xterm -e pbuilder-user-mode-linux build --uml-ip 192.168.0.$IP \
        20030107/whizzytex_1.1.1-1.dsc &
    done

    When using slirp, this problem does not exist.

6. Pbuilder-user-mode-linux als Wrapper-Skript benutzen, um eine virtuelle Maschine zu starten

Es ist möglich, pbuilder-user-mode-linux für andere Zwecke als nur das Bauen von Debian-Paketen zu verwenden. pbuilder-user-mode-linux login wird einem Benutzer ermöglichen, eine Shell innerhalb des pbuilder-Basis-Images von User Mode Linux zu verwenden und pbuilder-user-mode-linux execute wird dem Benutzer ermöglichen, ein Skript innerhalb des Images auszuführen.

Sie können das Skript benutzen, um SSH zu installieren und einen neuen Benutzer hinzuzufügen, so dass SSH-Zugriffe innerhalb von User Mode Linux möglich sind.

Beachten Sie, dass es nicht möglich ist, ein Skript von /tmp zu benutzen, da pbuilder-user-mode-linux ein Tmpfs unter /tmp einhängt.

Das folgende Beispielskript könnte nützlich sein, um einen Sshd innerhalb von User Mode Linux zu starten.

#!/bin/bash

apt-get install -y ssh xbase-clients xterm
echo "Geben Sie das Root-Passwort ein"
passwd
cp /etc/ssh/sshd_config{,-}
sed 's/X11Forwarding.*/X11Forwarding yes/' /etc/ssh/sshd_config- > /etc/ssh/sshd_config

/etc/init.d/ssh restart
ifconfig
echo "Zum Beenden Eingabetaste drücken"
read

Kapitel 4. Häufig gestellte Fragen

Hier sind bekannte Probleme und häufig gestellte Fragen dokumentiert. Dieser Teil war anfangs in der Datei README.Debian verfügbar, wurde aber hierher verschoben.

1. Fehlschlagen des Erstellens mit Pbuilder

Es kommt häufig vor, dass pbuilder die letzte Chroot nicht erstellen kann. Versuchen Sie ein Upgrade von pbuilder und Debootstrap durchzuführen. Es ist derzeit nicht möglich, Software zu erstellen, die die Vergangenheit handhabt. Zukunftsvorhersage ist eine Funktion, die später hinzugefügt werden könnte, wenn wir uns mit der Vergangenheit arrangieren können.

Es gibt Leute, die gelegentlich Debootstrap auf stabile Versionen zurückportieren; jagen Sie sie.

Wenn in der Debootstrap-Phase Fehler auftreten, muss das Debootstrap-Skript repariert werden. pbuilder stellt keine Möglichkeit bereit, Debootstrap zu umgehen.

2. Verzeichnisse, bei denen kein Bind-Mount möglich ist

Because of the way pbuilder works, there are several directories that cannot be bind-mounted when running pbuilder. The directories include /tmp, /var/cache/pbuilder, and system directories such as /etc and /usr. The recommendation is to use directories under the user's home directory for bind-mounts.

3. In Pbuilder anmelden, um Fehlschlagen des Builds zu untersuchen

It is possible to invoke a shell session after a build failure. Example hook scripts are provided as C10shell and C11screen scripts. The C10shell script will start bash inside chroot, and the C11screen script will start a GNU screen inside the chroot.

4. In Pbuilder anmelden, um die Umgebung zu ändern

Manchmal ist es notwendig, die Chroot-Umgebung zu verändern. login wird den Inhalt der Chroot nach dem Abmelden entfernen. Es ist möglich unter Benutzung von Hook-Skripten eine Shell aufzurufen. pbuilder update führt »E«-Skripte aus und ruft beispielsweise eine Shell auf, die als C10shell bereitgestellt wird.

$ mkdir ~/loginhooks
$ cp C10shell ~/loginhooks/E10shell
$ sudo pbuilder update --hookdir ~/loginhooks/E10shell

Außerdem ist es möglich, die Optionen --save-after-exec und/oder --save-after-login zu der pbuilder login-Sitzung hinzuzufügen, um das Ziel zu erreichen. Es ist ebenfalls möglich, die Option --uml-login-nocow zur Sitzung von pbuilder-user-mode-linux login hinzuzufügen.

5. BUILDRESULTUID für Sudo-Sitzungen setzen

Es ist möglich,

BUILDRESULTUID=$SUDO_UID

in Pbuilderrc einzustellen, um BUILDRESULTUID angemessen zu setzen, wenn sudo benutzt wird.

6. Anmerkungen zum Gerauch von $TMPDIR

Falls Sie $TMPDIR auf einen unüblichen Wert setzen, der von /tmp abweicht, werden Sie bemerken, dass einige Fehler, wie das Scheitern von dpkg-source, innerhalb der Chroot auftreten.

There are two options: you may install a hook to create that directory, or set

export TMPDIR=/tmp

in pbuilderrc. Take your pick.

Ein Beispielskript wird als examples/D10tmp mit Pbuilder bereitgestellt.

7. Ein Kürzel erstellen, um pbuilder mit einer speziellen Distribution auszuführen.

When working with multiple chroots, it would be nice to work with scripts that reduce the amount of typing. An example script, pbuilder-distribution.sh, is provided as an example. Invoking the script as pbuilder-squeeze will invoke pbuilder with a squeeze chroot.

8. Using environmental variables for running pbuilder for a specific distribution

This section[6] describes briefly a way to set up and use multiple pbuilder setups by creating a pbuilderrc configuration in your home path ($HOME/.pbuilderrc) and using the variable "DIST" when running pbuilder or pdebuild.

First, set up $HOME/.pbuilderrc to look like:

if [ -n "${DIST}" ]; then
        BASETGZ="`dirname $BASETGZ`/$DIST-base.tgz"
        DISTRIBUTION="$DIST"
        BUILDRESULT="/var/cache/pbuilder/$DIST/result/"
        APTCACHE="/var/cache/pbuilder/$DIST/aptcache/"
fi

Then, whenever you wish to use pbuilder for a particular distro, assign a value to "DIST" that is one of the distros available for Debian or any Debian based distro you happen to be running (i.e., whatever is found under /usr/lib/debootstrap/scripts).

Here are some examples for running pbuilder or pdebuild:

DIST=gutsy sudo pbuilder create

DIST=sid sudo pbuilder create --mirror http://http.us.debian.org/debian

DIST=gutsy sudo pbuilder create \
        --othermirror "deb http://archive.ubuntu.com/ubuntu gutsy universe \
        multiverse"

DIST=gutsy sudo pbuilder update

DIST=sid sudo pbuilder update --override-config --mirror \
http://http.us.debian.org/debian \
--othermirror "deb http://http.us.debian.org/debian sid contrib non-free"

DIST=gutsy pdebuild

9. Spezielle Listen von Apt-Quellen und lokale Pakete verwenden

If you have some very specialized requirements on your apt setup inside pbuilder, it is possible to specify them through the --othermirror option. Try something like: --othermirror "deb http://local/mirror stable main|deb-src http://local/source/repository ./"

Um ein lokales Dateisystem anstelle von HTTP zu benutzen, ist es nötig, Bind-Mount zu verwenden. --bindmounts ist eine in solchen Fällen nützliche Befehlszeilenoption.

Es könnte vorteilhaft sein, Ihre Build-Pakete von innerhalb der Chroot zu benutzen. Es ist möglich, die Aufgabe mit der folgenden Konfiguration zu automatisieren. Richten Sie zuerst Pbuilderrc ein, um ein Bind-Mount Ihres Verzeichnisses für Build-Ergebnisse auszuführen.

BINDMOUNTS="/var/cache/pbuilder/result"

Fügen Sie dann den folgenden Hook hinzu

# cat /var/cache/pbuilder/hooks/D70results
#!/bin/sh
cd /var/cache/pbuilder/result/
/usr/bin/dpkg-scanpackages . /dev/null > /var/cache/pbuilder/result/Packages
/usr/bin/apt-get update

Auf diese Weise können Sie deb file:/var/cache/pbuilder/result benutzen.

To add a new apt-key inside chroot:

sudo pbuilder --login --save-after-login
# apt-key add - <<EOF
...public key goes here...
EOF
# logout

10. How to get pbuilder to run apt-get update before trying to satisfy build-dependencies

Sie können dafür Hook-Skripte benutzen. D-Skripte werden ausgeführt, bevor Build-Abhängigkeiten erfüllt werden.

Dieser Kodeausschnitt stammt von Ondrej Sury.

11. Unterschiedliche Eingabeaufforderungen innerhalb der Pbuilder-Anmeldung

Um charakteristische Bash-Eingabeaufforderungen innerhalb pbuilder zu erleichtern, ist es möglich, innerhalb der pbuilderrc Umgebungsvariablen wie PS1 zu setzen.

Mit aktuelleren Versionen der Bash als 2.05b-2-15 ist der Wert der Variablen »debian_chroot«, falls er gesetzt ist, im Wert von PS1 (der Bash-Eingabeaufforderung) innerhalb der Chroot enthalten. In vorhergehenden Versionen der Bash,[7] funktionierte die Einstellung PS1 in Pbuilderrc.

Example of debian_chroot:

	export debian_chroot="pbuild$$"

Example of PS1:

	export PS1="pbuild chroot 32165 # "

12. Eine Chroot-Erinnerung erstellen

Bash-Eingabeaufforderungen werden Ihnen helfen, sich daran zu erinnern, dass Sie sich innerhalb der Chroot befinden. Es gibt andere Fälle, in denen Sie möglicherweise andere Hinweise bekommen möchten, dass Sie innerhalb der Chroot sind. Probieren Sie das Hook-Skript examples/F90chrootmemo aus. Es wird eine Datei innerhalb der Chroot erstellen, die /CHROOT heißt.

13. /var/cache/apt/archives für den Paket-Zwischenspeicher benutzen

Um Systemen mit geringer Bandbreite zu helfen, ist es möglich /var/cache/apt/archives als Paket-Zwischenspeicher zu benutzen. Geben Sie es einfach anstelle von /var/cache/pbuilder/aptcache an.

Es ist jedoch nicht möglich, dies derzeit mit der User-Mode-Linux-Version von pbuilder zu tun, da /var/cache/apt/archives normalerweise nur für Root schreibbar ist.

Es wird empfohlen, zugehörige Werkzeuge wie Apt-proxy zu benutzen, da das Zwischenspeichern von Paketen dem System außerhalb des Einflussbereichs von pbuilder nutzen würde.

14. Pbuilder auf Debian-Stable-Releases zurückportiert

Currently, a stable back port of pbuilder is available at backports.org.

15. Warnung, dass LOGNAME nicht definiert wurde

Sie bekommen möglicherweise viele Fehlermeldungen zu Gesicht, wenn Sie pbuilder ausführen.

	dpkg-genchanges: Warnung: kein UTMP-Eintrag verfügbar und LOGNAME nicht definiert; UID des Prozesses wird benutzt (1234)

Es ist derzeit sicher, diese Warnmeldung zu ignorieren. Bitte geben Sie eine Rückmeldung, wenn Sie ein Problem mit nicht gesetztem LOGNAME haben. LOGNAME zu setzen bereitet einige Probleme, wenn chroot aufgerufen wird. Dpkg benötigt beispielsweise Getpwnam, um innerhalb der Chroot erfolgreich zu sein, was bedeutet, dass LOGNAME und die zugehörige Benutzerinformation innerhalb der Chroot eingerichtet werden müssen.

16. »Build-Conflikt« mit wesentlichem Paket nicht möglich

pbuilder erlaubt derzeit kein »Build-Conflicts« mit wesentlichen Paketen. Es sollte offensichtlich sein, dass wesentliche Pakete nicht von einem funktionierenden Debian-System entfernt werden sollten und ein Quellpaket nicht versuchen sollte, das Entfernen solcher Pakete zu erzwingen, wenn Leute das Paket bauen.

17. Vermeiden der Nachricht »ln: Ungültiger Link über Gerätegrenzen hinweg«

By default, pbuilder uses hard links to manage the pbuilder package cache. It is not possible to make hard links across different devices; and thus this error will occur, depending on your set up. If this happens, set

APTCACHEHARDLINK=no

in your pbuilderrc file. Note that packages in APTCACHE will be copied into the chroot local cache, so plan for enough space on the BUILDPLACE device.

18. Fakechroot benutzen

It is possible to use fakechroot instead of being root to run pbuilder; however, several things make this impractical. fakechroot overrides library loads and tries to override default libc functions when providing the functionality of virtual chroot. However, some binaries do not use libc to function, or override the overriding provided by fakechroot. One example is ldd. Inside fakechroot, ldd will check the library dependency outside of the chroot, which is not the expected behavior.

Um das Problem zu umgehen, hat Debootstrap eine Option --variant fakechroot. Benutzen Sie diese, so dass Ldd und Ldconfig überschrieben werden.

Stellen Sie sicher, dass Sie Ihrem Pfad LD_PRELOAD korrekt gesetzt haben, wie es in der Handbuchseite von Fakechroot beschrieben ist.

19. Debconf innerhalb von Pbuilder-Sitzungen benutzen

Um Debconf innerhalb von pbuilder zu benutzen, sollte DEBIAN_FRONTEND in pbuilderrc auf readline zu setzen funktionieren. Es auf dialog zu setzen sollte ebenfalls funktionieren. Stellen Sie aber sicher, dass Whiptail oder Dialog innerhalb der Chroot installiert sind.

20. »nodev«-Einhängeoptionen behindern Pbuilder-Aktivität

Falls Sie Nachrichten wie diese beim Erstellen einer Chroot sehen, sind Sie dabei, ein Dateisystem mit einer »nodev«-Option einzuhängen.

	/var/lib/dpkg/info/base-files.postinst: /dev/null: Keine Berechtigung

Sie werden außerdem Probleme haben, falls Sie ein Dateisystem mit der Option »noexec« oder »nosuid« einhängen. Stellen Sie sicher, dass Sie diese Schalter nicht gesetzt haben, wenn Sie das Dateisystem für /var/cache/pbuilder oder $BUILDPLACE einhängen.

Dies ist kein Problem, wenn Sie user-mode-linux benutzen.

Sehen Sie zum Beispiel 316135 .

21. Pbuilder ist langsam

pbuilder is often slow. The slowest part of pbuilder is extracting the tar.gz every time pbuilder is invoked. That can be avoided by using pbuilder-user-mode-linux. pbuilder-user-mode-linux uses the COW file system, and thus does not need to clean up and recreate the root file system.

pbuilder-user-mode-linux ist langsamer beim Ausführen des tatsächlichen Build-Systems, aufgrund des üblichen Mehraufwands von user-mode-linux für Systemaufrufe. Es ist freundlicher zur Festplatte.

pbuilder with cowdancer is also an alternative that improves the speed of pbuilder startup.

22. Pdebuild zum Fördern eines Pakets benutzen

To sign a package marking it for sponsorship, it is possible to use --auto-debsign and --debsign-k options of pdebuild.

	pdebuild  --auto-debsign  --debsign-k XXXXXXXX

23. Warum liegt in ../ eine source.changes-Datei?

When running pdebuild, pbuilder will run dpkg-buildpackage to create a Debian source package to pass it on to pbuilder. A file named XXXX_YYY_source.changes is what remains from that process. It is harmless unless you try to upload it to the Debian archive.

Dieses Verhalten ist anders, wenn es mittels --use-pdebuild-internal ausgeführt wird.

24. Die Modi »amd64« und »i386«

amd64 architectures are capable of running binaries in i386 mode. It is possible to use pbuilder to run packages, using linux32 and the debootstrap --arch option. Specifically, a command-line option like the following will work.

pbuilder create --distribution sid --debootstrapopts --arch --debootstrapopts i386 \
  --basetgz /var/cache/pbuilder/base-i386.tgz --mirror http://ftp.jp.debian.org/debian
linux32 pbuilder build --basetgz /var/cache/pbuilder/base-i386.tgz

25. Tmpfs für »buildplace« benutzen

To improve speed of operation, it is possible to use tmpfs for the pbuilder build location. Mount tmpfs to /var/cache/pbuilder/build, and set

APTCACHEHARDLINK=no

.

26. Svn-buildpackage zusammen mit Pbuilder benutzen

The pdebuild command can be used with the svn-buildpackage --svn-builder command-line option: [8]

alias svn-cowbuilder="svn-buildpackage --svn-builder='pdebuild --pbuilder cowbuilder"


[6] This part of the documentation contributed by Andres Mejia.

Dieses Beispiel wurde von einem Wiki übernommen (https://wiki.ubuntu.com/PbuilderHowto).

[7] Versions of bash from and before Debian 3.0.

Kapitel 5. Fehlerbehebung und Entwicklung

1. Fehler berichten

To report bugs, it would be important to have a log of what's going wrong. Most of the time, adding a --debug option and re-running the session should do the trick. Please send the log of such a session along with your problem to ease the debugging process.

2. Mailingliste

There is a mailing list for pbuilder on alioth (pbuilder-maint@lists.alioth.debian.org). You can subscribe through the alioth web interface: http://alioth.debian.org/mail/?group_id=30778.

3. IRC-Kanal

Zur Koordinierung und Kommunikation wird der IRC-Kanal #pbuilder auf irc.oftc.net benutzt. Bitte legen Sie dort Ihre Absicht dar, wenn Sie mit irgendwelchen Änderungen beginnen oder irgendeine Änderung übertragen.

4. Informationen für Pbuilder-Entwickler

Dieser Abschnitt versucht, aktuelle Vorgehensweisen bei der Entwicklungs zu dokumentieren und wie Dinge allgemein in der Entwicklung funktionieren.

pbuilder is co-maintained with resources provided by Alioth. There is an Alioth project page at http://alioth.debian.org/projects/pbuilder. A home page is also available, at http://alioth.debian.org/projects/pbuilder, which shows this text. A git repository is available through http, git, or (if you have an account on alioth, ) ssh.

git-clone git://git.debian.org/git/pbuilder/pbuilder.git
git-clone http://git.debian.org/git/pbuilder/pbuilder.git
git-clone ssh://git.debian.org/git/pbuilder/pbuilder.git

Git commit message should have the first line describing what the commit does, formatted in the way debian/changelog is formatted because it is copied verbatim to changelog via git-dch. The second line is empty, and the rest should describe the background and extra information related to implementation of the commit.

Test-suites are available in the ./testsuite/ directory. Changes are expected not to break the test-suites. ./run-test.sh is a basic test-suite, which puts a summary in run-test.log, and run-test-cdebootstrap.log. ./run-test-regression.sh is a regression test-suite, which puts the result in run-test-regression.log. Currently, run-test.sh is run automatically daily to ensure that pbuilder is working.

Tabelle 5.1. Verzeichnisstruktur der Test-Suite

VerzeichnisBedeutung
./testsuite/Directory for testsuite.
./testsuite/run-test.shTäglicher Regressionstest, um zu prüfen, ob Änderungen am Debian-Archiv Pbuilder unterbrechen.
./testsuite/run-test.logA summary of testsuite.
./testsuite/normal/Directory for testsuite results of running pbuilder with debootstrap.
./testsuite/cdebootstrap/Directory for testsuite results of running pbuilder with cdebootstrap.
./testsuite/run-regression.shRegression testsuite, run every time change is made to pbuilder to make sure there is no regression.
./testsuite/run-regression.logSummary of test result.
./testsuite/regression/BugID-*.shRegression tests, exit 0 for success, exit 1 for failure.
./testsuite/regression/BugID-*Dateien, die für die Regressionstest-Suite verwandt werden
./testsuite/regression/log/BugID-*.sh.logOutput of the regression test; output from the script is redirected by run-regression.sh.

When making changes, they should be documented in the Git commit log. git-dch will generate debian/changelog from the commit log. Make the first line of your commit log meaningful, and add any bug-closing information available. debian/changelog should not be edited directly except when releasing a new version.

A TODO file is available in debian/TODO. It's mostly not well-maintained, but hopefully it will be more up-to-date when people start using it. Emacs todoo-mode is used in editing the file.

When releasing a new version of pbuilder, the version is tagged with the git tag X.XXX (version number). This is done with the ./git-tag.sh script, available in the source tree.

Kapitel 6. Andere Verwendungen von Pbuilder

1. Pbuilder für kleine Experimente benutzen

There are cases when some small amount of experimenting is required, and you do not want to damage the main system, like when installing experimental library packages, or compiling with experimental compilers. For such cases, the pbuilder login command is available.

pbuilder login ist eine Funktion zur Fehlersuche für pbuilder selbst, aber es ermöglicht Benutzern außerdem eine temporäre Chroot zu verwenden.

Beachten Sie, dass die Chroot nach dem Abmelden aus der Shell bereinigt wird und das Einhängen von Dateisystemen innerhalb der Chroot als schädlich angesehen wird.

2. Kleine Programme innerhalb der Chroot ausführen

Um die Benutzung von pbuilder für andere Zwecke zu erleichtern, ist pbuilder execute verfügbar. pbuilder execute wird ein im Befehlszeilenargument angegebenes Skript nehmen und innerhalb der Chroot aufrufen.

Das Skript kann nützlich für Abfolgen von Operationen, wie das Installieren von SSH oder das Hinzufügen eines neuen Benutzers innerhalb der Chroot, sein.

Kapitel 7. Experimental or wishlist features of pbuilder

Es gibt einige fortgeschrittene Funktionen, die über die Grundfunktionen von pbuilder für einige besondere Zwecke hinausgehen.

1. LVM benutzen

LVM2 has a useful snapshot function that features Copy-on-write images. That could be used for pbuilder just as it can be used for the user-mode-linux pbuilder port. The lvmpbuilder script in the examples directory implements such a port. The scripts and documentation can be found under /usr/share/doc/pbuilder/examples/lvmpbuilder/.

2. Cowdancer benutzen

cowdancer allows copy-on-write semantics on a file system using hard links and hard-link-breaking-on-write tricks. pbuilder using cowdancer seems to be much faster and it is one ideal point for improvement. cowbuilder, a wrapper for pbuilder that uses cowdancer, is available from the cowdancer package since version 0.14.

Example command-lines for cowbuilder look like the following:

# cowbuilder --create --distribution sid
# cowbuilder --update --distribution sid
# cowbuilder --build XXX.dsc

It is also possible to use cowdancer with the pdebuild command. Specify this with command-line option --pbuilder or set it in the PDEBUILD_PBUILDER configuration option.

$ pdebuild --pbuilder cowbuilder

3. Pbuilder ohne tar.gz verwenden

The --no-targz option of pbuilder will allow usage of pbuilder in a different way than conventional usage. It will try to use an existing chroot, and will not try to clean up after working on it. It is an operation mode more like sbuild.

Es sollte möglich sein, Basis-Chroot-Images für dchroot mit den folgenden Befehlen zu erstellen:

# pbuilder create --distribution lenny --no-targz --basetgz /chroot/lenny
# pbuilder create --distribution squeeze --no-targz --basetgz /chroot/squeeze
# pbuilder create --distribution sid --no-targz --basetgz /chroot/sid

4. PBuilder in einem Vserver verwenden

Es ist möglich, pbuilder in einer Vserver-Umgebung zu verwenden. Dies erfordert entweder Vserver-patches in Version 2.1.1-rc14 oder höher oder eine Linux-Kernel-Version 2.6.16 oder höher.

Um pbuilder in einem Vserver zu verwenden, müssen Sie in den ccapabilities dieses Servers secure_mount CAPS setzen.

5. Gebrauch von Ccache

It is possible to use the C compiler cache ccache to speed up repeated builds of the same package (or packages that compile the same files multiple times for some reason). Using ccache can speed up repeated building of large packages dramatically, at the cost of some disk space and bookkeeping.

To enable usage of ccache with pbuilder, you should set CCACHEDIR in your pbuilderrc file.

Current implementation of ccache support has several bugs, such that CCACHEDIR must be owned by the pbuilder build user, and parallel runs of pbuilder are not supported. Therefore it is not enabled by default.

Kapitel 8. Referenzmaterial

1. Verzeichnisstruktur außerhalb der Chroot

Tabelle 8.1. Verzeichnisstruktur außerhalb der Chroot

VerzeichnisBedeutung
/etc/pbuilderrcConfiguration file.
/usr/share/pbuilder/pbuilderrcDefault configuration.
/var/cache/pbuilder/base.tgzStandardspeicherort, den Pbuilder für base.tgz benutzt. Dieser Tarball enthält eine Basis-Debian-Installation ausschließlich mit Build-essential-Paketen.
/var/cache/pbuilder/build/PID/Default location pbuilder uses for chroot.
/var/cache/pbuilder/aptcacheStandardspeicherort, den pbuilder als APT-Zwischenspeicher benutzen wird, um Deb-Pakete zu speichern, die pbuilder während des Bauens benötigt
/var/cache/pbuilder/ccacheDefault location pbuilder will use as cache location.
/var/cache/pbuilder/resultDefault location where pbuilder puts the deb files and other files created after build.
/var/cache/pbuilder/pbuilder-umlresultDefault location where pbuilder-user-mode-linux puts the deb files and other files created after build.
/var/cache/pbuilder/pbuilder-mntStandardspeicherort, den pbuilder-user-mode-linux benutzt, um das COW-Dateisystem für die Chroot einzuhängen
/tmppbuilder-user-mode-linux wird Tmpfs für die Arbeit einhängen.
${HOME}/tmp/PID.cowpbuilder-user-mode-linux uses this directory for location of COW file system.
${HOME}/uml-imagepbuilder-user-mode-linux uses this directory for user-mode-linux full disk image.

2. Verzeichnisstruktur innerhalb der Chroot

Tabelle 8.2. Verzeichnisstruktur innerhalb der Chroot

VerzeichnisBedeutung
/etc/mtab Symlink to /proc/mounts.
/tmp/builddStandardort, der vom pbuilder benutzt wird, um die zu verarbeitenden Debian-Pakete abzulegen. /tmp/buildd/packagename-version/ wird das Wurzelverzeichnis des Pakets sein, das verarbeitet wird. Die Umgebungsvariable HOME wird von Pbuilder-buildpackage auf diesen Wert gesetzt. --inputfile wird die Dateien hier ablegen.
/runscriptDas Skript, das als Argument zur Ausführung an pbuilder übergeben wird, wird weitergereicht.
/tmp/hooks Der Speicherort von Hooks
/var/cache/apt/archives pbuilder copies the content of this directory to and from the aptcache directory located outside chroot.
/var/cache/pbuilder/ccache pbuilder hängt dieses Verzeichnis per Bind-Mount ein, damit es durch Ccache benutzt wird.
/tmp/XXXXpbuilder-user-mode-linux uses a script in /tmp to bootstrap into user-mode-linux.

Kapitel 9. Nebensächliche archäologische Einzelheiten

1. Dokumentations-Chronik

Die Arbeit an diesem Dokument wurde am 28. Dezember 2002 durch Junichi Uekawa begonnen, der versuchte zu dokumentieren, was über pbuilder bekannt ist.

This documentation is available from the pbuilder source tar-ball, and from the git repository of pbuilder (web-based access is possible). A copy of this documentation can be found on the Alioth project page for pbuilder. There is also a PDF version. The homepage for pbuilder is http://pbuilder.alioth.debian.org/, hosted by the alioth project.

Die Dokumentation wurde unter Verwendung von DocBook-XML mit dem Emacs-PSGML-Modus und unter Verwendung von Wysidocbookxml zur Echtzeitvorschau geschrieben.

2. Möglicherweise ungenaue Hintergrundgeschichte von Pbuilder

Das Folgende ist ein möglichst genauer Bericht, wie es zu pbuilder kam und andere Versuche, ein Ergebnis wie pbuilder zu erzielen. Dieser Teil des Dokuments war ursprünglich in der Datei AUTHORS, um dem Anerkennung zu zollen, was vor pbuilder existierte.

2.1. Zeit vor Pbuilder

There was once dbuild, which was a shell script to build Debian packages from source. Lars Wirzenius wrote that script, and it was good, short, and simple (probably). There was nothing like build-depends then (I think), and it was simple. It might have been improved; I could only find references and no actual source.

debbuild was probably written by James Troup. I don't know because I have never seen the actual code; I could only find some references to it on the net, and mailing list logs.

sbuild is a perl script to build Debian packages from source. It parses Build-Depends, and performs other miscellaneous checks, and has a lot of hacks to actually get things building, including a table of what package to use when virtual packages are specified (does it do that still?). It supports the use of a local database for packages that do not have build-dependencies. It was written by Ronan Hodek, and I think it was patched and fixed and extended by several people. It is part of wanna-build, and used extensively in the Debian buildd system. I think it was maintained mostly by Ryan Murray.

2.2. Geburt von Pbuilder

Wanna-Build (Sbuild) war (in der Zeit um das Jahr 2001) ziemlich schwierig einzurichten und es war ein nie Debian-Paket. Dbuild war etwas, was Build-Abhängigkeiten vorwegnahm.

Pakete aus den Quellen unter Benutzung von Build-Abhängigkeitsinformationen innerhalb einer Chroot zu bauen klang trivial und pbuilder war geboren. Es war ursprünglich ein Shell-Skript mit nur wenigen Zeilen, das Debootstrap, Chroot und Dpkg-buildpackage im gleichen Durchlauf aufrief, aber bald wurde entschieden, dass das zu langsam sei.

Yes, and it took almost a year to get things somewhat right, and in the middle of the process, Debian 3.0 was released. Yay. Debian 3.0 wasn't completely buildable with pbuilder, but the amount of packages which are not buildable is steadily decreasing (I hope).

2.3. Und sein zweites Lebensjahr

Someone wanted pbuilder to not run as root, and as User-mode-linux has become more useful as time passed, I've started experimenting with pbuilder-user-mode-linux. pbuilder-user-mode-linux has not stayed functional as much as I would have liked, and bootstrapping the user-mode-linux environment has been pretty hard, due to the quality of user-mode-linux code or packaging at that time, which kept on breaking network support in one way or the other.

2.4. Das fünfte Jahr von Pbuilder

pbuilder is now widely adopted as an 'almost standard' tool for testing packages, and building packages in a pristine environment. There are other, similar tools that do similar tasks, but they do not share the exact same goal. To commemorate this fact, pbuilder is now co-maintained by several people.

sbuild is now a well-maintained Debian package within Debian, and with pbuilder being such a slow monster, some people prefer the approach of sbuild. Development to use LVM-snapshots, cowloop, or cowdancer are hoped to improve the situation somewhat.