DEBUILD(1)

BEZEICHNUNG
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 zugehörigen Dateien (mittels debsign(1) anstelle von dpkg-buildpackage(1) selbst; alle passenden Schlüsselsignierungsoptionen werden übergeben). Das Signieren wird übersprungen, falls die Distribution UNRELEASED ist, außer es wird die Option --force-sign von dpkg-buildpackage benutzt. 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 Erhalten 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 sichern.

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 Erhalten 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 potenziell 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 geregelt.

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.

The directory name is checked by testing whether the current directory name (as determined by pwd(1)) matches the regex given by the configuration file option DEVSCRIPTS_CHECK_DIRNAME_REGEX or by the command line option --check-dirname-regex regex. Here regex is a Perl regex (see perlre(3perl)), which will be anchored at the beginning and the end. If regex contains a '/', then it must match the full directory path. If not, then it must match the full directory name. If regex contains the string 'PACKAGE', this will be replaced by the source package name, as determined from the changelog. The default value for the regex is: 'PACKAGE(-.+)?', thus matching directory names such as PACKAGE and PACKAGE-version.

UMGEBUNGSVARIABLEN
Da Umgebungsvariablen den Bau eines Pakets beeinflussen, oft ungewollt, reduziert debuild die Umgebung, indem es alle Umgebungsvariablen außer TERM, HOME, LOGNAME, GNUPGHOME, PGPPATH, GPG_AGENT_INFO, GPG_TTY, DBUS_SESSION_BUS_ADDRESS, FAKEROOTKEY, DEBEMAIL, DEB_*, den FLAGS-Variablen (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 unverändert an den Bauprozess durchgeleitet wird, kann dies mittels einer --preserve-envvar-Umgebungsvariablen angegeben werden (dies kann auch als Option -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 bevorzugte 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 dergestalt vom 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 Benutzern 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 die Hooks dpkg-buildpackage bis (einschließlich) lintian an dpkg-buildpackage mittels ihrer zugehörigen Option --hook-name weitergereicht werden. Folgende Hooks sind verfügbar:

dpkg-buildpackage-hook
    wird ausgeführt bevor dpkg-buildpackage beginnt, indem dpkg-checkbuilddeps aufgerufen wird.

    Hook wird innerhalb der entpackten Quelle ausgeführt.

    entspricht dem Hook init von dpkg.

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).

    Hook wird innerhalb der entpackten Quelle ausgeführt.

    entspricht dem Hook preclean von dpkg.

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).

    Hook wird innerhalb der entpackten Quelle ausgeführt.

    entspricht dem Hook source von dpkg.

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 eines reinen Quellpakets handelt, wodurch debian/rules build nicht aufgerufen wird).

    Hook wird innerhalb der entpackten Quelle ausgeführt.

    entspricht dem Hook build von dpkg.

dpkg-binary-hook
    wird zwischen debian/rules build und debian/rules binary(-arch) ausgeführt. Läuft nur, falls ein Binärpaket gebaut wird.

    Hook wird innerhalb der entpackten Quelle ausgeführt.

    entspricht dem Hook binary von dpkg.

dpkg-genchanges-hook
    wird nach dem Bau eines Binärpakets und vor dem Aufruf von dpkg-genchanges ausgeführt.

    Hook wird innerhalb der entpackten Quelle ausgeführt.

    entspricht dem Hook changes von dpkg.

final-clean-hook
    wird nach dpkg-genchanges und vor dem abschließenden debian/rules clean ausgeführt (wird sogar ausgeführt, falls der Verzeichnisbaum nach dem Baunicht bereinigt wird, was Standard ist).

    Hook wird innerhalb der entpackten Quelle ausgeführt.

    entspricht dem Hook postclean von dpkg.

lintian-hook
    wird (einmal) vor dem Aufruf von lintian ausgeführt (wird sogar dann ausgeführt, wenn lintian nicht aufgerufen wird).

    Hook wird im übergeordneten Verzeichnis der entpackten Quelle ausgeführt.

    entspricht dem Hook check von dpkg.

signing-hook
    wird nach dem Aufruf von lintian, bevor irgendwelche Signierung erfolgt, ausgeführt (wird sogar dann ausgeführt, wenn nichts signiert wird).

    Hook wird im übergeordneten Verzeichnis der entpackten Quelle ausgeführt.

    entspricht dem Hook sign von dpkg, wird aber von debuild ausgeführt.

post-dpkg-buildpackage-hook
    wird ausgeführt, nachdem alles beendet ist.

    Hook wird im übergeordneten Verzeichnis der entpackten Quelle ausgeführt.

    entspricht dem Hook done von dpkg, wird aber von debuild ausgeführt.

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 führt bestimmte Prozentzeichenersetzungen durch: %% 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 enthalten. %a wird 1 sein, falls die unmittelbar folgende Aktion ausgeführt wird 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.

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, -eVariable=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 in dieser Reihenfolge eingelesen, um Konfigurationsvariablen zu setzen. Befehlszeilenoptionen können benutzt werden, um einige der 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 erhalten 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 jeder anderen Befehlszeilenoption angegeben. Diese Variable wird verwendet, wie bei der Variablen 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 zu 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), dpkg-statoverride(8)

AUTOR
Das ursprüngliche debuild-Programm wurde von Christoph Lameter <clameter@debian.org> geschrieben. Die aktuelle Version wurde von Julian Gilbey <jdg@debian.org> verfasst.

ÜBERSETZUNG
Diese Übersetzung wurde mit dem Werkzeug po4a <URL:https://po4a.org/> durch Chris Leick c.leick@vollbio.de im Juli 2012 erstellt und vom deutschen Debian-Übersetzer-Team korrekturgelesen. Bitte melden Sie alle Fehler in der Übersetzung an debian-l10n-german@lists.debian.org oder als Fehlerbericht an das Paket devscripts. Sie können mit dem folgenden Befehl das englische Original anzeigen »man -L C Abschnitt deutsche_Handbuchseite«.