This documentation is a work in progress; it might be incomplete and outdated.
Inhaltsverzeichnis
Tabellenverzeichnis
Inhaltsverzeichnis
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.
Inhaltsverzeichnis
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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!
Inhaltsverzeichnis
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
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.
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.
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.
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.
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 &
doneWhen using slirp, this problem does not exist.
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"
readInhaltsverzeichnis
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.
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.
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.
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.
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.
Es ist möglich,
BUILDRESULTUID=$SUDO_UID
in Pbuilderrc einzustellen, um BUILDRESULTUID angemessen zu setzen, wenn sudo benutzt wird.
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.
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.
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
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
Sie können dafür Hook-Skripte benutzen. D-Skripte werden ausgeführt, bevor Build-Abhängigkeiten erfüllt werden.
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 # "
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.
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.
Currently, a stable back port of pbuilder is available at backports.org.
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.
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.
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.
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.
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.
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 .
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.
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 XXXXXXXXWhen 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.
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
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
.
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.
Inhaltsverzeichnis
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.
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.
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.
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
| Verzeichnis | Bedeutung |
|---|---|
./testsuite/ | Directory for testsuite. |
./testsuite/run-test.sh | Täglicher Regressionstest, um zu prüfen, ob Änderungen am Debian-Archiv Pbuilder unterbrechen. |
./testsuite/run-test.log | A 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.sh | Regression testsuite, run every time change is made to pbuilder to make sure there is no regression. |
./testsuite/run-regression.log | Summary of test result. |
./testsuite/regression/BugID-*.sh | Regression 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.log | Output 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.
Inhaltsverzeichnis
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.
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.
Inhaltsverzeichnis
Es gibt einige fortgeschrittene Funktionen, die über die Grundfunktionen von pbuilder für einige besondere Zwecke hinausgehen.
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/.
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
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
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.
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.
Inhaltsverzeichnis
Tabelle 8.1. Verzeichnisstruktur außerhalb der Chroot
| Verzeichnis | Bedeutung |
|---|---|
/etc/pbuilderrc | Configuration file. |
/usr/share/pbuilder/pbuilderrc | Default configuration. |
/var/cache/pbuilder/base.tgz | Standardspeicherort, 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/aptcache | Standardspeicherort, den pbuilder als APT-Zwischenspeicher benutzen wird, um Deb-Pakete zu speichern, die pbuilder während des Bauens benötigt |
/var/cache/pbuilder/ccache | Default location pbuilder will use as cache location. |
/var/cache/pbuilder/result | Default location where pbuilder puts the deb files and other files created after build. |
/var/cache/pbuilder/pbuilder-umlresult | Default location where pbuilder-user-mode-linux puts the deb files and other files created after build. |
/var/cache/pbuilder/pbuilder-mnt | Standardspeicherort, den pbuilder-user-mode-linux benutzt, um das COW-Dateisystem für die Chroot einzuhängen |
/tmp | pbuilder-user-mode-linux wird Tmpfs für die Arbeit einhängen. |
${HOME}/tmp/PID.cow | pbuilder-user-mode-linux uses this directory for location of COW file system. |
${HOME}/uml-image | pbuilder-user-mode-linux uses this directory for user-mode-linux full disk image. |
Tabelle 8.2. Verzeichnisstruktur innerhalb der Chroot
| Verzeichnis | Bedeutung |
|---|---|
/etc/mtab |
Symlink to /proc/mounts.
|
/tmp/buildd | Standardort, 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.
|
/runscript | Das 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/XXXX | pbuilder-user-mode-linux uses a script in
/tmp to bootstrap into user-mode-linux. |
Inhaltsverzeichnis
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.
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.
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.
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).
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.
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.