dpkg-shlibdeps - Substvar-Abhängigkeiten für Laufzeitbibliotheken
erstellen
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.
deb-substvars(5),
deb-shlibs(5),
deb-symbols(5),
dpkg-gensymbols(1).
Die deutsche Übersetzung wurde 2004, 2006-2023 von Helge Kreutzmann
<
[email protected]>, 2007 von Florian Rehnisch <
[email protected]>
und 2008 von Sven Joachim <
[email protected]> 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.