dpkg-shlibdeps - Substvar-Abhängigkeiten für
Laufzeitbibliotheken erstellen
ÜBERSICHT
dpkg-shlibdeps [Option…] [-e]
Programm [Option…]
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 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
„dpkg-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 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
„dpkg-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).
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 „Symbol Sym, verwendet
von Programm, in keiner der Bibliotheken gefunden.“, Bit 1
(Wert=2) aktiviert die Warnung „Das Paket könnte eine
nutzlose Abhängigkeit vermeiden“ und Bit 2 (Wert=4)
aktiviert die Warnung „Programm 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.
- 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).
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.
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
„rpath“).
- 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 „shlibs/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.
ÜBERSETZUNG
Die deutsche Übersetzung wurde 2004, 2006-2023 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.