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.
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
Zeigt eine kurze Hilfe zu diesem Program an.
Gibt den Namen des Pakets an. Dies ist sinnvoll, wenn das Programm nicht im CVS-Baum ausgeführt wird.
Bestimmt die Versionsnummer des Pakets. Zusammen mit dem Paketnamen kann diese Option außerhalb eines CVS-Baums verwendet werden.
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...
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Diese „No-Exec-Option“ bewirkt einen kompletten Testlauf von cvs-buildpackage, ohne tatsächlich Kommandos auszuführen; eine reine Simulation.
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.
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.
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.
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.
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:
Optionen
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.
Fügt einen neuen Eintag am Ende der aktuellen Version ein.
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.
Diese Option interpretiert die Versionsnummer aus dem aktuellen Verzeichnis, diese muss in der gebräuchlichen Form paketname-versionsnummer vorliegen.
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.
Legt fest, ob das BTS benutzt werden soll, wenn entsprechende Einträge im changelog vorgenommen werden.
Lässt den Verzeichnisnamen des Source-Baums unverändert, auch wenn sich die Versionsnummer des Pakets verändert.
Ändert den Verzeichnisnamen des Source-Baums nicht (die Voreinstellung).
Setzt den angegebenen Eintrag für die Dringlichkeit in die changelog-Datei. Der Standardwert ist „low“.
Benutzt keinerlei Voreinstellungen aus der Konfigurationsdatei. Dies muss als erst Option angegeben werden!
Wie vorab beschrieben, beeinflusst diese Option das Durchsuchen von Verzeichnissen.
Wie vorab beschrieben, beeinflusst diese Option das Durchsuchen von Verzeichnissen.
Zeigt eine kurze Information als Hilfe an.
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:
Wird diese Variable auf den Wert yes gesetzt, so hat dies die gleiche Wirkung wie die Kommandozeilenoption --preserve.
Auf den Wert no gesetzt, bewirkt diese Variable das Gleiche wie die Kommandozeilenoption --noquery.
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.
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
Normalerweise werden Verzeichnisnamen beim Vergleich von Paketen ignoriert. Mit dieser Option kann debdiff dazu veranlasst werden, den Vergleich der Pakete auch auf Verzeichnisse anzuwenden.
Ignoriert Verzeichnisse beim Vergleich. Dies ist die Voreinstellung; diese Option kann aber benutzt werden, wenn in den Konfigurationsdateien etwas anderes definiert wurde.
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.
Wie die vorher beschriebene Option, jedoch wird die Angabe als regulärer Ausdruck in Perl-Schreibweise (s/^FROM/TO/) interpretiert.
Werden nur zwei Debian-Pakete verglichen, so werden normalerweise die control-Dateien mittels wdiff verglichen. Diese Option unterdrückt dieses Verhalten.
Vergleicht die control-Dateien. Dies ist die Voreinstellung, kann aber benutzt werden, um Informationen in den Konfigurationsdateien zu überschreiben.
Reicht die Optionen -p, -l oder -t an das Programm wdiff weiter. Dies führt zu einer ausführlicheren Ausgabe von wdiff.
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.
Dies ist die Voreinstellung (siehe vorhergehende Option). Hiermit kann eine Einstellung in den Konfigurationsdateien überschrieben werden.
Verhindert das Einlesen von Konfigurationsdateien. Dies muss als erste Option auf der Kommandozeile angegeben werden.
Zeigt eine kurze Übersicht aller Optionen.
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
Wird diese Variable auf yes gesetzt, so wirkt dies wie die Kommandozeilenoption --dirs.
Auf den Wert no gesetzt, bewirkt diese Option das Gleiche wie die die Kommandozeilenoption --nocontrol. Der Vorgabewert ist yes.
Auf yes gesetzt, hat dies die Wirkung wie die Kommandozeilenoption --show-moved.
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.
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
Zeigt alle Pakete an, die zur Ausführung des Kommandos benötigt werden.
Zeigt auch Pakete an, die zum Übersetzen dieses Programms benötigt werden. Berücksichtigt direkte und indirekte Anhängigkeiten.
Zeigt keine Pakete an, die zur Entwicklung (*-dev*) benötigt werden.
Zeigt nur die minimal benötigten Pakete an.
Führt das Programm mit der angegebenen Sprachumgebung aus.
Verändert die Sprachumgebung bei der Ausführung des Programms nicht.
Zeigt die zu den Paketen gehörenden Dateien mit an.
Zeigt die zu den Paketen gehörenden Dateien nicht mit an.
Schreibt die Ausgabe in die angegebene Datei, anstatt diese auf der Standard-Ausgabe anzuzeigen.
Schreibt die Ausgabe von strace in die angegebene Datei, anstatt diese auf der Standard-Ausgabe anzuzeigen.
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:
Gibt eine Warnung aus wenn, Dateien in den Verzeichnissen /usr/local/ oder /var/local/ benutzt werden. Diese Funktion ist normalerweise aktiviert.
Ignoriert den Aufruf von Programmen mit der Option --version. Dies wird häufig in Configure-Skripten benutzt. Diese Funktion ist normalerweise aktiviert.
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.
Warnt bei Zugriffen auf Dateien die über Debian-Alternativen verwaltet werden (siehe Alternativen ). Diese Funktion ist normalerweise aktiviert.
Ignoriert SGML-Katalog-Dateien; diese werden von einigen SGML-Tools beim Starten geöffnet. Diese Funktion ist normalerweise aktiviert.
Verhindert das Einlesen von Konfigurationsdateien und muss als erste Option auf der Kommandozeile angegeben werden.
Gibt einige Informationen zur Nutzung des Programms aus.
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"
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
Schlüsselbunddatei, die dem Schlüsselbund hinzugefügt werden soll.
Verhindert das Einlesen von Konfigurationsdateien. Muss als erste Option angegeben werden.
Zeigt eine kurze Hilfe zu dem Programm an.
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.
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.
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.
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:
Der Verzeichnisname wird nicht überprüft.
Überprüft den Verzeichnisnamen nur, wenn bei der Suche nach der Datei debian/changelog ein Wechsel des Verzeichnisses notwendig ist.
Der Verzeichnisname wird in jedem Fall überprüft.
Optionen
Beeinflussen den Typ der Architektur, für die das Paket gebaut wird.
Wie unter „Überprüfen von Verzeichnisnamen“ beschrieben.
Wie unter „Überprüfen von Verzeichnisnamen“ beschrieben.
Es werden keine Konfigurationsdateien eingelesen. Dies muss als erste Option auf der Kommandozeile angegeben werden.
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:
Der Verzeichnisname wird nicht überprüft.
Überprüft den Verzeichnisnamen nur, wenn bei der Suche nach der Datei debian/changelog ein Wechsel des Verzeichnisses notwendig ist.
Der Verzeichnisname wird in jedem Fall überprüft.
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.
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
Initialisiert die Datenbank.
Löscht das Verzeichnis mit der Datenbank.
Führt alle bekannten Überprüfungen auf dem angegebenen Paket durch. Diese Aktion wird auch durchgeführt, wenn keine Aktion angegeben wird.
Es werden nur die angeführten Überprüfungen durchgeführt. Hierbei kann der Name des Skriptes oder die Bezeichnung angegeben werden.
Führt alle Überprüfungen mit Ausnahme der aufgeführten durch; hierbei kann der Name des Skriptes oder die Bezeichnung angegeben werden.
Entpackt die gewünschten Pakete bis zum angegebenen Level. Der voreingestellte Level ist 1.
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
Zeigt eine Hilfe zu lintian an.
Gibt mehr Informationen aus, die zur Fehlersuche dienen können.
Zeigt die Versionsnummer des Programms an.
Zeigt Fehlermeldungen an, funktioniert nur zusammen mit -v.
Gibt detaillierte Informationen zu den Policy-Verletzungen aus.
Gibt auch die Informations-Tags (I:) mit aus, die normalerweise unterdrückt werden.
Setzt den Unpack-Level auf den Wert n.
Benutzt keine Override-Dateien.
Zeigt Einträge an, die mit den Informationen aus einer Override-Datei überschrieben wurden.
Sammelt die angegebenen Informationen, auch wenn diese von den Tests nicht benötigt werden.
Überprüft die MD5-Checksummen aller Dateien, wenn eine .changes-Datei angegeben wird. Normalerweise werden nur .dsc-Dateien hinsichtlich der Checksumme überprüft.
Zeigt keine Warnung an, falls lintian mit Administratorrechten gestartet wird.
Konfigurationsoptionen
Liest die angegebene Konfigurationsdatei statt der Standard-Konfigurationsdateien. Diese Option überschreibt die Umgebungsvariable LINTIAN_CFG.
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.
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.
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.
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.
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
Prüft alle Pakete der Distribution. Hierzu muss die Variable LINTIAN_DIST in der Konfigurationsdatei gesetzt sein.
Bei den im Folgenden auf der Kommandozeile gelisteten Paketen handelt es sich um Binär-Pakete.
Bei den im Folgenden auf der Kommandozeile gelisteten Paketen handelt es sich um Quellcode-Pakete.
Bei den im Folgenden auf der Kommandozeile gelisteten Paketen handelt es sich um udeb-Pakete.
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
Sucht nach Fehlern in Binärdateien und Objekt-Dateien.
Prüft changelog-Dateien in einem Binär-Paket.
Prüft, ob die control-Datei eines Binär-Pakets fehlerfrei ist.
Prüft die Datei debian/control in einem Quellcode-Paket.
Prüft, ob eine Copyright-Datei in einem Binärpaket vorhanden ist.
Sucht nach unerwünschten Dateien in einem Paket. Solche Dateien sind beispielsweise Dateien von einer Versionskontrolle oder temporäre Dateien aus einem Übersetzungsvorgang.
Prüft, ob das Paket mit einer fehlerhaften Version von tar erzeugt wurde. Dies kann zu Problemen bei der Installation mit dpkg führen.
Sucht in Paketen nach Fehlern , die oft bei der Verwendung von debconf gemacht werden.
Sucht nach Dateien mit der Endung .orig oder .rej in den .diff-Dateien.
Prüft, ob die Datei README.Debian ein unverändertes Template ist, das von debmake erezugt wurde.
Sucht nach üblichen Fehlern in den Quellcode-Paketen mittels debhelper.
Prüft, ob das Feld Description in der Beschreibung eines Binär-Pakets den Richtlinien des Policy-Manuals entspricht.
Prüft, ob alle Konfiurationsdateien im Verzeichnis /etc/ eines Pakets als Konfigurationsdateien ausgewiesen sind.
Prüft die Kontrollfelder eines Binär- oder Quellcodepaketes.
Prüft, ob ein Binärpaket den Paketrichtlinien hinsichtlich Dateitypen, Zugriffsrechten und Eigentumsrechten entspricht.
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.
Prüft, ob die Info-Dateien eines Pakets der Policy entsprechen.
Prüft, ob die Init-Dateien (in /etc/init.d/) eines Pakets der Policy entsprechen.
Prüft ob die Manpages eines Pakets der Policy entsprechen.
Prüft ob die Checksumme eines Pakets existiert und gültig ist.
Prüft, ob in einem Binärpaket die Menüdateien der Policy entsprechen.
Prüft, ob die Syntax der Menüdateien korrekt ist.
Prüft die enthaltenen Perl-Skripte auf verwendete Perl-Module und prüft, ob die notwendigen Abhängigkeiten definiert sind.
Prüft bei Shell-Skripten die Zeile #!.
Prüft in einem Binärpaket die Shared-Libraries in Hinblick auf ihre Konformität zur Debian-Policy.
Prüft die Datei copyright und das Feld Description auf häufig vorkommende Schreibfehler.
Prüft in einem Quellcodepaket, ob die Datei debian/control ein gültiges Feld für die Debian-Standards-Version enthält.
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.
$LINTIAN_CFG
$LINTIAN_ROOT/lintianrc
$HOME/.lintianrc
/etc/lintianrc
© 1999-2005 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - KeineBearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/).