BESCHREIBUNG¶
debuild - baut ein Debian-Paket
ÜBERSICHT¶
debuild [
Debuild-Optionen] [
Dpkg-Buildpackage-Optionen] [
--lintian-opts Lintian-Optionen]
debuild [
Debuild-Optionen]
binary|
binary-arch|
binary-indep|
clean …
BESCHREIBUNG¶
debuild erstellt alle Dateien, die zum Hochladen eines Debian-Pakets
nötig sind. Zuerst führt es
dpkg-buildpackage aus, dann
lintian für die erstellte
.changes-Datei (unter der
Annahme, dass
lintian installiert ist) und signiert schließlich
die
.changes- und/oder gegebenenfalls die
.dsc-Dateien (mittels
debsign(1) anstelle von
dpkg-buildpackage(1) selbst; alle
passenden Schlüsselsignierungsoptionen werden übergeben). An
dpkg-buildpackage und
lintian können Parameter
übergeben werden, wobei letztere mit der Option
--lintian-opts
angegeben werden. Die in diesem Fall erlaubten Optionen sind
--lintian
und
--no-lintian, um den Lintian-Schritt zu erzwingen beziehungsweise
zu überspringen. Standardmäßig wird
lintian
ausgeführt. Außerdem sind verschiedene Optionen für das Setzen
und Aufbewahren von Umgebungsvariablen verfügbar, wie nachfolgend im
Abschnitt »Umgebungsvariablen« beschrieben. Bei dieser Methode
debuild auszuführen wird außerdem das Bauprotokoll
../<Paket>_<Version>_<Architektur>.build gesichert.
Eine alternative Möglichkeit
debuild zu benutzen, besteht darin,
einen oder mehrere der Parameter
binary,
binary-arch,
binary-indep und
clean zu verwenden. In diesem Fall wird
debuild versuchen, Root-Rechte zu bekommen und dann
debian/rules
mit den angegebenen Parametern auszuführen. Um Root-Rechte zu bekommen,
kann eine der Optionen
--rootcmd=Befehl_um_Root_zu_werden oder
-rBefehl_um_Root_zu_werden benutzt werden.
Befehl_um_Root_zu_werden ist wahrscheinlich entweder
fakeroot,
sudo oder
super. Eine weitere Erörterung dieses Punkts
finden Sie nachfolgend. Wieder können die Optionen zum Aufbewahren der
Umgebung verwendet werden. In diesem Fall wird
debuild außerdem
versuchen, zuerst
dpkg-checkbuilddeps auszuführen; dies kann
explizit mittels der Optionen
-D beziehungsweise
-d angefordert
oder abgeschaltet werden. Beachten Sie außerdem, dass wenn entweder eine
dieser beiden oder eine
-r-Option in der Konfigurationsdateioption
DEBUILD_DPKG_BUILDPACKAGE_OPTS angegeben wurde, dies dann sogar in
dieser Aufrufmethode von
debuild erkannt wird.
debuild liest außerdem, wie nachfolgend beschrieben, die
devscripts-Konfigurationsdateien. Dies ermöglicht die Angabe von
Standardoptionen.
Prüfung von Verzeichnisnamen¶
Ebenso wie mehrere andere Skripte im Paket
devscripts wird
debuild
den Verzeichnisbaum emporsteigen, bis es eine
debian/changelog-Datei
findet. Als eine Schutzmaßnahme gegen verirrte Dateien, die
möglicherweise Probleme bereiten, wird es den Namen des
übergeordneten Verzeichnisses untersuchen, sobald es eine
debian/changelog-Datei findet und prüfen, ob der Verzeichnisname
dem Paketnamen entspricht. Wie dies genau geschieht, wird durch die beiden
Konfigurationsdateivariablen
DEVSCRIPTS_CHECK_DIRNAME_LEVEL und
DEVSCRIPTS_CHECK_DIRNAME_REGEX sowie ihre entsprechenden
Befehlszeilenoptionen
--check-dirname-level und
--check-dirname-regex gesteuert.
DEVSCRIPTS_CHECK_DIRNAME_LEVEL kann die folgenden Werte annehmen:
- 0
- prüft den Verzeichnisnamen nie.
- 1
- prüft den Verzeichnisnamen nur, falls in der Suche
nach debian/changelog das Verzeichnis gewechselt werden muss. Dies
ist das Standardverhalten.
- 2
- prüft den Verzeichnisnamen immer.
Der Verzeichnisname wird geprüft, indem getestet wird, ob der aktuelle
Verzeichnisname (wie er durch
pwd(1) bestimmt wurde) zum regulären
Ausdruck passt, der durch die Konfigurationsdateioption
DEVSCRIPTS_CHECK_DIRNAME_REGEX oder die Befehlszeilenoption
--check-dirname-regex regulärer_Ausdruck angegeben wurde.
Hierbei ist
regulärer_Ausdruck ein regulärer Perl-Ausdruck
(siehe
perlre(3perl)), der an den Anfang und das Ende verankert wird.
Falls
regulärer_Ausdruck ein »/« enthält, muss er
auf den vollständigen Verzeichnispfad passen. Wenn nicht, dann muss er
auf den vollständigen Verzeichnisnamen passen. Falls
regulärer_Ausdruck die Zeichenkette »PACKAGE«
beinhaltet, wird diese durch den Namen des Quellpakets ersetzt, wie er aus dem
Changelog bestimmt wird. Der vorgegebene Wert für den
regulären Ausdruck ist: »PACKAGE(-.+)?«, daher entspricht er
Verzeichnisnamen wie PACKAGE und PACKAGE-Version.
UMGEBUNGSVARIABLEN¶
Da Umgebungsvariablen den Bau eines Pakets beeinflussen, oft ungewollt,
reduziert
debuild die Umgebung, indem es alle Umgebungsvariablen
außer den Optionen
TERM,
HOME,
LOGNAME,
GNUPGHOME,
PGPPATH,
GPG_AGENT_INFO,
FAKEROOTKEY,
DEB_*, den
SCHALTERNvariablen (
C,
CPP,
CXX,
LD und
F) und ihren
_APPEND-Gegenstücken
sowie den Locale-Variablen
LANG und
LC_* entfernt.
TERM ist, falls es nicht gesetzt wurde, auf »dumb« gesetzt
und
PATH ist auf »/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11«
gesetzt.
Falls erforderlich ist, dass eine bestimmte Umgebungsvariable den Bauprozess
unverändert durchläuft, kann dies mittels einer
--preserve-envvar-
Umgebungsvariablen angegeben werden (dies
kann auch als
-e Umgebungsvariable geschrieben werden). Die
Umgebung kann mittels der Option
--preserve-env unverändert
belassen werden.
PATH wird jedoch sogar in diesem Fall auf den oben
beschriebenen vernünftigen Wert gesetzt. Die
einzige
Möglichkeit,
PATH vor dem Zurücksetzen zu bewahren, besteht
darin, eine
--preserve-envvar PATH-Option anzugeben. Seien Sie aber
gewarnt, dass die Benutzung von Programmen, die an Nichtstandardorten liegen,
leicht dazu führen kann, dass das Paket beschädigt ist, da es nicht
auf Standardsystemen gebaut werden kann.
Beachten Sie, dass Verzeichnisse mittels der Option
--prepend-path an den
Anfang des zurückgesetzten
PATH hinzugefügt werden
können. Dies ist nützlich, wenn zum Bauen die Verwendung von
Werkzeugen wie
ccache oder
distcc gewünscht wird.
Es ist außerdem möglich, zu verhindern, dass etwas wie
FOO= bar debuild -e FOO durch
Schreiben von
debuild -e FOO=bar oder der Langform
debuild --set-envvar FOO=bar getippt werden muss.
SUPERUSER-ANFORDERUNGEN¶
debuild muss als Superuser ausgeführt werden, um
ordnungsgemäß zu funktionieren. Es gibt grundlegend verschiedene
Arten dies zu erreichen. Die erste und vorzugswürdige Methode besteht in
der Benutzung eines Befehls, um Root-Rechte zu erlangen. Es ist wahrscheinlich
am besten,
fakeroot(1) zu verwenden, da es nicht das Gewähren
echter Rechte beinhaltet.
super(1) und
sudo(1) sind weitere
Möglichkeiten. Falls keine
-r-Option (oder
--rootcmd)
angegeben wurde (und erinnern Sie sich daran, dass
dpkg-buildpackage
eine
-r-Option ebenfalls akzeptiert) und keine der folgenden Methoden
benutzt wird, dann wird stillschweigend von
-rfakeroot ausgegangen.
Die zweite Methode besteht darin, etwas wie
su(1) zu verwenden, um Root
zu werden, und dann alles als Root zu tun. Beachten Sie jedoch, dass
lintian abbrechen wird, falls es als Root oder Setuid-Root
ausgeführt wird; dies kann mittels der Option
--allow-root von
lintian verhindert werden, falls Sie wissen, was Sie tun.
Die dritte mögliche Methode ist, dass
debuild als Setuid-Root
installiert wurde. Dies ist nicht die Standardmethode und wird von jemandem
wie dem Systemadministrator installiert werden müssen. Es muss
außerdem erkannt werden, dass jedermann, der
debuild als Root oder
Setuid-Root ausführt,
vollen Zugriff auf den ganzen Rechner hat.
Diese Methode wird daher nicht empfohlen, wird aber funktionieren.
debuild könnte mit den Rechten 4754 installiert werden, so dass es
nur Mitglieder der besitzenden Gruppe ausführen können. Ein Nachteil
dieser Methode wäre, dass andere Benutzer nicht in der Lage wären,
dieses Programm zu verwenden. Es gibt viele andere Varianten dieser Option
unter Einbeziehung mehrerer Kopien von
debuild oder der Verwendung von
Programmen wie
sudo oder
super, um ausgewählten Anwendern
Root-Rechte zu gewähren. Falls der Systemadministrator dies tun
möchte, sollte er das Programm
dpkg-statoverride benutzen, um die
Rechte von
/usr/bin/debuild zu ändern. Dies wird sicherstellen,
dass diese Rechte über Upgrades hinweg erhalten werden.
HOOKS¶
debuild unterstützt eine Reihe von Hooks, wenn
dpkg-buildpackage ausgeführt wird. Beachten Sie, dass
debuild, falls einige der Hooks von
clean-hook bis
final-clean benutzt werden, einige Abschnitte des
dpkg-buildpackage-Prozesses emulieren wird, statt sie direkt
auszuführen, da
dpkg-buildpackage keine Hooks unterstützt.
Folgende Hooks sind verfügbar:
- dpkg-buildpackage-hook
- wird ausgeführt bevor dpkg-buildpackage
beginnt, indem dpkg-checkbuilddeps aufgerufen wird.
- clean-hook
- wird ausgeführt bevor dpkg-buildpackage
debian/rules clean ausführt, um den Quellverzeichnisbaum zu
bereinigen (wird sogar ausgeführt, falls der Verzeichnisbaum nicht
bereinigt wird, da -nc verwendet wird).
- dpkg-source-hook
- wird nach dem Bereinigen des Verzeichnisbaums und vor dem
Ausführen von dpkg-source ausgeführt (wird sogar
ausgeführt, falls dpkg-source nicht aufgerufen wird, da
-b, -B oder -A benutzt wird).
- dpkg-build-hook
- wird nach dpkg-source und vor dem Aufruf von
debian/rules build ausgeführt (wird sogar ausgeführt,
falls es sich um das Bauen von reinem Quelltext handelt, wodurch
debian/rules build nicht aufgerufen wird).
- dpkg-binary-hook
- wird zwischen debian/rules build und debian/rules
binary( -arch) ausgeführt. Läuft nur, falls
ein Binärpaket gebaut wird.
- dpkg-genchanges-hook
- wird nach dem Bau eines Binärpakets und vor dem Aufruf
von dpkg-genchanges ausgeführt.
- final-clean-hook
- wird nach dpkg-genchanges und vor dem
abschließenden debian/rules clean ausgeführt (wird
sogar ausgeführt, falls der Verzeichnisbaum »post-build«
nicht bereinigt wird, was Standard ist).
- lintian-hook
- wird (einmal) vor dem Aufruf von lintian
ausgeführt (wird sogar dann ausgeführt, wenn lintian
nicht aufgerufen wird).
- signing-hook
- wird nach dem Aufruf von lintian, bevor irgendwelche
Signierung erfolgt, ausgeführt (wird sogar dann ausgeführt, wenn
nichts signiert wird).
- post-dpkg-buildpackage-hook
- wird ausgeführt nachdem alles beendet ist.
Ein Hook-Befehl kann entweder in der Konfigurationsdatei angegeben werden, zum
Beispiel DEBUILD_SIGNING_HOOK=»foo« (beachten Sie, dass Bindestriche
in Unterstriche geändert werden!) oder als eine
--signing-hook-foo-Befehlszeilenoption. Der Befehl erlaubt bestimmte
Prozentzeichenersetzungen:
%% wird durch ein einzelnes
%-Zeichen
ersetzt,
%p wird durch den Paketnamen ersetzt,
%v durch die
Versionsnummer des Pakets,
%s durch die Versionsnummer der Quelle und
%u durch die Versionsnummer der Originalautoren. Weder
%s noch
%u werden eine Epoche erhalten.
%a wird
1 sein, falls die
unmittelbar folgende Aktion die Ausführung ist und
0 falls nicht
(zum Beispiel wird
%a im
dpkg-source-Hook
1 werden, falls
dpkg-source ausgeführt werden soll und
0 falls nicht). Dann
wird es zum Erledigen an die Shell gereicht, daher kann es Weiterleitungen und
Ähnliches enthalten. Um zum Beispiel nur den
dpkg-source-Hook
auszuführen, falls
dpkg-source ausgeführt wird, könnte
der Hook etwas wie »if [ %a -eq 1 ]; then …; fi« sein.
Bitte seien Sie mit Hooks vorsichtig, da ihre falsche Verwendung zu
Paketen führen kann, die nicht aus der Quelle gebaut werden können
(FTBFS/fail to build from source). Sie können nützlich sein, um
Momentaufnahmen von Dingen aufzuzeichnen oder dergleichen.
Schlussendlich können nur
dpkg-buildpackage-hook und die Hooks ab
lintian-hook benutzt werden, falls
dpkg-cross installiert ist.
(Dies ist deshalb, weil
debuild intern
dpkg-buildpackage neu
implementiert, aber nicht versucht den
dpkg-cross-Ersatz dieses Skripts
neu zu implementieren.
OPTIONEN¶
Einzelheiten finden Sie oben.
- --no-conf, --noconf
- keine Konfigurationsdateien lesen, Dies kann nur als erste
auf der Befehlszeile angegebene Option benutzt werden.
- --rootcmd=Befehl-zum-Erlangen-von-Root-Rechten,
-rBefehl-zum-Erlangen-von-Root-Rechten
- Befehl zum Erlangen von Root- (oder Fake-Root-)
Rechten
- --preserve-env
- bereinigt die Umgebung nicht, ausgenommen PATH
- --preserve-envvar=Variable,
-eVariable
- entfernt die Variable Variable nicht aus der
Umgebung
- Falls Variable mit einem Stern (»*«)
endet, dann werden alle Variablen, deren Namen zum Teil von
Variable vor dem Stern passen, erhalten.
- --set-envvar=Variable=Wert,
-e Variable=Wert
- setzt die Umgebungsvariable Variable auf Wert
und entfernt sie nicht aus der Umgebung.
- --prepend-path=Wert
- Sobald der normalisierte PATH gesetzt ist, wird ihm
Wert vorangestellt.
- --lintian
- führt lintian nach dpkg-buildpackage
aus. Dies ist das Standardverhalten und verkehrt alle
Konfigurationsdateidirektiven ins Gegenteil.
- --no-lintian
- führt lintian nicht nach
dpkg-buildpackage aus.
- --no-tgz-check
- prüft nicht einmal, falls dpkg-buildpackage
ausgeführt wird und die Versionsnummer eine Debian-Revision hat, ob
die .orig.tar.gz-Datei oder das .orig-Verzeichnis existiert,
bevor das Bauen gestartet wird.
- --tgz-check
- prüft, falls dpkg-buildpackage ausgeführt
wird und die Versionsnummer eine Debian-Revision hat, ob die
.orig.tar.gz-Datei oder das .orig-Verzeichnis existiert,
bevor das Bauen gestartet wird. Dies ist das Standardverhalten.
- --username Benutzername
- verwendet beim Signieren debrsign anstelle von
debsign. Benutzername gibt die Legitimation an, die
verwendet werden soll.
- --foo-hook=Hook
- setzt einen Hook, wie oben beschrieben. Falls Hook
leer ist, entfernt dies den Hook.
- --clear-hooks
- bereinigt alle Hooks. Sie können später durch
Befehlszeilenoptionen wieder eingesetzt werden.
- --check-dirname-level N
- Die Erklärung dieser Option finden Sie im
vorhergehenden Abschnitt Prüfung von
Verzeichnisnamen.
- --check-dirname-regex
regulärer_Ausdruck
- Die Erklärung dieser Option finden Sie im
vorhergehenden Abschnitt Prüfung von
Verzeichnisnamen.
- -d
- führt nicht dpkg-checkbuilddeps aus, um
Bauabhängigkeiten zu prüfen.
- -D
- führt dpkg-checkbuilddeps aus, um
Bauabhängigkeiten zu prüfen.
KONFIGURATIONSVARIABLEN¶
Die beiden Konfigurationsdateien
/etc/devscripts.conf und
~/.devscripts werden durch eine Shell eingelesen, um
Konfigurationsvariablen zu setzen. Befehlszeilenoptionen können benutzt
werden, um Konfigurationsdateieinstellungen außer Kraft zu setzen,
andernfalls kann die Option
--no-conf benutzt werden, um das Lesen
dieser Dateien zu vermeiden. Einstellungen aus Umgebungsvariablen werden
ignoriert, wenn diese Konfigurationsdateien gelesen werden. Die derzeit
erkannten Variablen sind:
- DEBUILD_PRESERVE_ENV
- Falls dies auf yes gesetzt ist, ist es so, als ob
der Befehlszeilenparameter --preserve-env benutzt würde.
- DEBUILD_PRESERVE_ENVVARS
- die Umgebungsvariablen, die belassen werden sollen. Dies
sollte eine durch Kommas getrennte Variablenliste sein. Dies entspricht
der Verwendung mehrerer --preserve-envvar- oder
-e-Optionen.
- DEBUILD_SET_ENVVAR_Variable=Wert
- Dies entspricht
--set-envvar=Variable=Wert.
- DEBUILD_PREPEND_PATH
- Dies entspricht --prepend-path.
- DEBUILD_ROOTCMD
- Diese Variable auf Programm zu setzen ist die
Entsprechung von -rProgramm.
- DEBUILD_TGZ_CHECK
- Diese Variable auf no zu setzen ist dasselbe wie die
Befehlszeilenoption --no-tgz-check.
- DEBUILD_SIGNING_USERNAME
- Das Setzen dieser Variable entspricht der Benutzung der
Befehlszeilenoption --username.
- DEBUILD_DPKG_BUILDPACKAGE_OPTS
- Diese Optionen werden an den Aufruf von
dpkg-buildpackage weitergegeben werden. Sie werden vor allen
anderen Befehlszeilenoptionen übergeben. Falls eine Option ein
Leerzeichen enthalten soll, muss durch Verwendung zusätzlicher
Anführungszeichen verhindert werden, dass die Shell die Option in
mehrere trennt. Um zum Beispiel sicherzustellen, dass immer (auch beim
Sponsern) Ihr eigener GPG-Schlüssel verwendet wird, kann die
Konfigurationsdatei folgende Zeile enthalten:
-
DEBUILD_DPKG_BUILDPACKAGE_OPTS="-k'Julian Gilbey <jdg@debian.org>' -sa"
- die genau zwei Optionen angibt. Ohne die zusätzlichen
einfachen Anführungszeichen würde dpkg-buildpackage
berechtigterweise beklagen, dass Gilbey eine unbekannte Option ist
(es beginnt nicht mit einem --Zeichen.
- Falls diese Option eine -r-, -d- oder
-D-Option enthält, wird diese immer durch debuild
mitberücksichtigt. Beachten Sie, dass eine -r-Option in dieser
Variable die Einstellung DEBUILD_ROOTCMD außer Kraft
setzt.
- DEBUILD_FOO_HOOK
- die Hook-Variable für den Hook foo. Weitere
Einzelheiten finden Sie im vorhergehenden Abschnitt über Hooks.
Standardmäßig ist sie leer.
- DEBUILD_LINTIAN
- Soll lintian ausgeführt werden? Falls dies auf
no gesetzt ist, dann wird lintian nicht
ausgeführt.
- DEBUILD_LINTIAN_OPTS
- Dies sind Optionen, die an den Aufruf von lintian
übergeben werden sollen. Sie werden vor einer Befehlszeilenoption
angegeben. Diese Variable wird verwendet, wie bei
DEBUILD_DPKG_BUILDPACKAGE_OPTS beschrieben.
- DEVSCRIPTS_CHECK_DIRNAME_LEVEL,
DEVSCRIPTS_CHECK_DIRNAME_REGEX
- Die Erklärung dieser Variablen finden Sie im
vorhergehenden Abschnitt Prüfung von Verzeichnisnamen.
Beachten Sie, dass dies paketweite Konfigurationsvariablen sind und daher
alle devscripts-Skripte beeinflussen, die ihren Wert prüfen.
Dies wird in ihren jeweiligen Handbuchseiten und in
devscripts.conf(5) beschrieben.
BEISPIELE¶
Um Ihr eigenes Paket zu bauen, führen Sie einfach
debuild aus dem
Quellen-Verzeichnis aus.
dpkg-buildpackage(1)-Optionen können auf
der Befehlszeile übergeben werden.
Die typischen Befehlszeilenoptionen, um nur die binären Pakete zu bauen,
ohne die .changes-Datei (oder die nicht existierende .dsc-Datei) zu signieren:
-
debuild -i -us -uc -b
Ändern Sie das
-b in
-S, um nur ein Quellpaket zu bauen.
Ein Beispiel, das
lintian verwendet, um die erzeugten Pakete testen, und
diesem eine Option mitgibt:
-
debuild --lintian-opts -i
Beachten Sie hier die Reihenfolge der Optionen: Zuerst kommen die
debuild-Optionen, dann die von
dpkg-buildpackage, dann am Ende
die Prüferoptionen. (Und standardmäßig wird
lintian
aufgerufen.) Falls Sie feststellen, dass Sie wiederholt die selben
dpkg-buildpackage-Optionen benutzen, sollten Sie in Betracht ziehen,
die Konfigurationsdateioption
DEBUILD_DPKG_BUILDPACKAGE_OPTS zu
benutzen, wie oben beschrieben.
Um ein Paket für ein sponserndes Hochladen zu bauen, wobei
foobar_1.0-1.dsc und die jeweilige Quelldatei gegeben sind, führen
Sie Befehle wie die folgenden aus:
-
dpkg-source -x foobar_1.0-1.dsc
cd foobar-1.0
debuild -k0x12345678
wobei 0x12345678 durch Ihre GPG-Schlüsselkennung oder andere
Schlüsselbezeichner wie Ihre E-Mail-Adresse ersetzt wird. Außerdem
können Sie wieder die Konfigurationsdateioption
DEBUILD_DPKG_BUILDPACKAGE_OPTS wie oben beschrieben verwenden, um zu
vermeiden, dass Sie die Option
-k jedes Mal tippen müssen, wenn
Sie ein gesonsortes Hochladen durchführen.
SIEHE AUCH¶
chmod(1),
debsign(1),
dpkg-buildpackage(1),
dpkg-checkbuilddeps(1),
fakeroot(1),
lintian(1),
su(1),
sudo(1),
super(1) devscripts.conf(5) und
dpkg-statoverride(8)
AUTOR¶
Das Original-
debuild-Programm wurde von Christoph Lameter
<clameter@debian.org> geschrieben. Die aktuelle Version wurde von Julian
Gilbey <jdg@debian.org> verfasst.