5.5 Erstellen, prüfen und verwalten von Debian Paketen

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

5.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 Infrastruktur, 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 Quellcode-Verzeichnis 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 überschreibt 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.

5.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 dabei vergrößert, so wird dieses Paket automatisch auf den Server übertragen.

Alle Einstellungen dieses Programmes 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äßig neue Versionen der Pakete (beispielsweise im Rahmen eines Software-Entwicklungsprojektes) 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. Sollcvs-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.

5.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, 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 Mail-Adresse 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 ermittelt 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-Mail-Adresse 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. Abschließend ist festzuhalten, 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.

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

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

5.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 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 der 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.

5.5.6 dpkg-depcheck

dpkg-depcheck ermittelt die Abhängigkeiten eines Programms. Hierbei wird das Programm mittels strace gestartet und 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@tischbahn.de>
uid                            Frank Ronneburg <fr@debiananwenderhandbuch.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 Standardausgabe anzuzeigen.

-O, --strace-output=DATEI

Schreibt die Ausgabe von strace in die angegebene Datei, anstatt diese auf der Standardausgabe 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"

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

5.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 Name 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.

5.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 des Release einer Version dar, die Y-Achse repräsentiert die Versionsnummer selbst. Jedes 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öße 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

Differenziert 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ößere 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 Programm 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, dass 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.

5.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, damit debchange korrekt funktioniert.

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

5.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, damit debchange korrekt funktioniert.

--nocleandebs

Die Option --nocleandebs verhindert das zuvor beschriebene Verhalten. Voreingestellt ist, dass keine Dateien gelöscht werden. debclean nutzt das Kommando 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. Diese werden in der genannten Reihenfolge ausgewertet, die folgenden Variablen werden dabei genutzt:

Konfigurationsvariablen

DEBCLEAN_CLEANDEBS

Das Setzen dieser Variablen auf yes führt dazu, dass die Kommandozeilenoption --cleandebs gesetzt wird.

DEVSCRIPTS_CHECK_DIRNAME_LEVEL und DEVSCRIPTS_CHECK_DIRNAME_REGEX

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

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

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

5.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öße 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über liegenden Verzeichnis zu ermitteln.

Dieses Programm wird eingesetzt, 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 diese 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 Quellcode-Pakete.

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

5.5.13 dpatch

dpatch dient zur Verwaltung von Patches für Quellcode-Pakete. Damit bietet sich die Möglichkeit, Patches aus einem anderen 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 Verzeichnis, um die gewünschten Patches anzuwenden. Wird diese Option verwendet, so wird das angegebene Verzeichnis als Arbeitsverzeichnis genutzt und auch die Patches werden in diesem Verzeichnis gesucht.

--chdir, -c

Bewirkt, dass ein alternatives Verzeichnis 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.

5.5.14 debc

debc zeigt den Inhalt und weitere Informationen zum aktuellsten Debian Paket. debc muss innerhalb des Quellcode-Verzeichnisses aufgerufen werden, aus dem die Debian Pakete für ein Software-Projekt 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@debiananwenderhandbuch.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.

5.5.15 checkinstall

checkinstall (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 dem 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 anschließenden Aufruf von make. Läuft alles problemlos durch, so kann checkinstall zum Einsatz kommen.

[Tipp]./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 Quellcode-Paket installieren. Dies hätte jedoch zur Folge, dass das Paketmanagement auf dem System keinerlei Kenntnis 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.

Abschließend 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

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

Abschließend wird das erzeugte Paket installiert.

5.5.16 Lintian

Lintian (Homepage: lintian.debian.org/) untersucht Debian Pakete auf Fehler, die nicht der Debian Policy für Pakete (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 Quellcode-Paketen, 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 erzeugt 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 Spiegel-Server.

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är-Paket 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är-Paket 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 Quellcode-Paket, 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 Menü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 zur Ü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 der 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 Standardausgabe angezeigt.

 Impressum