Kapitel 6. Debian-Pakete im Detail
Zurück | 6.5 Erstellen, prüfen und verwalten von Debian-Paketen | Weiter

## 6.5 Erstellen, prüfen und verwalten von Debian-Paketen

### 6.5.1 `dpkg-buildpackage`

Nachdem die Vorbereitungen an den Dateien im Verzeichnis `debian/` abgeschlossen sind, kann mit dem Programm `dpkg-buildpackage` das Paket erstellt werden.

`dpkg-buildpackage` wird ohne weitere Parameter versuchen, die Sourcen und die Changes-Datei des Pakets digital zu signieren. Hierzu wird ein vorhandener GnuPG-Key benutzt. Ist kein solcher Key erzeugt worden, so kann das Signieren mit den Optionen `-us` (unsigned source) und `-uc` (unsigned changes) verhindert werden. Im einfachsten Fall genügt also das Kommando `dpkg-buildpackage -us -uc` (als „root“), um das Paket zu erzeugen.

`dpkg-buildpackage` verfügt natürlich noch über viele weitere Optionen:

    debian:~# dpkg-buildpackage -h
    Debian dpkg-buildpackage .
    Copyright (C) 1996 Ian Jackson.
    Copyright (C) 2000 Wichert Akkerman
    This is free software; see the GNU General Public Licence version 2
    or later for copying conditions.  There is NO warranty.

    Usage: dpkg-buildpackage [options]
    Options: -r<gain-root-command>
             -p<sign-command>
    	 -d            do not check build dependencies and conflicts
    	 -D            check build dependencies and conflicts
    	 -k<keyid>     the key to use for signing
             -sgpg         the sign-command is called like GPG
             -spgp         the sign-command is called like PGP
             -us           unsigned source
             -uc           unsigned changes
             -a<arch>      Debian architecture we build for (implies -d)
             -b            binary-only, do not build source } also passed to
             -B            binary-only, no arch-indep files } dpkg-genchanges
             -S            source only, no binary files     }
             -t<system>    set GNU system type  } passed to dpkg-architecture
             -v<version>   changes since version <version>      }
             -m<maint>     maintainer for package is <maint>    }
             -e<maint>     maintainer for release is <maint>    } only passed
             -C<descfile>  changes are described in <descfile>  }  to dpkg-
             -si (default) src includes orig for rev. 0 or 1    } genchanges
             -sa           uploaded src always includes orig    }
             -sd           uploaded src is diff and .dsc only   }
             -nc           do not clean source tree (implies -b)
             -tc           clean source tree when finished
             -ap           add pause before starting signature process
             -h            print this message
             -W            Turn certain errors into warnings.      } passed to
             -E            When -W is turned on, -E turned it off. } dpkg-source
             -i[<regex>]   ignore diffs of files matching regex } only passed to dpkg-source

`dpkg-buildpackage` benötigt eine Umgebung, die der späteren Installationsumgebung ähnlich ist. Das Paket kann als Superuser (root) erzeugt werden, um dies zu gewährleisten. Nun macht es wenig Sinn einen GnuPG-Key für den Superuser zu erzeugen. Um dieses Problem zu umgehen, dient die Option `-r`, unmittelbar gefolgt von einem Kommando, das es dem Benutzer erlaubt, Kommandos als Superuser auszuführen, bzw. das eine virtuelle root-Umgebung schafft. Dies kann beispielsweise das Kommando `fakeroot` oder `sudo` sein, ggf. ist natürlich die Konfiguration des Programms (sudo) für diesen Benutzer anzupassen.

Viele der weiteren Optionen können und sollten in den Konfigurationsdateien im Verzeichnis `debian/` definiert werden; bei Bedarf können diese aber auch auf der Kommandozeile angepasst werden.

### 6.5.2 `cvs-buildpackage`

`cvs-buildpackage` unterstützt das Erzeugen von Debian-Paketen, bei denen die Sourcen des Pakets mit CVS verwaltet werden. `cvs-buildpackage` ist ein Skript, das `dpkg-buildpackage` nutzt. Dabei wird zunächst die Datei `debian/changelog` interpretiert und die aktuelle Paketversion exportiert. Es wird überprüft, ob alle Änderungen bereits in den CVS-Baum importiert wurden, sollte dies nicht der Fall sein, so wird der Vorgang abgebrochen und dem Benutzer wird die Möglichkeit gegeben, die veränderten Dateien in das CVS zu importieren.

Beachten Sie, dass das Arbeitsverzeichnis, aus dem heraus `cvs-buildpackage` aufgerufen wird, die spätere Entwicklungsumgebung enthält. In diesem Verzeichnis werden die aus dem CVS exportierten Dateien gespeichert, und `cvd-buildpackage` hat die volle Kontrolle über dieses Verzeichnis. Das bedeutet, dass alle Dateien, mit Ausnahme der originalen Sourcen, gelöscht werden können. Stellen Sie sicher, dass Sie nicht in Ihrem aktuellen Entwicklungszweig mit diesem Programm arbeiten; es können alle Daten verloren gehen!

Zusammen mit den Programmen `cvs-inject` und `cvs-upgrade` bildet dieses Programm die Infrastuktur, die es Debian-Entwicklern erlaubt, CVS als zentrales Entwicklungswerkzeug einzusetzen. Hierbei wird insbesondere die Verwendung verschiedener Release-Stände eines Pakets, also beispielsweise „stable“, „unstable“ oder auch „Experimental“, unterstützt.

Optionen

`-h`

  Zeigt eine kurze Hilfe zu diesem Program an.

`-m<module>`

  Der Name des Moduls im CVS.

`-P<paketname>`

  Gibt den Namen des Pakets an. Dies ist sinnvoll, wenn das Programm nicht im CVS-Baum ausgeführt wird.

`-V<version>`

  Bestimmt die Versionsnummer des Pakets. Zusammen mit dem Paketnamen kann diese Option außerhalb eines CVS-Baums verwendet werden.

`-T<tag>`

  Der CVS-Tag zum Exportieren der Sourcen des Pakets. Hierbei wird nicht versucht, das Tag aus der Versionsnummer heraus zu ermitteln. Dies setzt zwingend voraus, dass Sie wissen, was dies bedeutet...

`-U<tag>`

  CVS-Tag, aus dem die Sourcen exportiert werden sollen. Diesmal wird nicht versucht, aus der Versionsnummer zu extrahieren. Auch hier: Überlegen Sie genau, ob dies gewünscht ist.

`-C<Build Command>`

  Name des Programms, um die Debian-Pakete zu erzeugen; normalerweise wird dies `dpkg-buildpackage` sein. Der Benutzer kann aber auch ein beliebiges anderes Programm oder Skript verwenden. Beispielsweise kann das Kommando `chroot /opt/root dpkg-buildpackage` benutzt werden, um das Paket in einer abgeschirmten „chroot“-Umgebung zu erzeugen. Ein anderes Beispiel wäre die Verwendung von `pdebuild --auto-debsign --buildresult ../`, um die Pakete mittels `pbuilder` zu erzeugen. Dieses Argument überschreibt die Umgebungsvariable `CVSDEB_BUILDPACKAGE` und auch die Variable `conf_buildpackage` in der Konfigurationsdatei.

`-G<get method>`

  Mit dieser Option kann ein Archiv des aktuellen Quellcodes aus dem Netz geladen werden. Dies überschreibt ggf. eine bereits bestehende Datei mit gleichem Namen. Üblicherweise werden hier Programme wie `wget` oder `curl` eingesetzt werden. Diese Option überschreibt die Umgebungsvariable `CVSDEB_GET_ORIG` und die Option `conf_get_orig` in der Konfigurationsdatei.

`-A`

  Diese Option verwendet `apt-get source`, um ein aktuelles Archiv des Quellcodes zu beschaffen. Ist bereits ein aktuelles Archiv vorhanden, so hat diese Option keinerlei Wirkung. Werden die Optionen `-A` und `-G` zugleich angegeben, so wird zuerst `-G` beachtet. Hiermit wird die Umgebungsvariable `CVSDEB_USE_APT` sowie die Variable `conf_use_apt` in der Konfigurationsdatei überschrieben.

`-R<root directory>`

  Das Wurzel-Verzeichnis des ursprünglichen Quellcodes. Es wird erwartet, dass das Archiv mit dem Quellcode im Verzeichnispfad `<Wurzelverzeichnis><Paketname>/` zu finden ist, falls nicht das Arbeitsverzeichnis auf einen anderen Pfad gesetzt ist oder der Quellcode aus dem CVS exportiert wird. Wird das Arbeitsverzeichnis von `cvs-buildpackage` gesetzt (auf der Kommandozeile, in der Konfigurationsdatei oder durch Setzen der Umgebungsvariablen), so wird die Angabe für das Wurzelverzeichnis ignoriert.

`-W<Arbeitsverzeichnis>`

  Diese Option gibt den vollen Pfad zum Arbeitsverzeichnis von `cvs-buildpackage` an, in dem der Quellcode aus dem CVS exportiert wird und in dem die Datei `<package name>_<version>.orig.tar.gz` liegt. Es ist nicht zwingend notwendig, dass ein Archiv mit dem originalen Quellcode vorhanden ist, da dies auch aus den Quellen aus dem CVS-Baum erzeugt werden kann. Hierbei kann es jedoch zu Unterschieden kommen, wenn bereits Veränderungen im CVS vorgenommen wurden. Bei Verwendung der Version aus dem CVS wird als Dateiname für das Archiv `upstream_version_<version>` verwendet, und zwar ohne Angabe der Debian-Revision. Die Verwendung dieser Option überschreibt die Angaben in der Umgebungsvariablen `CVSDEB_WORKDIR` und in der Variablen `conf_workdir` in der Konfigurationsdatei.

`-F`

  Diese Option, „Force“, hat nur Auswirkungen, wenn sie im Quellcodeverzeichnis benutzt wird. Dies bewirkt, dass `cvs tag -F` aufgerufen wird, bevor die Quellen aus dem CVS exportiert werden. Es werden hierbei die Umgebungsvariable `CVSDEB_FORCETAG` sowie die Konfigurationsvariable `conf_forcetag` überschrieben.

`-E`

  Diese Option bewirkt einen „Full Export“. Normalerweise exportiert `cvs-buildpackage` alle Daten aus dem CVS-Baum. Ist eine Datei `orig.tar.gz` nicht vorhanden, so wird der komplette CVS-Baum aus dem CVS exportiert, unabhängig davon, ob diese Option angegeben wird oder nicht. Dies überschreibt die Umgebungsvariable `CVSDEB_FULLEXPORT` und die Konfigurationsvariable `conf_fullexport`.

`-op`

  Das Gegenteil von „Full Export“. Mit dieser Option wird eine Datei `orig.tar.gz` im aktuellen Arbeitsverzeichnis von `cvs-buildpackage` entpackt. Danach wird `cvs rdiff` benutzt, um den Quellcode-Baum mit dem aktuellen Stand aus dem CVS abzugleichen.

`-ctp`

  Diese Option setzt den String `package_` vor jedes CVS-Tag. Dies überschreibt den Konfigurationsdatei-Eintrag `conf_forcetag` und die Umgebungsvariable `CVSDEB_PACKAGEINTAG`. Normalerweise wird dieser String nicht vor das CVS-Tag geschrieben.

`-n`

  Diese „No-Exec-Option“ bewirkt einen kompletten Testlauf von `cvs-buildpackage`, ohne tatsächlich Kommandos auszuführen; eine reine Simulation.

`-f<fix_skript>`

  Mit dieser Option kann ein Skript angegeben werden, das im Quellcode-Verzeichnis ausgeführt wird, um Zugriffsrechte zu korrigieren. Dies ist notwendig, wenn neue Skripte von zusätzlichen Patches angelegt wurden.

`-H<hook_script>`

  Mit dieser Option wird ein Skript vor dem Aufruf von `dpkg-buildpackage` aufgerufen. Dies überschreibt die Umgebungsvariable `CVSDEB_HOOK`, die wiederrum die Konfigurationsvariable `conf_hook_script` überschreibt.

`-x<prefix>`

  Setzt das CVS-Präfix für das voreingestellte Modul. Dies überschribt die Umgebungsvariable `CVSDEB_PREFIX`.

Alle weiteren Kommandozeilenargumente werden nicht interpretiert und vollständig an das Programm `dpkg-buildpackage` durchgereicht.

Neben den Kommandozeilenoptionen versucht `cvs-buildpackage` zunächst in der Datei `/etc/cvsdeb.conf` systemweite Einstellungen zu finden. Danach wird, wenn vorhanden, eine benutzerbezogene Datei `~/.cvsdeb.conf` gelesen und interpretiert.

### 6.5.3 `cvs-autoreleasedeb`

`cvs-autoreleasedeb` erlaubt die Übertragung von Paketen, auf einen Server, welche von `cvs-buildpackage` aus einem CVS-Modul erzeugt wurden. CVS

`cvs-autoreleasedeb` verwaltet Informationen zu allen Paketen die automatisch auf einen Server übertragen werden sollen. Wird die Datei `debian/changelog` im CVS aktualisiert und die Debian-Versionsnummer des Paketes wird dabei vergrössert, so wird dieses Paket automatisch auf den Server übertragen.

Alle Einstellungen dieses Prgrammes werden in der Konfigurationsdatei`cvs-autoreleasedeb.conf` verwaltet. `cvs-autoreleasedeb` kennt keinerlei Kommandozeilenparameter.

`cvs-autoreleasedeb` kann auf zwei Arten eingesetzt werden. Zunächst ist es möglich als Benutzer `cvs-autoreleasedeb` das Skript über einen Cron-Job aufzurufen. Dies ist sinnvoll wenn regelmässig neue Versionen der Pakete (beispielsweise im Rahmen eines Softwareentwicklungs-Projektes) zur Verfügung gestellt werden sollen. In diesem Fall wird die Konfigurationsdatei `/etc/cvs-autoreleasedeb.conf` gelesen und ausgewertet, die Pakete werden im Verzeichnis `/var/lib/cvs-autoreleasedeb/` erzeugt. Soll`cvs-autoreleasedeb` auf diese Weise genutzt werden, so ist die Datei `/etc/default/cvs-autoreleasedeb` anzupassen. Die Ausgabe des Programmes `cvs-autoreleasedeb` wird in die Datei `/var/log/cvs-autoreleasedeb/run.log` geschrieben.

Alternativ kann `cvs-autoreleasedeb` durch den Benutzer direkt aufgerufen werden. In diesem Fall wird als Konfigurationsdatei die Datei `$HOME/.cvs-autoreleasedeb/conf` eingesetzt. Die erzeugten Pakete landen im Verzeichnis `$HOME/.cvs-autoreleasedeb/`. `cvs-autoreleasedeb` setzt hierbei keine Vorgabewerte ein, es muss also zwingend eine sinnvolle Konfigurationsdatei vorhanden sein.

### 6.5.4 `debchange`

Mit `debchange` kann die Datei `debian/changelog` in einem Debian-Source-Verzeichnisbaum verwaltet werden. Vereinfacht kann auch der Alias `dch` verwendet werden. Das Kommando `debchange` muss immer innerhalb des Verzeichnisses aufgerufen werden, in dem sich die Sourcen zu dem zu erstellenden Debian-Paket befinden. Es wird ein Texteditor gestartet und automatisch ein neuer Eintrag dem `changelog` hinzugefügt, (Es werden die Umgebungsvariablen `VISUAL` und `EDITOR` benutzt, um den gewünschten Editor zu bestimmen.) Wird der gewünschte Text bereits auf der Kommandozeile angegeben, so kann `debchange` auch in einem Skript ohne weitere Interaktion des Benutzers ablaufen. Der Eintrag wird an der entsprechenden Stelle hinzugefügt, inklusive aller notwendigen Umbrüche.

Die Syntax für dieses Kommando lautet:

    debchange [options] [text ...]
    dch [options] [text ...]

Wird der Editor ohne Änderungen an der Datei verlassen, so wird auch von `debchange` keine weitere Änderung an der Datei vorgenommen. Wenn ein Editor benutzt wird, der mit der Option `+n` an eine bestimmte Stelle in einem Dokument springen kann, so wird die Schreibmarke direkt an die passende Stelle in der `changelog`-Datei gesetzt.

Beachten Sie, dass `changelog`-Dateien immer mit einer UTF-8-Kodierung gespeichert werden. Sollte dies nicht der Fall sein, so können Sie das Programm `iconv` verwenden, um die Datei umzuwandeln.

`debchange` kann darüber hinaus mit der Option `--closes` Einträge erzeugen, die dazu führen, dass ein Bug im Debian-Bug-Tracking-System geschlossen wird. Hierzu wird das Debian BTS (Debian Bug Tracking System, http://bugs.debian.org/) nach dem Titel und dem Paketnamen durchsucht. Mit der Option `--noquery` oder der Umgebungsvariablen `DEBCHANGE_QUERY_BTS`, die auf den Wert `no` gesetzt sein muss, kann diese Abfrage verhindert werden.

Meistens wird eine der Optionen `--append`, `--increment` oder `--newversion`, wie weiter unten beschrieben, eingesetzt. Werden keine Optionen angegeben, so versucht `debchange` eine Logdatei von `dupload` oder `dput` im darüberliegenden Verzeichnis zu finden um zu ermitteln ob die bestehende Version eines Paketes bereits erfolgreich auf einen Server übertragen wurde. Die Ausgabe einer Warnung erfolgt falls eine Logdatei gefunden wurde, in dieser jedoch kein erfolgreicher Upload verzeichnet ist.

Werden die Optionen `--increment` und `--newversion` benutzt, so wird der Name und die E-Mail Adresse für die neue Version wie folgt ermittelt. Ist die Umgebungsvariable `DEBFULLNAME` gesetzt, so wird der Inhalt als Name des Maintainers (Paketbetreuer) verwendet. Weiterhin wird die Umgebungsvariable `DEBEMAIL` ausgewertet. Ist diese gesetzt, so wird der Inhalt als Mailadresse verwendet. Hat diese Variable einen Wert der der Syntax `name <email>` entspricht, so wird auch der Name aus dieser Variablen verwendet, falls `DEBFULLNAME` nicht gesetzt ist.

Ist die Variable `DEBEMAIL` nicht gesetzt, so wird versucht die Information aus der Variablen `EMAIL` zu ermitteln. Konnte der Name bisher nicht ermittel werden, so wird der Systemaufruf `getpwuid(3)` verwendet um den Namen aus der Datei `/etc/passwd` zu ermitteln. Schlägt auch dies fehl, so wird der letzte Eintrag in der `changelog`-Datei ausgewertet.

Konnte die E-Mailadresse nicht ermittelt werden, so wird versucht diese aus der Datei `/etc/mailname` zu ermitteln. Danach wird der Benutzername zusammen mit dem FQDN getestet. Gibt auch dies keinen sinnvollen Wert, so wird auch hier die Datei `changelog` ausgewertet. Abschliessend ist zu sagen, dass die Variablen `DEBFULLNAME` und `DEBEMAIL` gesetzt werden sollten wenn dieses Skript eingesetzt wird.

Besteht der Verzeichnisname der den Quellcode enthält aus dem Paketnamen und der Versionsnummer, so versucht `debchange` dieses Verzeichnis umzubenennen, falls die Upstream-Versionsnummer verändert wurde. Dies kann mit der Option `--preserve` auf der Kommandozeile oder auch in der Konfigurationsdatei verhindert werden, wie weiter unten beschrieben.

#### 6.5.4.1 Überprüfung von Verzeichnisnamen

Wie viele andere Skripte aus dem Paket `devscripts` versucht auch `debchange`, rekursiv im Verzeichnisbaum die Datei `debian/changelog` zu finden. Wird diese Datei gefunden, so wird überprüft, ob das darüber liegende Verzeichnis dem Paketnamen entspricht. Wie dies genau durchgeführt wird, kann durch die beiden Konfigurationsvariablen `DEVSCRIPTS_CHECK_DIRNAME_LEVEL` und `DEVSCRIPTS_CHECK_DIRNAME_REGEX` sowie deren Kommandozeile-Gegenstücke `--check-dirname-level` bzw. `--check-dirname-regex` beeinflusst werden.

Die Variable `DEVSCRIPTS_CHECK_DIRNAME_LEVEL` kann dabei die folgenden Werte annehmen:

`0`

  Der Verzeichnisname wird nicht überprüft.

`1`

  Überprüft den Verzeichnisnamen nur, wenn bei der Suche nach der Datei `debian/changelog` ein Wechsel des Verzeichnisses notwendig ist.

`2`

  Der Verzeichnisname wird in jedem Fall überprüft.

Optionen

`--increment`, `-i`

  Erhöht die Versionsnummer des Pakets um eins. Dies erzeugt einen neuen Eintrag am Anfang des `changelog` mit den entsprechenden Kopf- und Fußzeilen. Handelt es sich um ein neues Debian-Paket, so wird auch der Verzeichnisname angepasst.

`--append`, `-a`

  Fügt einen neuen Eintag am Ende der aktuellen Version ein.

`--newversion`, `-v`

  Gibt eine spezifische Versionsnummer an (inklusive des Debian-Release) und verhält sich ansonsten wie die Option `--increment`. Auch hier wird der Verzeichnisname angepasst, wenn dies notwendig ist.

`--fromdirname`, `-d`

  Diese Option interpretiert die Versionsnummer aus dem aktuellen Verzeichnis, diese muss in der gebräuchlichen Form `paketname-versionsnummer` vorliegen.

`--closesnnnnn`,`[nnnnn,...]`

  Erzeugt `changelog`-Einträge, die die angegebenen Bug-Nummern im BTS schließen. Es wird eine Warnung ausgegeben, falls das Debian-BTS nicht erreichbar ist und die Option `--noquery` nicht angegeben wurde.

`--[no]query`

  Legt fest, ob das BTS benutzt werden soll, wenn entsprechende Einträge im `changelog` vorgenommen werden.

`--preserve`, `-p`

  Lässt den Verzeichnisnamen des Source-Baums unverändert, auch wenn sich die Versionsnummer des Pakets verändert.

`--no-preserve`

  Ändert den Verzeichnisnamen des Source-Baums nicht (die Voreinstellung).

`--distribution dist`, `-D dist`

  Setzt die angegebene Distribution in den `changelog`-Eintrag.

`--urgency urgency`, `-u urgency`

  Setzt den angegebenen Eintrag für die Dringlichkeit in die `changelog`-Datei. Der Standardwert ist „low“.

`--no-conf`, `--noconf`

  Benutzt keinerlei Voreinstellungen aus der Konfigurationsdatei. Dies muss als erst Option angegeben werden!

`--check-dirname-level N`

  Wie vorab beschrieben, beeinflusst diese Option das Durchsuchen von Verzeichnissen.

`--check-dirname-regex regex`

  Wie vorab beschrieben, beeinflusst diese Option das Durchsuchen von Verzeichnissen.

`--help`, `-h`

  Zeigt eine kurze Information als Hilfe an.

`--version`

  Zeigt Informationen zur Version und zum Copyright dieses Programms an.

`debchange` versucht beim Start die Konfigurationsdateien `/etc/devscripts.conf` und `~/.devscripts`, in dieser Reihenfolge, einzulesen. Werte in den Konfigurationsdateien können durch Optionen auf der Kommandozeile überschrieben werden. Folgende Variablen werden in den Konfigurationsdateien unterstützt:

`DEBCHANGE_PRESERVE`

  Wird diese Variable auf den Wert `yes` gesetzt, so hat dies die gleiche Wirkung wie die Kommandozeilenoption `--preserve`.

`DEBCHANGE_QUERY_BTS`

  Auf den Wert `no` gesetzt, bewirkt diese Variable das Gleiche wie die Kommandozeilenoption `--noquery`.

`DEVSCRIPTS_CHECK_DIRNAME_LEVEL`, `DEVSCRIPTS_CHECK_DIRNAME_REGEX`

  Wie zuvor beschrieben, beeinflussen diese beiden Variablen die Verzeichnisse, die nach einer Datei `debian/changelog` durchsucht werden sollen. Bei der Verwendung dieser Variablen in den globalen Konfigurationsdateien ist zu beachten, dass dies Einfluss auf alle Debian-Pakete hat, die auf diesem System erstellt werden.

Weiterhin werden von `debchange` die Umgebungsvariablen `DEBEMAIL`, `EMAIL` und `DEBFULLNAME` ausgewertet. Mit der Umgebungsvariable `VISUAL` oder `EDITOR` kann auch der bevorzugte Texteditor bestimmt werden.

### 6.5.5 `debdiff`

`debdiff` vergleicht die Dateien in zwei einzelnen oder auch in Gruppen von Debian-Paketen. Die Syntax für dieses Kommando lautet:

    debdiff [options] ... deb1 deb2
    debdiff [options] ... changes1 changes2
    debdiff [options] ... --from deb1a deb1b ...  --to deb2a deb2b ...
    debdiff [options] ... dsc1 dsc2

Beim Vergleich der Debian-Pakete werden alle Dateien verglichen, die direkt zum Paket gehören, also nicht die Hilfsskripte, die vor oder nach der Installation der Dateien aufgerufen werden. Angezeigt werden dabei alle neu hinzugekommenen oder aus dem Paket entfernten Dateien zwischen den beiden Versionen des Pakets. Weiterhin wird mit dem Programm `wdiff` ein Vergleich der `control`-Dateien in den Paketen vorgenommen und das Ergebnis angezeigt.

Es können mit `debdiff` auch Gruppen von Paketen verglichen werden, `debdiff` unterstützt dies auf zwei Arten: Zunächst können zwei `.changes`-Dateien angegeben werden. Die in diesen Dateien aufgeführten Debian-Pakete werden daraufhin verglichen, indem der Inhalt aller Pakete zusammengeführt wird. Hierzu müssen sich die Debian-Pakete im Verzeichnis der `.changes`-Datei befinden.

Alternativ können die gewünschten Debian-Pakete auf der Kommandozeile mittels der Optionen `--from` und `--to` angegeben werden. Hiermit kann festgestellt werden, ob bei einem Aufsplitten des Pakets Dateien verloren gegangen sind. `control`-Dateien werden in beiden Fällen nur beachtet, wenn lediglich zwei Debian-Pakete miteinander verglichen werden.

`debdiff` verwendet die Konfigurationsdateien aus dem Paket `devscripts`. Die Einstellungen in den Konfigurationsdateien können dabei immer mit den Kommandozeilenoptionen überschrieben werden.

Werden `debdiff` zwei Quellcode-Pakete (`.dsc`-Dateien) beim Aufruf übergeben, so werden die Inhalte dieser Quellcode-Pakete verglichen. Unterscheiden sich die beiden Pakete nur in der Debian-Versionsnummer (die Dateien `.orig.tar.gz` und `.dsc` sind gleich), dann wird das Programm `interdiff` benutzt, um die „Patches“ zu vergleichen. Ist dieses Programm nicht vorhanden, so wird `diff` verwendet, um die beiden Quellcode-Bäume miteinander zu vergleichen.

Optionen von `debdiff`

`--dirs`, `-d`

  Normalerweise werden Verzeichnisnamen beim Vergleich von Paketen ignoriert. Mit dieser Option kann `debdiff` dazu veranlasst werden, den Vergleich der Pakete auch auf Verzeichnisse anzuwenden.

`--nodirs`

  Ignoriert Verzeichnisse beim Vergleich. Dies ist die Voreinstellung; diese Option kann aber benutzt werden, wenn in den Konfigurationsdateien etwas anderes definiert wurde.

`--move FROM TO`, `-m FROM TO`

  Es kann vorkommen, dass Dateien oder Verzeichnisse zwischen Paketversionen verschoben werden. Mit dieser Option kann `debdiff` davon in Kenntnis gesetzt werden. Dabei ist zunächst (als `FROM`) der Name der Datei oder des Verzeichnisses in dem älteren Paket anzugeben. Als zweiter Parameter folgt dann die neue Position der Datei oder des Verzeichnisses.

  Es kann eine beliebige Anzahl von verschobenen Dateien oder Verzeichnissen angegeben werden, diese werden alle der Reihe nach abgearbeitet.

`--move-regex FROM TO`

  Wie die vorher beschriebene Option, jedoch wird die Angabe als regulärer Ausdruck in Perl-Schreibweise (`s/^FROM/TO/`) interpretiert.

`--nocontrol`

  Werden nur zwei Debian-Pakete verglichen, so werden normalerweise die `control`-Dateien mittels `wdiff` verglichen. Diese Option unterdrückt dieses Verhalten.

`--control`

  Vergleicht die `control`-Dateien. Dies ist die Voreinstellung, kann aber benutzt werden, um Informationen in den Konfigurationsdateien zu überschreiben.

`--wp`, `--wl`, `--wt`

  Reicht die Optionen `-p`, `-l` oder `-t` an das Programm `wdiff` weiter. Dies führt zu einer ausführlicheren Ausgabe von `wdiff`.

`--show-moved`

  Wenn mehrere Debian-Pakete auf der Kommandozeile angegeben wurden (über die `.changes`-Dateien oder mittels der `--from`/ `--to`-Syntax), dann zeigt diese Option auch die Dateien an, die zwischen den Paketen verschoben wurden.

`--noshow-moved`

  Dies ist die Voreinstellung (siehe vorhergehende Option). Hiermit kann eine Einstellung in den Konfigurationsdateien überschrieben werden.

`--no-conf`, `--noconf`

  Verhindert das Einlesen von Konfigurationsdateien. Dies muss als erste Option auf der Kommandozeile angegeben werden.

`--renamed FROM TO`

  Wird die Option `--show-moved` verwendet und ein Paket wird somit umbenannt, so wird `debdiff` eingesetzt um die Pakete zu vergleichen.

`--help`, `-h`

  Zeigt eine kurze Übersicht aller Optionen.

`--version`, `-v`

  Zeigt Informationen zur Version und zum Copyright dieses Programms.

`debdiff` benutzt die Konfigurationsdateien `/etc/devscripts.conf` und `~/.devscripts`. Alle in diesen Konfigurationsdateien verwendeten Optionen können auf der Kommandozeile überschrieben werden. `debdiff` benutzt die folgenden Variablen in den Konfigurationsdateien:

Konfigurationsvariablen

`DEBDIFF_DIRS`

  Wird diese Variable auf `yes` gesetzt, so wirkt dies wie die Kommandozeilenoption `--dirs`.

`DEBDIFF_CONTROL`

  Auf den Wert `no` gesetzt, bewirkt diese Option das Gleiche wie die die Kommandozeilenoption `--nocontrol`. Der Vorgabewert ist `yes`.

`DEBDIFF_SHOW_MOVED`

  Auf `yes` gesetzt, hat dies die Wirkung wie die Kommandozeilenoption `--show-moved`.

`DEBDIFF_WDIFF_OPT`

  Diese Variable wird zu `wdiff` weitergereicht und kann den Wert `-p`, `-l` oder `-t` annehmen.

  `wdiff` vergleicht zwei Dateien und gibt Informationen darüber aus, welche ganzen Wörter sich in diesen beiden Dateien unterscheiden. Ein Wort ist dabei eine Zeichenkette zwischen zwei Leerzeichen.

### 6.5.6 `dpkg-depcheck`

`dpkg-depcheck` ermittelt die Abhängigkeiten eines Programms. Hierbei wird das Programm mittels `strace` gestartet und werden die verwendeten Programme ermittelt. Die ausgegebene Liste kann mit verschiedenen Optionen den Bedürfnissen angepasst werden.

Zur Veranschaulichung hier ein Beispiel:

    fr@wasabi:~$ dpkg-depcheck -ab gpg --list-key 887EB817
    gpg: Hinweis: Alte voreingestellte Optionendatei '/home/fr/.gnupg/options'
    wurde ignoriert
    gpg: WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.
    gpg: siehe http://www.gnupg.org/faq.html für weitere Informationen
    pub  1024D/887EB817 2000-12-12 Frank Ronneburg <fr@openoffice.de>
    uid                            Frank Ronneburg <fr@leenuks.de>
    uid                            Frank Ronneburg <fr@belug.org>
    uid                            Frank Ronneburg <fr@peace-love-and-linux.de>
    sub  1024g/B91B2CCC 2000-12-12

    ----------------------------------------------------------------------
    The following files did not appear to belong to any package:
    /usr/lib/locale/locale-archive
    Packages needed:
      locales
      gnupg
      libbz2-1.0

    (Build-)Essential packages used:
      zlib1g
      libc6

Zunächst wird die Ausgabe des Programms, hier `gpg --list-key 887EB817`, ausgegeben. Danach folgen die Auswertungen von `dpkg-depcheck`. Die Optionen `-ab` zeigen die Abhängigkeiten zur Laufzeit (`-a`) und zur Erzeugung (`-b`) des Pakets an.

Die Syntax von `dpkg-depcheck` lautet:

    dpkg-depcheck [options] command

Optionen

`-a`, `--all`

  Zeigt alle Pakete an, die zur Ausführung des Kommandos benötigt werden.

`-b`, `--build-depends`

  Zeigt auch Pakete an, die zum Übersetzen dieses Programms benötigt werden. Berücksichtigt direkte und indirekte Anhängigkeiten.

`-d`, `--ignore-dev-deps`

  Zeigt keine Pakete an, die zur Entwicklung (`*-dev*`) benötigt werden.

`-m`, `--min-deps`

  Zeigt nur die minimal benötigten Pakete an.

`-C`, `--C-locale`

  Führt das Programm mit der angegebenen Sprachumgebung aus.

`--no-C-locale`

  Verändert die Sprachumgebung bei der Ausführung des Programms nicht.

`-l`, `--list-files`

  Zeigt die zu den Paketen gehörenden Dateien mit an.

`--no-list-files`

  Zeigt die zu den Paketen gehörenden Dateien nicht mit an.

`-o`, `--output=DATEI`

  Schreibt die Ausgabe in die angegebene Datei, anstatt diese auf der Standard-Ausgabe anzuzeigen.

`-O`, `--strace-output=DATEI`

  Schreibt die Ausgabe von `strace` in die angegebene Datei, anstatt diese auf der Standard-Ausgabe anzuzeigen.

`-f`, `--features=LIST`

  Aktiviert oder deaktiviert Funktionen, die als kommaseparierte Liste angegeben werden. Eine Funktion wird dabei mit dem vorangestellten Zeichen `+` aktiviert; zur Vereinfachung kann dieses Zeichen auch weggelassen werden. Funktionen werden durch das vorangestellte Zeichen `-` deaktiviert. Die möglichen Funktionen sind:

  `warn-local`

    Gibt eine Warnung aus wenn, Dateien in den Verzeichnissen `/usr/local/` oder `/var/local/` benutzt werden. Diese Funktion ist normalerweise aktiviert.

  `discard-check-version`

    Ignoriert den Aufruf von Programmen mit der Option `--version`. Dies wird häufig in Configure-Skripten benutzt. Diese Funktion ist normalerweise aktiviert.

  `trace-local`

    Versucht auch Dateien aus `/usr/local/` und `/var/local/` zu analysieren. Dies ist auf einem Debian-System meistens nicht sinnvoll, da dort keine Dateien abgelegt werden. Diese Funktion ist normalerweise deaktiviert.

  `catch-alternatives`

    Warnt bei Zugriffen auf Dateien die über Debian-Alternativen verwaltet werden (siehe Alternativen ). Diese Funktion ist normalerweise aktiviert.

  `discard-sgml-catalogs`

    Ignoriert SGML-Katalog-Dateien; diese werden von einigen SGML-Tools beim Starten geöffnet. Diese Funktion ist normalerweise aktiviert.

`--no-conf`, `--noconf`

  Verhindert das Einlesen von Konfigurationsdateien und muss als erste Option auf der Kommandozeile angegeben werden.

`-h`, `--help`

  Gibt einige Informationen zur Nutzung des Programms aus.

`-v`, `--version`

  Gibt die Versionsnummer und Informationen zum Copyright des Programms aus.

`dpkg-debcheck` nutzt die beiden Konfigurationsdateien `/etc/devscripts.conf` und `~/.devscripts`. Über die beschriebenen Kommandozeilenoptionen können die Werte in den Konfigurationsdateien überschrieben werden. Alternativ können hierzu auch Umgebungsvariablen genutzt werden.

`dpkg-debcheck` nutzt momentan nur die Umgebungsvariable `DPKG_DEPCHECK_OPTIONS`. Die hier angegebenen Optionen werden vor den Optionen auf der Kommandozeile ausgewertet. Hier ein Beispiel:

    DPKG_DEPCHECK_OPTIONS="-b -f-catch-alternatives"

### 6.5.7 `dscverify`

Mit `dscverify` können die PGP- oder GnuPG-Signaturen von `.changes`- oder `.dsc`-Dateien mit den Schlüsseln aus dem Debian-Schlüsselbund (aus dem Paket `debian-keyring`) überprüft werden. Mit einer Option können auch andere Schlüsselbunde angegeben werden. Es werden alle angegebenen Dateien in den `.changes`- und `.dsc`-Dateien überprüft. Werden keine Abweichungen festgestellt, so ist der Rückgabewert 0.

Optionen

`--keyringkeyring`

  Schlüsselbunddatei, die dem Schlüsselbund hinzugefügt werden soll.

`--no-conf`, `--noconf`

  Verhindert das Einlesen von Konfigurationsdateien. Muss als erste Option angegeben werden.

`--help`, `-h`

  Zeigt eine kurze Hilfe zu dem Programm an.

`--version`

  Zeigt Informationen zur Programmversion an.

Als einzige Konfigurationsvariable wird momentan `DSCVERIFY_KEYRINGS` unterstützt. Dies ist eine kommaseparierte Liste von Schlüsselbunden, die zur Überprüfung herangezogen werden sollen. Zusätzlich auf der Kommandozeile angegebene Schlüsselbunde werden ebenfalls berücksichtigt.

Es werden weiterhin die Konfigurationsdateien `/etc/devscripts.conf` und `~/.devscripts` ausgewertet. Diese werden ignoriert, wenn die Option `--no-conf` oder `--noconf` angegeben wird.

### 6.5.8 `grep-excuses`

Dieses Programm holt die Datei `update_excuses.html` aus dem Netz und durchsucht diese nach einem angegebenen Maintainer (Betreuer eines Debian Paketes). Diese Datei enthält, für die jeweils aktuelle „testing“ Distribution, „Ausreden“ der Betreuer warum ein Paket nicht aktuell oder in einem schlechten Zustand ist.

Die Syntax von `grep-excuses` lautet

    grep-excuses [options] [maintainer|package]

Wird beim Aufruf des Programmes kein Names eines Paketbetreuers angegeben, so wird versucht den Namen aus der Umgebungsvariablen `DEBFULLNAME` zu lesen. Schlägt auch dies fehl, so wird der Name aus den Konfigurationsdateien `/etc/devscripts.conf` und `~/.devscripts` aus dem Wert `GREP_EXCUSES_MAINTAINER` ermittelt.

Alternativ kann zum Namen des Betreuers auch ein Paketname auf der Kommandozeile angegeben werden.

### 6.5.9 `plotchangelog`

`plotchangelog` stellt Änderungen an einem Debian-Paket anhand der Informationen aus der Datei `changelog` grafisch dar. Die Syntax von `plotchangelog` lautet

    plotchangelog [options] changelog ...

`plotchangelog` nutzt das Programm `gnuplot` für die grafische Darstellung. Die X-Achse stellt dabei den Zeitpunkt der Release einer Version dar, die Y-Achse repräsentiert die Versionsnummer selbst. Jeder einzelne Release wird dabei durch einen Punkt auf der Zeitachse dargestellt, betreuen unterschiedliche Maintainer ein Paket, so wird für jeden Maintainer dieses Paketes eine gesonderte Linie mit Punkten in unterschiedlichen Farben gezeichnet.

Alternativ kann auf der Y-Achse die Grösse jedes Eintrages in der Datei `changelog` oder die Anzahl der beseitigten Fehler je Version des Paketes dargestellt werden.

Optionen

`-l`, `--linecount`

  Statt der Debian-Versionsnummer des Paketes für die Daten der Y-Achse, wird die Anzahl der Zeilen in der `changelog`-Datei für die Darstellung der Grafik verwendet. Diese Option kann nicht zusammen mit der Option `--bugcount` verwendet werden.

`-b`, `--bugcount`

  Statt der Debian-Versionsnummer des Paketes für die Daten der Y-Achse, wird die Anzahl der behobenen Fehler (Bugs) von einer Version zur nächsten für die Darstellung der Grafik verwendet. Die Anzahl der Fehler wird ermittelt indem nach Einträgen in der Form `#nnnn` in der Datei `changelog` gesucht wird. Werden die Werte nicht in dieser Form angegeben, so ist die erzeugte Grafik fehlerhaft. Diese Option kann nicht zusammen mit `--linecount` verwendet werden.

`-c`, `--cumulative`

  Zusammen mit einer der Optionen `--bugcount` oder `--linecount` wird der durchschnittliche Wert der Fehler bzw. Zeilen angezeigt.

`-v`, `--no-version`

  Zeigt nicht die Haupt-Versionsnummern (Upstream-Version) eines Paketes an. Dies ist bei vielen Änderungen an einem Paket sinnvoll um die Grafik übersichtlicher erscheinen zu lassen.

`-m`, `--no-maint`

  Differentiert nicht zwischen verschiedenen Betreuern (Maintainer) eines Paketes.

`-s datei`, `--save=datei`

  Speichert die erzeugte Grafik im Postscript-Format in der Datei `datei`, statt diese direkt anzuzeigen.

`-u`, `--urgency`

  Erzeugt grössere Punkte wenn das Paket mit einer höheren Priorität auf dem Server abgelegt wurde.

`--verbose`

  Zeigt das erzeugte Skript an welches an `gnuplot` weitergereicht wird. Diese Option dient zur Fehlersuche.

`-gcommands`, `--gnuplot="commands"`

  Diese Option erlaubt es weitere Kommandos an das Programm `gnuplot` durchzureichen. Diese werden im erzeugten Skript nach der Initialisierung von `gnuplot` aber noch vor dem eigentlichen „plot“-Kommando eingefügt. Auf diesem Weg kann das Layout der Grafiken beeinflusst werden. Weiterhin kann beispielsweise das Kommando `set terminal png color` verwendet werden um das Dateiformat für die Ausgabe, im Zusammenhang mit der Option `-s`, zu verändern.

`--help`

  Zeigt eine Hilfe zum Programm an.

`--version`

  Zeigt die Versionsnummer, den Autor und die Copyright-Informationen zu diesem Programmm an.

`changelog ...`

  Pfad und Dateiname zur auszuwertenden `changelog`-Datei. Werden mehrere Dateien angegeben, so werden die Informationen aus allen Dateien in einer Grafik zusammengefasst. Die Dateien können mit `gzip` komprimiert sein, sie werden automatisch entpackt. Textabschnitte in den Dateien die nicht dem Dateiformat einer Debian-Changelog Datei entsprechen werden ignoriert.

`--no-conf`

  Diese Option verhindert das Konfigurationsdateien ausgewertet werden. Es werden die Konfigurationsdateien `/etc/devscripts.conf` und `~/.devscripts` (in dieser Reihenfolge) in der Shell-Umgebung ausgewertet. Hierbei werden die folgenden Variablen genutzt

  `PLOTCHANGELOG_OPTIONS`

    Diese Variable ist eine Zeile von durch Leerzeichen getrennten Optionen die in jedem Fall zu benutzen sind, dies kann beispielsweise der String `-l -b` sein. Die Option `-g` oder `--gnuplot` ist hier nicht erlaubt und wird ggf. ignoriert.

  `PLOTCHANGELOG_GNUPLOT`

    Optionen für den Aufruf von `gnuplot`.

### 6.5.10 `debclean`

`debclean` be-„reinigt“ einen Quellcode-Verzeichnnisbaum. `debclean` durchsucht ab dem Verzeichnis aus dem heraus es aufgerufen wurde, alle Unterverzeichnisse und führt das Kommando `debian/rules clean` für jedes gefundene Debian-Quellcode Verzeichnis aus. Die entsprechenden Verzeichnisse werden anhand einer vorhandenen Datei `debian/changelog` gefunden, in der der Paketname dem Verzeichnisnamen entspricht. Dieser Vergleich wird später noch genauer erläutert.

Der Aufruf von `debclean` erfolgt anhand der Syntax

    debclean [options]

Wird die Option `--cleandebs` verwendet, so werden die Dateien mit der Endung `*.deb`, `*.changes` und `*.build` in allen Verzeichnissen entfernt. Die Dateien `.dsc`, `.diff.gz` und `(.orig).tar.gz` werden nicht verändert, so dass die aktuelle Version eines Paketes in jedem Fall wiederhergestellt werden kann. Weiterhin wird die Datei `.upload` nicht verändert, so dass `debchange` korrekt funktioniert.

Die Option `--nocleandebs` verhindert das zuvor beschriebene Verhalten. Voreingestellt ist, dass keine Dateien gelöscht werden. `debclean` nutzt das Kommendo `debuild` zum bereinigen des Verzeichnisbaumes.

#### 6.5.10.1 Überprüfung von Verzeichnisnamen

Wie viele andere Skripte aus dem Paket `devscripts` versucht auch `debclean`, rekursiv im Verzeichnisbaum die Datei `debian/changelog` zu finden. Wird diese Datei gefunden, so wird überprüft, ob das darüber liegende Verzeichnis dem Paketnamen entspricht. Wie dies genau durchgeführt wird, kann durch die beiden Konfigurationsvariablen `DEVSCRIPTS_CHECK_DIRNAME_LEVEL` und `DEVSCRIPTS_CHECK_DIRNAME_REGEX` sowie deren Kommandozeilen-Gegenstücke `--check-dirname-level` bzw. `--check-dirname-regex` beeinflusst werden.

Die Variable `DEVSCRIPTS_CHECK_DIRNAME_LEVEL` kann dabei die folgenden Werte annehmen:

`0`

  Der Verzeichnisname wird nicht überprüft.

`1`

  Überprüft den Verzeichnisnamen nur, wenn bei der Suche nach der Datei `debian/changelog` ein Wechsel des Verzeichnisses notwendig ist.

`2`

  Der Verzeichnisname wird in jedem Fall überprüft.

Optionen

`-adebian-architecture, -tGNU-system-type`

  Beeinflussen den Typ der Architektur, für die das Paket gebaut wird.

`--check-dirname-level N`

  Wie unter „Überprüfen von Verzeichnisnamen“ beschrieben.

`--check-dirname-regex N`

  Wie unter „Überprüfen von Verzeichnisnamen“ beschrieben.

`--no-conf`, `--noconf`

  Es werden keine Konfigurationsdateien eingelesen. Dies muss als erste Option auf der Kommandozeile angegeben werden.

`--help`, `--version`

  Zeigt eine kurze Hilfe und die Versionsinformationen zu diesem Programm.

Die Konfigurationsvariablen `DEVSCRIPTS_CHECK_DIRNAME_LEVEL` und `DEVSCRIPTS_CHECK_DIRNAME_REGEX` können die folgenden Werte annehmen:

`0`

  Der Verzeichnisname wird nicht überprüft.

`1`

  Überprüft den Verzeichnisnamen nur, wenn bei der Suche nach der Datei `debian/changelog` ein Wechsel des Verzeichnisses notwendig ist.

`2`

  Der Verzeichnisname wird in jedem Fall überprüft.

Optionen

`--cleandebs`

  Entfernt die Dateien `*.deb`, `*.changes` und `*.build` in allen Verzeichnissen. Die Dateien `.dsc`, `.diff.gz` und `(.orig).tar.gz` werden nicht verändert, so dass die aktuelle Version eines Paketes in jedem Fall wiederhergestellt werden kann. Weiterhin wird die Datei `.upload` nicht verändert, so dass `debchange` korrekt funktioniert.

`--nocleandebs`

  Die Option `--nocleandebs` verhindert das zuvor beschriebene Verhalten. Voreingestellt ist, dass keine Dateien gelöscht werden. `debclean` nutzt das Kommendo `debuild` zum bereinigen des Verzeichnisbaumes.

`--check-dirname-level N`, `--check-dirname-regex regex`

  Siehe Überprüfen von Verzeichnisnamen.

`--no-conf`, `--noconf`

  Ignoriert alle Konfigurationsdateien. Wird diese Option verwendet, so muss sie als erste Option auf der Kommandozeile angegeben werden.

`--help`

  Zeigt eine kurze Hilfe an.

`--version`

  Zeigt die Versionsnummer des Programmes an.

`debclean` nutzt zwei Konfigurationsdateien `/etc/devscripts.conf` und `~/.devscripts`. Dieser werden in der genannten Reihenfolge ausgewertet, die folgenden Variablen werden dabei genutzt.

Konfigurationsvariablen

`DEBCLEAN_CLEANDEBS`

  Das setzen dieser Variablen auf „yes“ führt dazu das die Kmmandozeilenoption `--cleandebs` gesetzt wird.

`DEVSCRIPTS_CHECK_DIRNAME_LEVEL` und `DEVSCRIPTS_CHECK_DIRNAME_REGEX`

  Diese Variablen werden generell von den Programmen im Paket `devscripts` verwendet.

### 6.5.11 `debi`

`debi` installiert die aktuelle Version eines Debian-Pakets. Die Syntax für den Aufruf lautet:

    debi [options] [changes file] [package ...]

`debi` ermittelt die aktuelle Version eines Debian-Pakets und installiert dieses. Wird eine `.changes`-Datei auf der Kommandozeile angegeben, so wird versucht, den Paketnamen aus diesem Dateinamen zu ermitteln. Ist dies nicht der Fall, so muss `debi` innerhalb des Source-Code-Verzeichnisses aufgerufen werden. In diesem Fall versucht `debi` eine `.changes`-Datei in dem Verzeichnis zu finden, das der aktuellen Paketversion entspricht (die notwendigen Angaben werden aus der `.changes`-Datei übernommen).

Danach wird `debpkg -i` für jedes in der `.changes`-Datei aufgeführte Paket ausgeführt. Dabei wird davon ausgegangen, dass alle Pakete im gleichen Verzeichnis liegen wie die Datei `.changes`.

Werden auf der Kommandozeile eine Anzahl von Paketen übergeben, so wird versucht. ausschließlich diese Pakete zu installieren.

#### 6.5.11.1 Überprüfung von Verzeichnisnamen

Wie viele andere Skripte aus dem Paket `devscripts` versucht auch `debchange`, rekursiv im Verzeichnisbaum die Datei `debian/changelog` zu finden. Wird diese Datei gefunden, so wird überprüft, ob das darüber liegende Verzeichnis dem Paketnamen entspricht. Wie dies genau durchgeführt wird, kann durch die beiden Konfigurationsvariablen `DEVSCRIPTS_CHECK_DIRNAME_LEVEL` und `DEVSCRIPTS_CHECK_DIRNAME_REGEX` sowie deren Kommandozeilen-Gegenstücke `--check-dirname-level` bzw. `--check-dirname-regex` beeinflusst werden.

Die Variable `DEVSCRIPTS_CHECK_DIRNAME_LEVEL` kann dabei die folgenden Werte annehmen:

`0`

  Der Verzeichnisname wird nicht überprüft.

`1`

  Überprüft den Verzeichnisnamen nur, wenn bei der Suche nach der Datei `debian/changelog` ein Wechsel des Verzeichnisses notwendig ist.

`2`

  Der Verzeichnisname wird in jedem Fall überprüft.

Optionen

`-adebian-architecture, -tGNU-system-type`

  Beeinflussen den Typ der Architektur, für die das Paket gebaut wird.

`--check-dirname-level N`

  Wie unter „Überprüfen von Verzeichnisnamen“ beschrieben.

`--check-dirname-regex N`

  Wie unter „Überprüfen von Verzeichnisnamen“ beschrieben.

`--no-conf`, `--noconf`

  Es werden keine Konfigurationsdateien eingelesen. Dies muss als erste Option auf der Kommandozeile angegeben werden.

`--help`, `--version`

  Zeigt eine kurze Hilfe und die Versionsinformationen zu diesem Programm.

Die Konfigurationsvariablen `DEVSCRIPTS_CHECK_DIRNAME_LEVEL` und `DEVSCRIPTS_CHECK_DIRNAME_REGEX` können die folgenden Werte annehmen:

`0`

  Der Verzeichnisname wird nicht überprüft.

`1`

  Überprüft den Verzeichnisnamen nur, wenn bei der Suche nach der Datei `debian/changelog` ein Wechsel des Verzeichnisses notwendig ist.

`2`

  Der Verzeichnisname wird in jedem Fall überprüft.

### 6.5.12 `debsign`

`debsign` erzeugt eine digitale Signatur mittels GPG/PGP für die Dateien `.changes` und `.dsc` eines Debian Paketes. Die Syntax dieses Kommandos lautet

    debsign [options] [changes-file|dsc-file]

`debsign` verhält sich beim signieren von Paketen wie `dpkg-buildpackage`, es wird eine unsignierte `.dsc`- oder `.changes`-Datei verwendet und digital signiert. Die Grösse und die MD5-Checksumme der `.dsc`-Datei werden dabei neu berechnet und in der Datei `.changes` durch die neuen Werte ersetzt.

Wird eine `.changes`- oder `.dsc`-Datei angegeben, so wird diese signiert. Ist keine Datei angegeben, so wird die Datei `debian/changelog` ausgewertet und es wird versucht den Namen der `.changes`-Datei im darüberliegenden Verzeichnis zu ermitteln.

Diese Programm wird eigesetzt wenn ein Entwickler ein Paket auf einem System erzeugt auf dem es nicht auf sicherem Wege signiert werden kann. Um das Paket auf einem sicheren System zu signieren müssen lediglich die (kleinen) Dateien `.dsc` und `.changes` übertragen, signiert und wieder auf das ursprüngliche System transferiert werden. Dieser Prozess kann weitgehend automatisiert ablaufen, mit der Option `-r` werden die Dateien auf das lokale (sichere) System kopiert und nach dem signieren wieder auf das ursprüngliche System transferiert. Liegen die Dateien alle auf dem lokalen System, so können diesem mittels `debrsign` auf ein anderes System kopiert und dort signiert werden.

Auch `debsign` nutzt die Einträge in den Konfigurationsdateien des Paketes `devscripts`.

Optionen

`-r [username@]remotehost`

  Die Dateien `.changes` und `.dsc` liegen auf dem angegebenen entfernten System, es wird SSH verwendet um die Dateien zu kopieren.

`-pprogname`

  `progname` kann den Wert `pgp` oder `gpg` annehmen, das entsprechnende Programm wird verwendet um die Dateien zu signieren. Wird nichts angegeben, so wird `gpg` verwendet falls die Datei `~/.gnupg/secring.gpg` existiert. Ansonsten wird `pgp` eingesetzt.

`-mmaintainer`

  Hiermit kann der Name des Paketbetreuers angegeben werden mit dessen Namen das Paket signiert werden soll.

`-emaintainer`

  Wie die Option `-m`, wird jedoch vorrangig behandelt.

`-kkeyid`

  Die KeyID des zu verwendenden Schlüssels, diese Option überschreibt die Optionen `-m` und `-e`.

`-spgp`, `-sgpg`

  Setzt die Kommandozeilenoptionen des zum signieren verwendeten Programmes passend für GnuPG oder PGP.

`-S`

  Sucht nach einer `.changes`-Datei für Quellcodepakete.

`-adebian-architecture`, `-tGNU-system-type`

  Diese Optionen verändern das Verhalten bei der Suche nach passenden `.changes`-Dateien, so dass das Verhalten von `dpkg-buildpackage` nachgebildet wird. Genauere Informationen finden sich in der Manpage zu `dpkg-architecture(1)`.

`--no-conf`, `--noconf`

  Verhindert das einlesen von Konfigurationsdateien. Dies muss als erste Option auf der Kommandozeile angegeben werden.

`--help`, `-h`

  Zeigt eine kurze Hilfe an.

`--version`

  Zeigt Informationen zur Programmversion und zum Copyright an.

Es werden die beiden Konfigurationsdateien `/etc/devscripts.conf` und `~/.devscripts`, in dieser Reihenfolge, ausgewertet. Kommandozeilenoptionen überschreiben Werte in den Konfigurationsdateien. Eventuell gesetzte Umgebungsvariablen gleichen Namens werden ignoriert. Die folgenden Variablen können verwendet werden.

Konfigurationsvariablen

`DEBSIGN_PROGRAM`

  Wie die Option `-p`.

`DEBSIGN_SIGNLIKE`

  Kann den Wert `gpg` oder `pgp` annehmen und bewirkt ein Verhalten wie die Optionen `-sgpg` und `-spgp`.

`DEBSIGN_MAINT`

  Wie die Option `-m`.

`DEBSIGN_KEYID`

  Wie die Option `-k`.

### 6.5.13 `dpatch`

`dpatch` dient zur Verwaltung von Patches für Quellcode-Pakete. Damit bietet sich die Möglichkeit Patches aus einer andere Release einzubinden oder auch die bestehenden Patches zu organisieren. Dies Syntax von `dpatch` lautet

    dpatch [options] command [command-arguments]

`dpatch` ermöglicht es, Patches oder Templates im Verzeichnis `debian/patches/` ohne weitere Organisation im Quellcode-Baum abzulegen. Um diese Patches während der Übersetzung eines Paketes einzubinden, muss lediglich ein kurzer Eintrag im Makefile des Paketes aufgenommen werden und im Abschnitt `patch`/`unpatch` bzw. im Abschnitt `clean` der Datei `debian/rules` aufgenommen werden. Für den individuellen Einsatz kann auch `/usr/bin/dpatch` direkt aufgerufen werden.

`dpatch` kennt einige globale Optionen, welche das gesamte Verhalten von `dpatch` verändern. Diese sind:

Globale Optionen

`--workdir (-d) DIRECTORY`

  Ohne Angabe dieser Option, verwendet `dpatch` das aktuelle Verzeichniss um die gewünschten Patches anzuwenden. Wird diese Option verwendet, so wird das angegebene Verzeichnis als Arbeitsverzeichnis verwendet und auch die Patches werden in diesem Verzeichnis gesucht.

`--chdir`, `-c`

  Bewirkt, das ein alternatives Verzeichniss für die anzuwendenden Patches verwendet wird. Nur sinnvoll im Zusammenhang mit `--workdir`.

`--strict`, `-S`

  Aktiviert den „Strict“-Modus, eine etwas genauere Auswertung von Problemen. Dies bewirkt, dass `dpatch` auch bei Warnungen (warnings) abbricht, statt diese einfach zu übergehen. Dies ist beispielsweise der Fall, wenn ein Patch bereits auf den Quellcode angewendet wurde.

`--force`, `-F`

  Forciert die Anwendung oder das Entfernen von Patches, auch wenn diese normalerweise von `dpatch` übersprungen werden, beispielsweise weil ein Patch bereits angewendet wurde.

### 6.5.14 `debc`

`debc` zeigt den Inhalt und weitere Informationen zum aktuellesten Debian-Paket. `debc` muss innerhalb des Quellcode-Verzeichnisses aufgerufen werden, aus dem die Debian-Pakete für ein Softwareprojekt erzeugt werden. `debc` ermittelt die neueste Version des Pakets und zeigt den Inhalt und Informationen über die Abhängigkeiten an. Hier ein Beispiel:

    fr@wasabi:~/Daten/debian-pakete/modellbahn/pythontrain/pythontrain-1.0$ ls ../
    backup                          pythontrain_1.0-1_i386.deb      pythontrain_1.0-3_i386.deb
    pythonTrain.gladep              messages.pot                    pythontrain_1.0-1.tar.gz
    pythontrain_1.0-3.tar.gz        pythonTrain.gladep.bak          pixmaps
    pythontrain_1.0-2.dsc           pythontrain_1.1-1.dsc           pythonTrain-lang.c
    project1                        pythontrain_1.0-2_i386.changes  pythontrain_1.1-1_i386.changes
    pythonTrain.png                 pythontrain-1.0                 pythontrain_1.0-2_i386.deb
    pythontrain_1.1-1_i386.deb      pythonTrain.py                  pythontrain_1.0-1.diff.gz
    pythontrain_1.0-2.tar.gz        pythontrain_1.1-1.tar.gz        pythonTrain.xml
    pythontrain_1.0-1.dsc           pythontrain_1.0-3.dsc           pythonTrain.glade
    pythontrain_1.0-1_i386.changes  pythontrain_1.0-3_i386.changes  pythonTrain.glade.bak
    fr@wasabi:~/Daten/debian-pakete/modellbahn/pythontrain/pythontrain-1.0$ debc
    pythontrain_1.1-1_i386.deb
    --------------------------
     neues Debian-Paket, Version 2.0.
     Größe 174430 Byte: control-Archiv= 1276 Byte.
         504 Bytes,    10 Zeilen      control
        1181 Bytes,    16 Zeilen      md5sums
         561 Bytes,    15 Zeilen   *  postinst             #!/bin/sh
         160 Bytes,     5 Zeilen   *  postrm               #!/bin/sh
         413 Bytes,    14 Zeilen   *  prerm                #!/bin/sh
     Package: pythontrain
     Version: 1.1-1
     Section: misc
     Priority: optional
     Architecture: i386
     Depends: python2.2, python-glade, python-gtk, python2.2-gtk2, python2.2-glade2,
              rcsh, glade-common-2, glade-2, gettext, localeconf, localepurge, python2.2-xmlbase,
              sysutils, python2.2-optik, python2.2-optik
     Installed-Size: 300
     Maintainer: Frank Ronneburg <fr@openoffice.de>
     Description: Python/GTK Anwendung zur Steuerung von Modellbahnen
      Benötigt wird weiterhin ein SRCP kompatibler Server lokal oder im Netzwerk.
    drwxr-xr-x root/root         0 2003-07-15 01:41:35 ./
    drwxr-xr-x root/root         0 2003-07-15 01:41:29 ./usr/
    drwxr-xr-x root/root         0 2003-07-15 01:41:24 ./usr/bin/
    -rwxr-xr-x root/root     20738 2003-07-15 01:41:24 ./usr/bin/pythonTrain
    drwxr-xr-x root/root         0 2003-07-15 01:41:27 ./usr/share/
    drwxr-xr-x root/root         0 2003-07-15 01:41:24 ./usr/share/doc/
    drwxr-xr-x root/root         0 2003-07-15 01:41:33 ./usr/share/doc/pythontrain/
    drwxr-xr-x root/root         0 2003-07-15 01:41:24 ./usr/share/doc/pythontrain/html/
    -rw-r--r-- root/root      3181 2003-07-15 01:41:24 ./usr/share/doc/pythontrain/html/bensoftw.html
    -rw-r--r-- root/root      2300 2003-07-15 01:41:24 ./usr/share/doc/pythontrain/html/index.html
    -rw-r--r-- root/root      6094 2003-07-15 01:41:24 ./usr/share/doc/pythontrain/html/ptrain.html
    -rw-r--r-- root/root      3139 2003-07-15 01:41:24 ./usr/share/doc/pythontrain/html/pythontrain.html
    -rw-r--r-- root/root     19486 2003-07-15 01:41:24 ./usr/share/doc/pythontrain/html/pythonTrain-main.jpg
    -rw-r--r-- root/root     24026 2003-07-15 01:41:24 ./usr/share/doc/pythontrain/html/tamsprg.jpg
    -rw-r--r-- root/root       389 2003-06-27 11:47:02 ./usr/share/doc/pythontrain/copyright
    -rw-r--r-- root/root      2659 2003-07-15 01:41:24 ./usr/share/doc/pythontrain/pythontrain.txt.gz
    -rw-r--r-- root/root     54774 2003-07-15 01:41:24 ./usr/share/doc/pythontrain/pythontrain.pdf.gz
    -rw-r--r-- root/root       410 2003-07-15 01:36:36 ./usr/share/doc/pythontrain/changelog.Debian.gz
    drwxr-xr-x root/root         0 2003-07-15 01:41:24 ./usr/share/pythonTrain/
    -rw-r--r-- root/root      4173 2003-07-15 01:41:24 ./usr/share/pythonTrain/pythonTrain.xml
    -rw-r--r-- root/root     56642 2003-07-15 01:41:24 ./usr/share/pythonTrain/pythonTrain.glade
    -rw-r--r-- root/root     61113 2003-07-15 01:41:24 ./usr/share/pythonTrain/pythonTrain.png
    drwxr-xr-x root/root         0 2003-07-15 01:41:27 ./usr/share/doc-base/
    -rw-r--r-- root/root       555 2003-06-27 16:57:23 ./usr/share/doc-base/pythontrain
    drwxr-xr-x root/root         0 2003-07-15 01:41:29 ./usr/lib/
    drwxr-xr-x root/root         0 2003-07-15 01:41:29 ./usr/lib/menu/
    -rw-r--r-- root/root       150 2003-06-27 11:47:04 ./usr/lib/menu/pythontrain

Wie zu sehen ist, sind verschiedene (auch ältere) Versionen des Pakets vorhanden. Es wird das aktuellste Paket ermittelt, und es werden Informationen zu diesem Paket ausgegeben.

### 6.5.15 `checkinstall`

`checkinstall` (http://asic-linux.com.mx/~izto/checkinstall/) ist ein Werkzeug zum Übersetzen von Quellcode-Paketen, welche `make` einsetzen, und zum erzeugen von Debian-, aber auch RPM- oder SLP-, Paketen aus diesen Quellcode-Archiven. Dies vereinfacht die Verwaltung von Quellcode-Paketen die auf unterschiedlichen Distributionen eingesetzt werden sollen.

`checkinstall` übersetzt den Quellcode eines Paketes in dem zunächst `make install` (oder ein anderes, auf der Kommandozeile von `checkinstall` übergebenes Argument) aufgerufen wird. Das Paket wird compiliert, es wird ein Binär-Paket erzeugt und dieses wird installiert. Das erzeugte Paket kann auf weiteren Systemen installiert werden.

`checkinstall` ist als Debian-Paket seit der „Sarge“-Release verfügbar und kann mittels `apt-get install checkinstall` installiert werden. Auf älteren Systemen ist das Paket als „Backport“ verfügbar. Hierzu ist die Zeile

     deb http://www.backports.org/debian/ woody checkinstall

der Datei `/etc/apt/sources.list` hinzuzufügen.

    fr@wasabi:~$ sudo apt-get install checkinstall
    Password:
    Paketlisten werden gelesen... Fertig
    Abhängigkeitsbaum wird aufgebaut... Fertig
    Die folgenden zusätzlichen Pakete werden installiert:
    installwatch
    Die folgenden NEUEN Pakete werden installiert:
    checkinstall installwatch
    0 aktualisiert, 2 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
    Es müssen 46,9kB Archive geholt werden.
    Nach dem Auspacken werden 229kB Plattenplatz zusätzlich benutzt.
    Möchten Sie fortfahren? [J/n]
    Hole:1 ftp://ftp.de.debian.org sarge/main installwatch 0.6.3-1 [12,0kB]
    Hole:2 ftp://ftp.de.debian.org sarge/main checkinstall 1.5.3-3 [34,8kB]
    Es wurden 46,9kB in 2s geholt (18,7kB/s)
    Wähle vormals abgewähltes Paket installwatch.
    (Lese Datenbank ... 57608 Dateien und Verzeichnisse sind derzeit installiert.)
    Entpacke installwatch (aus .../installwatch_0.6.3-1_i386.deb) ...
    Wähle vormals abgewähltes Paket checkinstall.
    Entpacke checkinstall (aus .../checkinstall_1.5.3-3_all.deb) ...
    Richte installwatch ein (0.6.3-1) ...

    Richte checkinstall ein (1.5.3-3) ...
    fr@wasabi:~$

`checkinstall` nutzt das Programm `installwatch`, welches ebenfalls installiert wird.

Im nächsten Schritt sind, falls nicht schon geschehen, die Archive mit den Quellcode-Dateien in ein eigenes Verzeichnis zu entpacken. Wechseln Sie in dieses Verzeichnis, nun sollte zunächst geprüft werden ob der Quellcode sich problemlos übersetzen lässt. Dies geschieht mittels `./configure --sysconfdir=/etc` (falls ein `configure`-Skript vorhanden ist) und einem anschliessenden Aufruf von `make`. Läuft alles problemlos durch, so kann `checkinstall` zum Einsatz kommen.

### `./configure`

`./configure` kennt die Option `--help` mit der sich alle weiteren Konfigurationsoptionen anzeigen lassen. Sinnvoll ist häufig auch die Option `--bindir=/usr/bin`, da viele Programme sonst im Verzeichnis `/usr/local/` abgelegt werden.

Üblicherweise würde nun der Aufruf von `make install` ein Quellcodepaket installieren. Dies hätte jedoch zur Folge das das Paketmanagement auf dem Systeme keinerlei Kenntniss von den installierten Dateien erhalten würde. Deshalb wird nun das Kommando `checkinstall -D make install` aufgerufen.

Am Beispiel des Quellcodes zu `wget` soll der Einsatz von `checkinstall` exemplarisch gezeigt werden.

    fr@wasabi:/tmp/wget-1.9.1$ ./configure  --sysconfdir=/etc --bindir=/usr/bin
    configuring for GNU Wget 1.9.1
    checking build system type... i686-pc-linux-gnu
    checking host system type... i686-pc-linux-gnu
    checking whether make sets $(MAKE)... yes
    checking for a BSD-compatible install... /usr/bin/install -c
    checking for gcc... gcc
    ...
    checking for perl5... no
    checking for perl... /usr/bin/perl
    checking for pod2man... /usr/bin/pod2man
    configure: creating ./
    config.status
    config.status: creating Makefile
    config.status: creating src/Makefile
    config.status: creating doc/Makefile
    config.status: creating util/Makefile
    config.status: creating po/Makefile.in
    config.status: creating windows/Makefile
    config.status: creating src/config.h
    config.status: src/config.h is unchanged
    config.status: executing default commands
    generating po/POTFILES from ./po/POTFILES.in
    creating po/Makefile
    fr@wasabi:/tmp/wget-1.9.1$

Nun liegt ein `Makefile` vor, in dem bereits die Anpassungen der Verzeichnisse für die Debian-Distribution vorgenommen wurden. Der Aufruf von `make` übersetzt den Quellcode in ein ausführbares Programm.

    fr@wasabi:/tmp/wget-1.9.1$ make
    cd src && make CC='gcc' CPPFLAGS=''DEFS='-DHAVE_CONFIG_H -DSYSTEM_WGETRC=\"/etc/wgetrc\"
      -DLOCALEDIR=\"/usr/local/share/locale\"' CFLAGS='-O2 -Wall -Wno-implicit'
      LDFLAGS='' LIBS='' prefix='/usr/local' exec_prefix='/usr/local'
      bindir='/usr/bin' infodir='/usr/local/info' mandir='/usr/local/man'
    manext='1'
    make[1]: Entering directory `/tmp/wget-1.9.1/src'
    gcc -I. -I. -I/opt/include   -DHAVE_CONFIG_H -DSYSTEM_WGETRC=\"/etc/wgetrc\"
      -DLOCALEDIR=\"/usr/local/share/locale\" -O2 -Wall -Wno-implicit -c cmpt.c
    ...
    make[1]: Leaving directory `/tmp/wget-1.9.1/util'
    cd windows && make CC='gcc' CPPFLAGS='' DEFS='-DHAVE_CONFIG_H -DSYSTEM_WGETRC=\"/etc/rc\"
      -DLOCALEDIR=\"/usr/local/share/locale\"' CFLAGS='-O2 -Wall -Wno-implicit'
      LIBS='' prefix='/usr/local' exec_prefix='/usr/local' bindir='/usr/bin'
      infodir='/usr/local/info' mandir='/usr/local/man' manext='1'
    make[1]: Entering directory `/tmp/wget-1.9.1/windows'
    make[1]: Für das Ziel »all« ist nichts zu tun.make[1]: Leaving directory
      `/tmp/wget-1.9.1/windows'
    fr@wasabi:/tmp/wget-1.9.1$

Der Aufruf von `make` muss ohne Fehlermeldungen durchlaufen, ansonsten ist eine Fehlersuche angesagt.

Abschliessend kommt `checkinstall` zum Einsatz

    wasabi:/tmp/wget-1.9.1$ checkinstall -D make install

    checkinstall 1.5.3, Copyright 2001 Felipe Eduardo Sanchez Diaz Duran
            This software is released under the GNU GPL.

    Installing with "make install"...

    ========================= Installation results ===========================

    Copying documentation directory...
    cd src && make CC='gcc' CPPFLAGS='' DEFS='-DHAVE_CONFIG_H
    -DSYSTEM_WGETRC=\"/etc/wgetrc -DLOCALEDIR=\"/usr/local/share/locale\"'
    CFLAGS='-O2 -Wall -Wno-implicit' LDFLAGS='' S='' prefix='/usr/local'
    exec_prefix='/usr/local' bindir='/usr/bin' infodir='/usr/local/nfo'
    mandir='/usr/local/man' manext='1' install.bin
    make[1]: Entering directory `/tmp/wget-1.9.1/src'
    ../mkinstalldirs /usr/bin
    /usr/bin/install -c wget /usr/bin/wget
    ...
    /usr/bin/install -c -m 644 wget.1 /usr/local/man/man1/wget.1
    make[1]: Leaving directory `/tmp/wget-1.9.1/doc'

    ======================== Installation succesful ==========================

    Copying files to the temporary directory...OK

    Striping ELF binaries and libraries...OK

    Compressing man pages...OK

    Building file list...OK

    This package will be built according to these values:

    0 -  Maintainer: [ root@wasabi ]
    1 -  Summary: [ ein erstes Paket ]
    2 -  Name:    [ wget-1.9.1 ]
    3 -  Version: [ 1.9.1 ]
    4 -  Release: [ 1 ]
    5 -  License: [ GPL ]
    6 -  Group:   [ checkinstall ]
    7 -  Architecture: [ i386 ]
    8 -  Source location: [ wget-1.9.1 ]
    9 -  Alternate source location: [  ]

    Enter a number to change any of them or press ENTER to continue:

Nach einiger Zeit können Informationen zu dem Paket angegeben werden. `checkinstall` versucht Werte wie den Paketnamen und die Versionsnummer aus dem Verzeichnisnamen zu ermitteln. Die vorgeschlagenen Angaben können hier noch verändert werden.

    *****************************************
    **** Debian package creation selected ***
    *****************************************

    Building Debian package...OK

    Installing Debian package...OK

    Erasing temporary files...OK

    Writing backup package...OK

    Deleting temp dir...OK

    **********************************************************************

    Done. The new package has been installed and saved to
    /tmp/wget-1.9.1/wget-1.9.1_1.9.1-1_i386.deb

    You can remove it from your system anytime using:

         dpkg -r wget-1.9.1

    **********************************************************************

Abschliessend wird das erzeugte Paket installiert.

### 6.5.16 Lintian

Lintian (Homepage: http://lintian.debian.org/) untersucht Debian-Pakete auf Fehler, die nicht der Debian-Policy für Pakete (http://www.debian.org/doc/debian-policy/) entsprechen. Darüber hinaus werden die Pakete auch auf einige andere, häufig vorkommende Fehler hin geprüft.

Lintian kann Debian-Binär- und -Quellcode sowie „udeb“-Pakete (diese werden vom Debian-Installer genutzt) untersuchen. Es wird eine Datenbank mit den Ergebnissen gepflegt; diese Datenbank wird „labratory“ genannt. Mit dieser Datenbank können mehrere Überprüfungen eines Pakets beschleunigt werden, da sehr aufwändige Operationen aus der Datenbank gelesen werden können.

`lintian` wird wie folgt aufgerufen:

    lintian [action] [options] [packages] ...

Dabei kann das zu prüfende Paket auf drei verschiedene Arten angegeben werden: mit dem Dateinamen (`paketname.deb`), als Paketname, oder es kann die `.changes`-Datei eines Pakets angegeben werden. Wird der Paketname verwendet, so muss die Variable `LINTIAN_DIST` in der Konfigurationsdatei auf einen sinnvollen Wert gesetzt werden. `lintian` durchsucht dann den in dieser Variablen festgelegten Pfad nach Binär- oder Quellcodepaketen, auf die der angegebene Name passt (die Optionen `--binary`, `--udeb`, `--source` können gesetzt werden, falls nur Pakete eines bestimmten Typs gesucht werden sollen.

Wird eine `.changes`-Datei angegeben, so werden alle in der Datei aufgeführten Dateien geprüft. Dies ist vor dem Upload von Dateien auf einen Server notwendig.

`lintian` kennt einige Optionen, von denen jeweils nur eine je Programmaufruf auf der Kommandozeile angegeben werden darf. Diese werden als Aktionen bezeichnet.

Aktionen

`-S`, `--setup-lab`

  Initialisiert die Datenbank.

`-R`, `--remove-lab`

  Löscht das Verzeichnis mit der Datenbank.

`-c`, `--check`

  Führt alle bekannten Überprüfungen auf dem angegebenen Paket durch. Diese Aktion wird auch durchgeführt, wenn keine Aktion angegeben wird.

`-C chk1,chk2,...`, `--check-part chk1,chk2,...`

  Es werden nur die angeführten Überprüfungen durchgeführt. Hierbei kann der Name des Skriptes oder die Bezeichnung angegeben werden.

`-X chk1,chk2,...`, `--dont-check-part chk1,chk2,...`

  Führt alle Überprüfungen mit Ausnahme der aufgeführten durch; hierbei kann der Name des Skriptes oder die Bezeichnung angegeben werden.

`-u`, `--unpack`

  Entpackt die gewünschten Pakete bis zum angegebenen Level. Der voreingestellte Level ist 1.

`-r`, `--remove`

  Säubert das `lintian`-Verzeichnis für die angegebenen Verzeichnisse bis zum aktuellen Unpack-Level (siehe `-u` oder `--unpack)`. Der voreingestellte Level ist hier 0.

Optionen

`-h`, `--help`

  Zeigt eine Hilfe zu `lintian` an.

`-v`, `--verbose`

  Gibt mehr Informationen aus, die zur Fehlersuche dienen können.

`-V`, `--version`

  Zeigt die Versionsnummer des Programms an.

`-d`, `--debug`

  Zeigt Fehlermeldungen an, funktioniert nur zusammen mit `-v`.

`-i`, `--info`

  Gibt detaillierte Informationen zu den Policy-Verletzungen aus.

`-I`, `--display--info`

  Gibt auch die Informations-Tags (`I:`) mit aus, die normalerweise unterdrückt werden.

`-l n`, `--unpack-level n`

  Setzt den Unpack-Level auf den Wert `n`.

`-o`, `--no-override`

  Benutzt keine Override-Dateien.

`--show-overrides`

  Zeigt Einträge an, die mit den Informationen aus einer Override-Datei überschrieben wurden.

`-U info1,info2,...`, `--unpack-info info1,info2,...`

  Sammelt die angegebenen Informationen, auch wenn diese von den Tests nicht benötigt werden.

`-m`, `--md5sums`

  Überprüft die MD5-Checksummen aller Dateien, wenn eine `.changes`-Datei angegeben wird. Normalerweise werden nur `.dsc`-Dateien hinsichtlich der Checksumme überprüft.

`--allow-root`

  Zeigt keine Warnung an, falls `lintian` mit Administratorrechten gestartet wird.

Konfigurationsoptionen

`--cfg configfile`

  Liest die angegebene Konfigurationsdatei statt der Standard-Konfigurationsdateien. Diese Option überschreibt die Umgebungsvariable `LINTIAN_CFG`.

`--lab labdir`

  Setzt ein neues Verzeichnis für das Lintian-„Labratory“. In diesem Verzeichnis werden die Informationen über die überprüften Pakete gehalten. Dies überschreibt die Umgebungsvariable `LINTIAN_LAB` und den gleichnamigen Eintrag in der Konfigurationsdatei.

`--archivedir archivedir`

  Pfad zum Verzeichnis mit den zu untersuchenden Dateien. Diese Option kann genutzt werden, um einen kompletten Verzeichnisbaum mit Paketen statt eines einzelnen Pakets von Lintian überprüfen zu lassen. Dies überschreibt die Umgebungsvariable `LINTIAN_ARCHIVEDIR` und den gleichnamigen Eintrag in der Konfigurationsdatei.

`--section release`

  Wird die Option `--distdir` genutzt, so kann mit dieser Option die Suche auf Pakete aus einer bestimmten Sektion (beispielsweise `main`) begrenzt werden. Dies überschreibt die Umgebungsvariable `LINTIAN_SECTION` und den gleichnamigen Eintrag in der Konfigurationsdatei.

`--arch arch`

  Wird die Option `--distdir` genutzt, so kann mit dieser Option die Suche auf Pakete für eine bestimmte Architektur (beispielsweise `alpha`) begrenzt werden. Dies überschreibt die Umgebungsvariable `LINTIAN_ARCH` und den gleichnamigen Eintrag in der Konfigurationsdatei.

`--root rootdir`

  Sucht nach Lintian-Skripten (Test-Skripten und Analyse-Skripten) im angegebenen Verzeichnis statt in `/usr/share/lintian/`. Dies überschreibt die Umgebungsvariable `LINTIAN_ROOT`.

Optionen zur Paketauswahl

`-a`, `--all`

  Prüft alle Pakete der Distribution. Hierzu muss die Variable `LINTIAN_DIST` in der Konfigurationsdatei gesetzt sein.

`-b`, `--binary`

  Bei den im Folgenden auf der Kommandozeile gelisteten Paketen handelt es sich um Binär-Pakete.

`-s`, `--source`

  Bei den im Folgenden auf der Kommandozeile gelisteten Paketen handelt es sich um Quellcode-Pakete.

`--udeb`

  Bei den im Folgenden auf der Kommandozeile gelisteten Paketen handelt es sich um udeb-Pakete.

`-p`, `--packages-file file`

  Analysiert alle in der Datei angegebenen Pakete. Jedes Paket muss hierzu in einer einzelnen Zeile in der Datei stehen, und die Zeile muss das folgende Format haben:

      type package version file

  Hierbei ist `type` das Zeichen `b` (Binär-Paket) oder `s` (Source/Quellcode-Paket). `package` ist der Paketname, `version` ist die Versionsnummer des Pakets, und `file` ist der absolute Pfad und der Dateiname des Pakets.

Tests

`binaries (bin)`

  Sucht nach Fehlern in Binärdateien und Objekt-Dateien.

`changelog-file (chg)`

  Prüft changelog-Dateien in einem Binär-Paket.

`conffiles (cnf)`

  Prüft, ob die `control`-Datei eines Binär-Pakets fehlerfrei ist.

`control-file (dctl)`

  Prüft die Datei `debian/control` in einem Quellcode-Paket.

`copyright-file (cpy)`

  Prüft, ob eine Copyright-Datei in einem Binärpaket vorhanden ist.

`cruft (deb)`

  Sucht nach unerwünschten Dateien in einem Paket. Solche Dateien sind beispielsweise Dateien von einer Versionskontrolle oder temporäre Dateien aus einem Übersetzungsvorgang.

`deb-format (dfmt)`

  Prüft, ob das Paket mit einer fehlerhaften Version von `tar` erzeugt wurde. Dies kann zu Problemen bei der Installation mit `dpkg` führen.

`debconf (dc)`

  Sucht in Paketen nach Fehlern , die oft bei der Verwendung von `debconf` gemacht werden.

`debdiff (dif)`

  Sucht nach Dateien mit der Endung `.orig` oder `.rej` in den `.diff`-Dateien.

`debian-readme (drm)`

  Prüft, ob die Datei `README.Debian` ein unverändertes Template ist, das von `debmake` erezugt wurde.

`debhelper (dh)`

  Sucht nach üblichen Fehlern in den Quellcode-Paketen mittels `debhelper`.

`description (des)`

  Prüft, ob das Feld `Description` in der Beschreibung eines Binär-Pakets den Richtlinien des Policy-Manuals entspricht.

`etcfiles (etc)`

  Prüft, ob alle Konfiurationsdateien im Verzeichnis `/etc/` eines Pakets als Konfigurationsdateien ausgewiesen sind.

`fields (fld)`

  Prüft die Kontrollfelder eines Binär- oder Quellcodepaketes.

`files (fil)`

  Prüft, ob ein Binärpaket den Paketrichtlinien hinsichtlich Dateitypen, Zugriffsrechten und Eigentumsrechten entspricht.

`huge-usr-share (hus)`

  Prüft, ob ein architektur-abhängiges Paket viel Platz im Verzeichnis `/usr/share/` beansprucht. Dies führt zu einer (meistens) unnötigen Belastung der Spiegelserver.

`infofiles (info)`

  Prüft, ob die Info-Dateien eines Pakets der Policy entsprechen.

`init.d (ini)`

  Prüft, ob die Init-Dateien (in `/etc/init.d/`) eines Pakets der Policy entsprechen.

`manpages (man)`

  Prüft ob die Manpages eines Pakets der Policy entsprechen.

`md5sums (md5)`

  Prüft ob die Checksumme eines Pakets existiert und gültig ist.

`menus (men)`

  Prüft, ob in einem Binärpaket die Menüdateien der Policy entsprechen.

`menu-format (mnf)`

  Prüft, ob die Syntax der Menüdateien korrekt ist.

`perl (prl)`

  Prüft die enthaltenen Perl-Skripte auf verwendete Perl-Module und prüft, ob die notwendigen Abhängigkeiten definiert sind.

`po-debconf (pd)`

  Prüft auf Fehler bei der Verwendung von `po-debconf`.

`scripts (scr)`

  Prüft bei Shell-Skripten die Zeile `#!`.

`shared-libs (shl)`

  Prüft in einem Binärpaket die Shared-Libraries in Hinblick auf ihre Konformität zur Debian-Policy.

`spelling (spl)`

  Prüft die Datei `copyright` und das Feld `Description` auf häufig vorkommende Schreibfehler.

`standards-version (std)`

  Prüft in einem Quellcodepaket, ob die Datei `debian/control` ein gültiges Feld für die Debian-Standards-Version enthält.

Collection

`changelog-file`

  Kopiert die Datei `changelog` eines Paketes in das Lintian-Verzeichnis.

`copyright-file`

  Kopiert die Datei `copyright` eines Paketes in das Lintian-Verzeichnis.

`debfiles`

  Sammelt alle Dateien die zu dem Quellcode-Paket eines Debian-Paketes gehören.

`debian-readme`

  Kopiert die Datei `README.Debian` eines Paketes in das Lintian-Verzeichnis.

`diffstat`

  Speichert die Ausgabe des Programmes `diffstat` für die an einem Quellcode-Paket vorgenommen Änderungen in Bezug auf die Debian Distribution.

`doc-base-files`

  Kopiert die Dateien aus dem Verzeichnis `/usr/share/doc-base` in das Lintian Verzeichnis, unterhalb von `doc-base`.

`file-info`

  Erzeugt und speichert die Informationen des Kommandos `file` für jede Datei in einem Binär-Paket.

`init.d`

  Kopiert die Skripte aus dem Verzeichnis `/etc/init.d` in das Lintian Verzeichnis, unterhalb von `init.d`.

`md5sums`

  Erzeugt MD5-Checksummen für alle Dateien in einem Binär-Paket.

`menu-files`

  Kopiert die Dateien aus dem Verzeichnis `usr/share/doc/menu` eines Binär-Paketes in das Menu-Verzeichnis des Lintian Verzeichnisses.

`objdump-info`

  Speichert Informationen des Kommandos `objdump` für jede Datei in einem Binär-Paket.

`override-file`

  Kopiert die Override-Datei eines Paketes in das Lintian-Verzeichnis.

`scripts`

  Speichert Informationen über die verwendeten Skripte in einem Binär-Paket.

`source-control-file`

  Speichert Informationen über das Binär-Paket aus den Informationen in der Datei `debian/control`.

Der Einsatz von Lintian ist, trotz der vielen möglichen Optionen, recht einfach. Hier ein kleines Beispiel für ein sehr nachlässig gebautes Paket des Autors:

    fr@wasabi:~/Daten/debian-pakete/modellbahn/pythontrain$ lintian pythontrain_1.1-1_i386.deb
    E: pythontrain: binary-without-manpage pythonTrain
    E: pythontrain: python-script-but-no-python-dep ./usr/bin/pythonTrain
    W: pythontrain: unquoted-string-in-menu-item /usr/lib/menu/pythontrain needs:2
    W: pythontrain: unquoted-string-in-menu-item /usr/lib/menu/pythontrain section:2
    E: pythontrain: menu-icon-not-in-xpm-format /usr/share/pixmaps/gnome-diskfree.png
    E: pythontrain: debian-changelog-file-uses-obsolete-national-encoding at line 7
    E: pythontrain: package-has-a-duplicate-relation depends: python2.2-optik, python2.2-optik

Bei der Ausgabe unterscheidet Lintian zwischen Fehlern (`E:` Error) und Warnungen (`W:` Warning). Diese erscheinen in der ersten Spalte. Danach wird der Paketname angezeigt. Dies ist notwendig, wenn mehrere Pakete in einem Durchlauf geprüft werden. Danach folgt eine Infomation zu dem gefundenen Problem, mit einer Angabe, welche Datei, Zeile oder welche Abhängigkeit betroffen ist.

Lintian sucht an den folgenden Orten nach Konfigurationsdateien:

- Im über die Option `--cfg` angegebenen Verzeichnis.

- Im in der Variablen `$LINTIAN_CFG` angegebenen Pfad.

- In `$LINTIAN_ROOT/lintianrc`

- In `$HOME/.lintianrc`

- In `/etc/lintianrc`

Lintian nutzt die folgenden Verzeichnisse

- `/usr/share/lintian/checks`, hier liegen verschiedene Skripte die die Pakete überprüfen.

- `/usr/share/lintian/collection`, enthält Skripte die Informationen über die zu prüfenden Pakete sammeln und, für die spätere Verwendung mit den vorgenannten Skripten zu Überprüfung, zwischenspeichern.

- `/usr/share/lintian/info` enthält Informationen aus externen Quellen die von Lintian verwendet werden.

- `/usr/share/lintian/lib` Hilfsskripte die von Lintian Skripten verwendet werden.

- `/usr/share/lintian/unpack` Skripte zur Verwaltung des Prüfumgebung.

Das Verzeichnis `/usr/share/lintian` kann über die Umgebungsvariabe `LINTIAN_ROOT` überschrieben werden, alternativ kann auch die Option `--root` verwendet werden.

Je nachdem ob die Ausführung von Lintian erfolgreich war, wird ein entsprechender Exit-Status zurückgegeben, mögliche Werte hierfür sind

- `0` Es wurden keine Verletzungen der Policy gefunden. Warnungen werden ausgegeben, aber nicht als Problem bewertet.

- `1` Es wurden Verletzungen der Policy festgestellt.

- `2` Lintian Laufzeitfehler, es wird zusätzlich eine Nachricht auf der Standard-Ausgabe angezeigt.

Zurück | Nach oben | Weiter
6.4 Debian-Pakete - Aufbau der Sourcen | Zum Anfang | 6.6 Package-Dateien

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).