dpkg-shlibdeps
Section: dpkg suite (1)
Updated: 1970-01-01
Page Index
BEZEICHNUNG
dpkg-shlibdeps - Substvar-Abhängigkeiten für Laufzeitbibliotheken erstellen
ÜBERSICHT
dpkg-shlibdeps [
Option…] [
-e]
Programm [
Option…]
BESCHREIBUNG
dpkg-shlibdeps berechnet Abhängigkeiten von Laufzeitbibliotheken für
Programme, deren Namen als Argument übergeben werden. Die Abhängigkeiten
werden zu der Datei der Ersetzungsvariablen
debian/substvars als
Variablennamen
shlibs:Abhängigkeitsfeld hinzugefügt, wobei
Abhängigkeitsfeld der Feldname einer Abhängigkeit ist. Alle anderen
Variablen, die mit
shlibs: beginnen, werden aus der Datei entfernt.
dpkg-shlibdeps hat zwei mögliche Informationsquellen zur Erstellung der
Abhängigkeitsinformationen. Entweder Symbol- oder
Shlibs-Dateien. dpkg-shlibdeps findet für jedes Programm, das es
analysiert, die Bibliotheken heraus, gegen die es gelinkt ist. Bei jeder
Bibliothek schaut es entweder in die Symbol- oder in die Shlibs-Datei
(falls Erstere nicht existiert oder falls debian/shlibs.local die
relevanten Abhängigkeiten enthält). Beide Dateien sollten von dem
Bibliothekspaket bereitgestellt werden und sollten daher als
/var/lib/dpkg/info/Paket.Symbol oder /var/lib/dpkg/info/Paket.Shlibs
verfügbar sein. Der Paketname wird in zwei Schritten identifiziert: zuerst
wird die Bibliotheksdatei auf dem System gefunden (durch Prüfung der
gleichen Verzeichnisse wie bei ld.so), dann wird dpkg -S
Bibliotheksdatei verwendet, um das Paket, das die Bibliothek
bereitstellt, zu ermitteln.
Symboldateien
Symboldateien enthalten feiner-granulare Abhängigkeitsinformationen, indem
sie die Minimalabhängigkeit für jedes von der Bibliothek exportierte Symbol
beschreiben. Das Skript versucht, eine Symboldatei, die zu dem
Bibliothekspaket gehört, an den folgenden Orten zuzuordnen (der erste
Treffer wird verwendet):
- debian/*/DEBIAN/symbols
-
Informationen über Laufzeitbibliotheken, die vom aktuellen Bauprozess
erstellt werden, der auch dpkg-shlibdeps aufruft. Sie werden von
dpkg-gensymbols(1) erstellt. Sie werden nur verwendet, falls die
Bibliothek im Bau-Baum des Pakets gefunden wird. Die Symboldatei im Bau-Baum
hat Vorrang gegenüber Symboldateien aus anderen Binärpaketen.
- /etc/dpkg/symbols/Paket.symbols.Architektur
-
- /etc/dpkg/symbols/Paket.symbols
-
Systemabhängige Überschreibung der Abhängigkeitsinformationen von
Laufzeitbibliotheken. Architektur ist die Architektur des aktuellen
Systems (ermittelt durch dpkg-architecture -qDEB_HOST_ARCH).
- Ausgabe von Bqdpkg-query --control-path Paket symbols"
-
Vom Paket bereitgestellte Abhängigkeitsinformationen für
Laufzeitbibliotheken. Falls nicht durch --admindir überschrieben,
befinden sich solche Dateien unter /var/lib/dpkg.
Während des Durchsuchens aller vom Programm verwendeten Symbole erinnert
sich dpkg-shlibdeps an die (höchste) Minimalversion, die von jeder
Bibliothek benötigt wird. Am Ende des Prozesses ist es in der Lage, die
minimale Abhängigkeit für jede eingesetzte Bibliothek zu schreiben
(vorausgesetzt, die Informationen in den Symbol-Dateien sind korrekt).
Als Sicherheitsmaßnahme kann eine Symbols-Datei ein Meta-Informationsfeld
Build-Depends-Package enthalten. dpkg-shlibdeps entnimmt dann die
minimale Version, die von dem korrespondierenden Paket im Feld
Build-Depends benötigt wird, und verwendet diese Version, falls sie höher
ist als die minimale Version, die beim Durchsuchen der Symbole ermittelt
wurde.
Shlibs-Dateien
Shlibs-Dateien ordnen Bibliotheken direkt Abhängigkeiten zu (ohne auf die
Symbole zu schauen). Daher ist dies oft stärker als benötigt, aber dafür
sicher und leicht zu handhaben.
Die Abhängigkeiten für eine Bibliothek werden an verschiedenen Stellen
nachgeschlagen. Die erste Datei, die Informationen für die betrachtete
Bibliothek bereitstellt, wird verwendet:
- debian/shlibs.local
-
Paket-beschränkte Überschreibung der Abhängigkeitsinformationen von
Laufzeitbibliotheken.
- /etc/dpkg/shlibs.override
-
Systemabhängige Überschreibung der Abhängigkeitsinformationen von
Laufzeitbibliotheken.
- debian/*/DEBIAN/shlibs
-
Informationen über Laufzeitbibliotheken, die vom aktuellen Bauprozess
erstellt werden, der auch dpkg-shlibdeps aufruft. Sie werden nur
verwendet, falls die Bibliothek im Bau-Verzeichnis eines Pakets gefunden
wird. Die Shlibs-Datei in diesem Bau-Verzeichnis hat gegenüber
Shlibs-Dateien von anderen Binärpaketen Vorrang.
- Ausgabe von Bqdpkg-query --control-path Paket shlibs"
-
Vom Paket bereitgestellte Abhängigkeitsinformationen für
Laufzeitbibliotheken. Falls nicht durch --admindir überschrieben,
befinden sich solche Dateien unter /var/lib/dpkg.
- /etc/dpkg/shlibs.default
-
Systemabhängige Vorgaben für Abhängigkeitsinformationen von
Laufzeitbibliotheken.
Die entnommenen Abhängigkeiten werden direkt verwendet (es sei denn, sie
werden als Dubletten herausgefiltert oder sie sind schwächer als eine andere
Abhängigkeit).
OPTIONEN
dpkg-shlibdeps interpretiert nicht-Options-Argumente als Namen von
ausführbaren Programmen, als ob diese mit
-eProgramm übergeben worden
wären.
- -eProgramm
-
Nimmt Abhängigkeiten auf, die für von Programm benötigte
Laufzeitbibliotheken angemessen sind. Diese Option kann mehrfach angegeben
werden.
- -lVerzeichnis
-
Stellt Verzeichnis der Liste der zu durchsuchenden privaten
Laufzeitbibliotheken voran (seit Dpkg 1.17.0). Diese Option kann mehrfach
angegeben werden.
Hinweis: Verwenden Sie diese Variable, statt LD_LIBRARY_PATH zu
setzen, da diese Umgebungsvariable verwandt wird, um den Laufzeit-Linker zu
steuern und ihr Missbrauch zum Setzen von Pfaden zu Laufzeitbibliotheken zur
Bauzeit kann beispielsweise beim Cross-Kompilieren problematisch werden.
- -dAbhängigkeitsfeld
-
Fügt Abhängigkeiten hinzu, die zum Abhängigkeitsfeld der Steuerdatei
hinzugefügt werden sollen. (Die Abhängigkeiten für dieses Feld werden in die
Variable shlibs:Abhängigkeitsfeld geschrieben.)
Die Option -dAbhängigkeitsfeld betrifft alle Programme, die danach
angegeben werden, bis zum nächsten -dAbhängigkeitsfeld. Der
Standardwert für Abhängigkeitsfeld ist Depends.
Falls der gleiche Abhängigkeitseintrag (oder ein Satz von Alternativen) mehr
als einmal in den erkannten Abhängigkeitsfeldnamen Pre-Depends,
Depends, Recommends, Enhances oder Suggests auftaucht, wird
dpkg-shlibdeps die Abhängigkeit von allen Feldern außer dem, das die
wichtigsten Abhängigkeiten repräsentiert, entfernen.
- -pVariablennamepräfix
-
Beginnt die Ersetzungsvariablen mit Variablennamepräfix: statt mit
shlibs:. Entsprechend werden alle Ersetzungsvariablen, die mit
Variablennamepräfix: (statt mit shlibs:) beginnen, aus der
Ersetzungsvariablendatei entfernt.
- -O[Dateiname]
-
Gibt die Ersetzungsvariableneinstellung in die Standardausgabe (oder nach
Dateiname, falls angegeben, seit Dpkg 1.17.2) aus, statt sie zu der
Ersetzungsvariablendatei (standardmäßig (debian/substvars) hinzuzufügen.
- -tTyp
-
Bevorzugt Abhängigkeitsinformationen für Laufzeitbibliotheken, die für ein
vorgegebenes Paket markiert sind. Falls keine Markierungsinformation
verfügbar ist, fällt dies auf unmarkierte Informationen zurück. Der
Standard-Pakettyp ist deb. Abhängigkeitsinformationen für
Laufzeitbibliotheken werden für einen vorgegebenen Typ markiert, indem vor
sie der Namen des Typs, ein Doppelpunkt und ein Leerraumzeichen gesetzt
wird.
- -Llokale_shlibs-Datei
-
Liest die Hinwegsetz-Abhängigkeiten von Laufzeitbibliotheken aus
lokale_shlibs-Datei statt aus debian/shlibs.local.
- -TSubstvars-Datei
-
Schreibt Ersetzungsvariablen in Substvars-Datei; standardmäßig
debian/substvars.
- -v
-
Aktiviert ausführlichen Modus (seit Dpkg 1.14.8). Eine Vielzahl von
Meldungen wird angezeigt, um zu erklären, was dpkg-shlibdeps durchführt.
- -xPaket
-
Schließt das Paket von den generierten Abhängigkeiten aus (seit Dpkg
1.14.8). Dies ist für Pakete nützlich, die ELF-Programmdateien (Programme
oder Bibliothekserweiterungen) bereitstellen, die eine Bibliothek im
gleichen Paket verwendet, um Abhängigkeiten des Pakets zu sich selbst zu
vermeiden. Diese Option kann mehrfach verwendet werden, um mehrere Pakete
auszuschließen.
- -SPaketbauverzeichnis
-
Schaut beim Versuch, eine Bibliothek zu finden, zuerst in
Paketbauverzeichnis (seit Dpkg 1.14.15). Dies ist nützlich, wenn das
Quellpaket mehrere Spielarten der gleichen Bibliothek baut und Sie
sicherstellen wollen, dass Sie die Abhängigkeit aus einem bestimmten
Binärpaket erhalten. Sie können diese Option mehrfach verwenden:
Verzeichnisse werden in der gleichen Reihenfolge vor Verzeichnissen anderer
Binärpakete probiert.
- -IPaketbauverzeichnis
-
Ignoriert Paketbauverzeichnis beim Schauen nach Shlibs, Symbolen und
gemeinsam benutzten Bibliotheken (seit Dpkg 1.18.5). Sie können diese Option
mehrfach verwenden.
- --ignore-missing-info
-
Falls keine Abhängigkeitsinformationen für die Laufzeitbibliothek gefunden
werden kann, erfolgt kein Fehlschlag (seit Dpkg 1.14.8). Von der Verwendung
dieser Option wird abgeraten, da alle Bibliotheken
Abhängigkeitsinformationen bereitstellen sollten (entweder über
shlibs-Dateien oder über symbols-Dateien), selbst falls diese noch nicht von
anderen Paketen verwendet werden.
- --warnings=Wert
-
Wert ist ein Bitfeld, das den Satz an Warnungen definiert, die von
dpkg-shlibdeps ausgegeben werden können (seit Dpkg 1.14.17). Bit 0
(Wert=1) aktiviert die Warnung BqSymbol Sym, verwendet von Programm, in
keiner der Bibliotheken gefunden.", Bit 1 (Wert=2) aktiviert die Warnung
BqDas Paket könnte eine nutzlose Abhängigkeit vermeiden" und Bit 2 (Wert=4)
aktiviert die Warnung BqProgramm sollte nicht gegen Bibliothek gelinkt
werden". Standardmäßig ist Wert 3: die ersten zwei Warnungen sind
standardmäßig aktiv, die letzte nicht. Setzen Sie Wert auf 7, falls Sie
möchten, dass alle Warnungen aktiv sein sollen.
- --admindir=Verz
-
Ändert den Ablageort der dpkg-Datenbank (seit Dpkg 1.14.0). Der
Standardort ist /var/lib/dpkg.
- -?, --help
-
Zeigt einen Hinweis zum Aufruf und beendet das Programm.
- --version
-
Gibt die Version aus und beendet das Programm.
UMGEBUNG
- DPKG_COLORS
-
Setzt den Farbmodus (seit Dpkg 1.18.5). Die derzeit unterstützten Werte
sind: auto (Vorgabe), always und never.
- DPKG_NLS
-
Falls dies gesetzt ist, wird es zur Entscheidung, ob Native Language
Support, auch als Unterstützung für Internationalisierung (oder i18n)
bekannt, aktiviert wird (seit Dpkg 1.19.0). Die akzeptierten Werte sind:
0 und 1 (Vorgabe).
DIAGNOSE
Warnungen
Da
dpkg-shlibdeps den Symbolsatz, der von jedem Programm des erstellten
Pakets verwendet wird, analysiert, ist es in mehreren Fällen in der Lage,
Warnungen auszugeben. Sie informieren Sie über Dinge, die im Paket
verbessert werden können. Meistens betreffen diese Verbesserungen direkt die
Quellen der Originalautoren. In der Reihenfolge abnehmender Wichtigkeit
folgen hier die relevanten Warnungen, die auftauchen könnten:
- Symbol Symbol, verwendet von Programm, in keiner der Bibliotheken gefunden.
-
Das angegebene Symbol wurde nicht in den Bibliotheken gefunden, gegen die
das Programm gelinkt wurde. Programm ist höchstwahrscheinlich eine
Bibliothek und muss mit zusätzlichen Bibliotheken während des Bau-Prozesses
gelinkt werden (Option -lBibliothek des Linkers).
- Programm enthält eine nicht-auflösbare Referenz auf Symbol Sym: wahrscheinlich eine Erweiterung.
-
Das angegebene Symbol wurde nicht in den Bibliotheken gefunden, die mit
diesem Programm verlinkt sind. Das Progamm ist höchstwahrscheinlich eine
Erweiterung und das Symbol wird von dem Programm bereitgestellt, das diese
Erweiterung lädt. Theoretisch verfügt eine Erweiterung nicht über einen
SONAMEn, allerdings ist dies bei diesem Programm der Fall und daher konnte
es nicht eindeutig als Erweiterung erkannt werden. Die Tatsache, dass dieses
Programm in einem nicht-öffentlichen Verzeichnis gespeichert wird, ist
allerdings ein starkes Anzeichen dafür, dass es keine normale gemeinsam
benutzte Bibliothek ist. Falls dieses Programm tatsächlich eine Erweiterung
ist, ignorieren Sie die Warnung. Allerdings besteht immer die Möglichkeit,
dass es eine echte Bibliothek ist und dass Programme, die damit verlinken,
einen RPATH verwenden, so dass der dynamische Lader sie findet. In diesem
Fall ist die Bibliothek beschädigt und muss repariert werden.
- Das Paket könnte eine nutzlose Abhängigkeit vermeiden, falls Programm nicht gegen Bibliothek gelinkt wäre (es verwendet keines der Symbole der Bibliothek).
-
Keines der Programme, die gegen Bibliothek gelinkt sind, verwendet
eines der von der Bibliothek bereitgestellten Symbole. Indem Sie die
Programme korrigierten, vermieden Sie die Abhängigkeit, die mit dieser
Bibliothek verbunden ist (es sei denn, die Abhängigkeit wird auch durch eine
andere Bibliothek generiert, die diese Bibliothek wirklich verwendet).
- Das Paket könnte eine nutzlose Abhängigkeit vermeiden, falls Programme nicht gegen Bibliothek gelinkt wären (sie verwenden keines der Symbole der Bibliothek).
-
Exakt das gleiche wie die obige Warnung, aber für mehrere Programme.
- Programm sollte nicht gegen Bibliothek gelinkt werden (es verwendet keines der Bibliotheks-Symbole).
-
Das Programm ist gegen eine Bibliothek gelinkt, die es nicht
benötigt. Das ist kein Problem, aber bei der Ladezeit können kleine
Leistungsverbesserungen erreicht werden, indem diese Bibliothek nicht in das
Programm gelinkt wird. Diese Warnung überprüft die gleichen Informationen
wie die vorhergehende, allerdings für jedes Programm statt global für alle
überprüften Programme.
Fehler
dpkg-shlibdeps wird fehlschlagen, falls es eine vom Programm verwendete
öffentliche Bibliothek nicht finden kann oder falls diese Bibliothek keine
zugeordneten Abhängigkeitsinformationen hat (entweder eine Shlibs- oder
Symbols-Datei). Eine öffentliche Bibliothek hat einen
SONAME und ist
versioniert (libirgendwas.so.
X). Eine private Bibliothek (wie z.B. eine
Erweiterung) sollte keinen
SONAME haben und braucht nicht versioniert zu
sein.
- konnte Bibliothek SONAME-der-Bibliothek benötigt von Programm nicht finden (ihr RPATH ist Bqrpath").
-
Das Programm verwendet eine Bibliothek mit Namen
SONAME-der-Bibliothek, aber dpkg-shlibdeps konnte diese Bibliothek
nicht finden. dpkg-shlibdeps erstellt folgendermaßen eine Liste der zu
prüfenden Verzeichnisse: im RPATH des Programms aufgeführte Verzeichnisse,
durch die Option -l hinzugefügte Verzeichnisse, in der Umgebungsvariable
LD_LIBRARY_PATH aufgeführte Verzeichnisse, Cross-Multiarch-Verzeichnisse
(z.B. /lib/arm64-linux-gnu, /usr/lib/arm64-linux-gnu), standardmäßige
öffentliche Verzeichnisse (/lib, /usr/lib), in /etc/ld.so.conf aufgeführte
Verzeichnisse und veraltete Multilib-Verzeichnisse (/lib32, /usr/lib32,
/lib64, /usr/lib64). Dann prüft es diese Verzeichnisse im Bau-Baum des
analysierten Pakets, in den mit der Befehlszeilenoption -S angegebenen
Paketbauverzeichnissen, in anderen Paketbau-Bäumen, die eine DEBIAN/shlibs-
oder DEBIAN/symbols-Datei enthalten und schließlich im
Wurzelverzeichnis. Falls die Bibliothek nicht in einem dieser Verzeichnisse
gefunden wird, erhalten Sie diesen Fehler.
Falls sich die nicht gefundene Bibliothek in einem privaten Verzeichnis des
gleichen Pakets befindet, müssen Sie das Verzeichnis mit -l
hinzufügen. Falls sie sich in einem anderen gerade zu bauenden Paket
befindet, müssen Sie sicherstellen, dass die Bqshlibs/symbols"-Datei dieses
Pakets bereits angelegt ist und das -l das geeignete Verzeichnis enthält,
falls die Bibliothek zudem in einem privaten Verzeichnis liegt.
- Keine Abhängigkeitsinformationen für Bibliotheksdatei (verwendet von Programm) gefunden.
-
Die von Programm benötigte Bibliothek wurde von dpkg-shlibdeps in
Bibliotheksdatei gefunden, allerdings konnte dpkg-shlibdeps keine
Abhängigkeitsinformationen für diese Bibliothek ermitteln. Um die
Abhängigkeit herauszufinden, hat es versucht, die Bibliothek mittels dpkg
-S Bibliotheksdatei auf ein Debian-Paket abzubilden. Dann überprüfte es
die zugehörigen Shlibs- und Symboldateien in /var/lib/dpkg/info/ und die
verschiedenen Paketbaubäume (debian/*/DEBIAN/).
Dieser Fehlschlag kann durch defekte oder fehlende Shlibs- oder
Symboldateien im Paket der Bibliothek ausgelöst werden. Er könnte auch
auftreten, falls die Bibliothek im gleichen Quellpaket gebaut wird und die
Shlibs-Datei noch nicht angelegt wurde (wobei Sie in diesem Fall
debian/rules korrigieren müssen, damit die Shlibs-Datei erstellt wird, bevor
dpkg-shlibdeps aufgerufen wird). Defekte RPATH können auch dazu führen,
dass die Bibliothek unter nicht-kanonischen Namen gefunden wird
(beispielsweise /usr/lib/openoffice.org/../lib/libssl.so.0.9.8 statt
/usr/lib/libssl.so.0.9.8), so dass dann diese keinem Paket zugeordnet ist;
dpkg-shlibdeps versucht dies zu umgehen, indem es auf einen kanonischen
Namen (mittels realpath(3)) zurückfällt, allerdings könnte dies manchmal
nicht funktionieren. Es ist immer am besten, den RPATH zu bereinigen, um
Probleme zu vermeiden.
Viele weitere Informationen darüber, wo nach Abhängigkeitsinformationen
gesucht wird, können durch einen Aufruf von dpkg-shlibdeps im
detaillierten Modus (-v) erhalten werden. Dies kann nützlich sein, falls
Sie nicht verstehen, warum es Ihnen diesen Fehler meldet.
SIEHE AUCH
deb-shlibs(5),
deb-symbols(5),
dpkg-gensymbols(1).
ÜBERSETZUNG
Die deutsche Übersetzung wurde 2004, 2006-2020 von Helge Kreutzmann
<
debian@helgefjell.de>, 2007 von Florian Rehnisch <
eixman@gmx.de> und
2008 von Sven Joachim <
svenjoac@gmx.de>
angefertigt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU General Public License Version 2 oder neuer für die Kopierbedingungen.
Es gibt
KEINE HAFTUNG.