dpkg-shlibdeps - skapar substvar-beroenden för delade
bibliotek
dpkg-shlibdeps [flagga...] [-e]
programfil [flagga...]
dpkg-shlibdeps beräknar beroenden mellan exekverbara
filer som anges som argument och delade bibliotek. Beroendena läggs
till i substitueringsvariabelfilen debian/substvars som variabler med
namnen shlibs:beroendefält där
beroendeefält är ett beroendefältsnamn. Alla
andra variabler som börjar på shlibs: tas bort ur
filen.
dpkg-shlibdeps kan generera beroendeinformation från
två informationskällor, antingen filen symbols eller
filen shlibs. För varje binärfil som analyseras av
dpkg-shlibdeps tas en lista fram över vilka bibliotek de
är länkade mot. Programmet slår sedan upp varje
bibliotek i filen symbols, eller i filen shlibs (om den
förstnämnda inte existerar eller om debian/shlibs.local
innehåller ett relevant beroende). ). De båda filerna ska
tillhandahållas av bibliotekspaketet och borde därför
vara tillgängliga som /var/lib/dpkg/info/paket.symbols
eller /var/lib/dpkg/info/paket.shlibs. Paketnamnet
identifieras i två steg: biblioteksfilen lokaliseras på
systemet (genom att slå upp i de kataloger ld.so skulle
använt), och därefter används dpkg -S
biblioteksfil för att slå upp vilket paket biblioteket
kommer från.
Symbolfiler innehåller mer finkornig beroendeinformation
genom att ange det minsta beroendet för varje symbol som exporteras
av biblioteket. Skriptet försöker hitta de symboler som
är associerade med ett bibliotek på följande platser
(den första träffen används):
- debian/*/DEBIAN/symbols
- Information om delade bibliotek som skapats av den aktuella byggproceduren
som också anropade dpkg-shlibdeps. De genereras av
dpkg-gensymbols(1). De används endast om biblioteket finns i
paketets byggräd. Filen symbols i det byggträdet går
före symbols-filer från andra binärpaket.
- /etc/dpkg/symbols/package.symbols.arkitektur
- /etc/dpkg/symbols/paket.symbols
- Överstyrningsfil för beroendeinformation för delade
bibliotek, per system. arkitektur är det aktuella systemets
arkitektur (hämtas från dpkg-architecture
-qDEB_HOST_ARCH).
- Utdata från
”dpkg-query --control-path package
symbols”
- Paketlokal överstyrande beroendeinformation för delade
bibliotek. Filerna befinner sig i /var/lib/dpkg om inte överstyrt
med --admindir.
dpkg-shlibs kommer ihåg den (största)
minimala version som behövs av varje bibliotek när den
söker genom de symboler som används av alla
binärfilerna. När proceduren är avslutad kan den visa
det minsta beroende som behövs av alla bibliotek som används
(så tillvida informationen i symbols-filerna är
korrekt).
As a safe-guard measure, a symbols file can provide a
Build-Depends-Package or Build-Depends-Packages
meta-information field and dpkg-shlibdeps will extract the minimal
version required by the corresponding package in the Build-Depends
field and use this version if it's higher than the minimal version computed
by scanning symbols.
Shlibs-filer associerar ett bibliotek direkt till ett beroende
(utan att se på symbolerna). Det är därför
oftare starkare än vad som egentligen behövs, men mycket
säkert och enkelt att hantera.
Beroenden för ett bibliotek slås upp på flera
platser. Den första filen som innehåller information om det
intressanta biblioteket används:
- debian/shlibs.local
- Paketlokal överstyrande beroendeinformation för delade
bibliotek.
- /etc/dpkg/shlibs.override
- Systemspecifik överstyrande beroendeinformation för delade
bibliotek.
- debian/*/DEBIAN/shlibs
- Information om delade bibliotek som skapats av den aktuella byggproceduren
som också anropade dpkg-shlibdeps. De genereras av
dpkg-gensymbols(1). De används bara om biblioteket finns i
paketets byggträd. Filen shlibs i byggträdet går
före shlibs-filer från andra paket.
- Utdata från
”dpkg-query --control-path package
shlibs”
- Paketlokal överstyrande beroendeinformation för delade
bibliotek. Filerna befinner sig i /var/lib/dpkg om inte överstyrt
med --admindir.
- /etc/dpkg/shlibs.default
- Systemspecifik standardberoendeinformation för delade
bibliotek.
De utökade beroendena används sedan direkt
(förutom om de filtrerats bort för att de identifierats som
dubbletter, eller svagare än ett annat beroende).
dpkg-shlibdeps tolkar argument som inte är flaggor
som namn på körbara filer, precis som om de angivits som
-eprogramfil.
- -eprogramfil
- Ta med beroenden som är passar för delade bibliotek som
krävs för programfil. Flaggan kan användas
flera gånger.
- -lkatalog
- Lägg till katalog först i listan över
kataloger som ska eftersökas efter privata delade bibliotek (sedan
dpkg 1.17.0). Flaggan kan användas flera gånger.
Observera: Använd den här flaggan
istället för att sätta LD_LIBRARY_PATH,
eftersom miljövariabeln används för att styra
körtidslänkaren, och genom att utnyttja det för att
ange sökvägen till delade bibliotek vid kompilering kan
det uppstå problem, till exempel vid korskompilering.
- -dberoendefält
- Lägg till beroenden som ska läggas till till control-filens
beroendefält beroendefält. (Beroenden för
detta fält läggs in i variabeln
shlibs:beroendefält.)
Flaggan -dberoendefält gäller
för samtliga binärer efter flaggan, fram till nästa
-dberoendefält. Standardvärdet för
beroendefält är Depends.
Om samma katalogpost (eller en uppsättning alternativ)
förekommer i mer än ett av de kända
beroendefältnamnen Pre-Depends, Depends,
Recommends, Enhances eller Suggests så
kommer dpkg-shlibdeps att automatiskt ta bort beroendet
från samtliga fält förutom det som anger de
viktigaste beroendena.
- -pvariabelnamnsprefix
- Inled substitueringsvariabler med variabelnamnsprefix: i
stället för shlibs:. På samma sätt
kommer befintliga substitueringsvariabler som inleds med
variabelnamnsprefix: (i stället för
shlibs:) att tas bort från substitueringsvariabelfilen.
- -O[filnamn]
- Skriv substitueringsvariabelinställningar på standard ut
(eller filnamn om angivet, sedan dpkg 1.17.2), i stället
för att försöka lägga till dem i
substitueringsvariabelfilen (som standard debian/substvars).
- -ttyp
- Föredra information om delade bibliotek som märkts
för den givna pakettypen. Om det inte finns någon
märkt information används omärkt. Standardpakettypen
är deb. Beroendeinformation för delade bibliotek
märks för en given typ genom att inleda det med namnet
på typen, ett kolon, samt blanktecken.
- -Llokal-shlibs-fil
- Läs överstyrande beroendeinformation om delade bibliotek
från lokal-shlibs-fil i stället för
debian/shlibs.local.
- -Tsubstvars-fil
- Skriv substitueringsvariabler i substvars-fil; standard är
debian/substvars.
- -V
- Aktiverar pratsamt läge (sedan dpkg 1.14.8). Flera meddelanden
visas för att förklara vad dpkg-shlibs håller
på med.
- -xpaket
- Uteslut paketet från de genererade beroendena (dpkg 1.14.8).
Flaggan är användbar för att undvika
självberoenden för paket som innehåller
ELF-binärer (exekverbara eller biblioteksinsticksprogram) som
använder ett bibliotek som ligger i samma paket. Flaggan kan
användas flera gånger för att utesluta flera
paket.
- -Spaketbyggkatalog
- Se först i paketbyggkatalog vid försök att
hitta ett bibliotek (sedan dpkg 1.14.15). Användbart när
källkodspaketet bygger flera varianter av samma bibliotek och du
vill se till att du får beroendet från ett givet
binärpaket. Flaggan kan användas flera gånger:
kataloger söks efter i samma ordning före kataloger
från andra binärpaket.
- -Ipaketbyggkatalog
- Ignorera paketbyggkatalog vid sökning efter delade shlibs,
symboler och delade biblioteksfiler (sedan dpkg 1.18.5). Flaggan kan
användas flera gånger.
- --ignore-missing-info
- Misslyckas inte om det inte upptäcks någon
beroendeinformation för ett delat bibliotek (sedan dpkg 1.14.8).
Den här flaggan rekommenderas inte, alla bibliotek bör
tillhandahålla beroendeinformation (antingen med shlibs-filer eller
med symbols-filer), även om de ännu inte används av
andra paket.
- --warnings=värde
- Värde är ett bitfält som anger de varningar
som kan ges av dpkg-shlibdeps (sedan dpkg 1.14.17). Bit 0
(värde=1) aktiverar varningen ”symbolen sym, som
används av binär, hittades inte i något av
biblioteken”, bit 1 (värde=2) aktiverar varningen
”paketet kunde undvika ett onödigt beroende” och bit
2 (värde=4) aktiverar varningen ”binär borde
inte vara länkat mot bibliotek”. Standard för
värde är 3: de första två varningarna
är aktiva som standard, men inte den sista. Sätt
värde till 7 om du vill att alla varningar ska vara
aktiva.
- --admindir=kat
- Ändra platsen för dpkg-databasen (sedan dpkg 1.14.0).
Förvald plats är /var/lib/dpkg.
- -?, --help
- Visar hjälpskärm och avslutar.
- --version
- Visar version och avslutar.
- DPKG_COLORS
- Väljer färgläge (sedan dpkg 1.18.5). För
närvarande godtas följande värden: auto
(förval), always och never.
- DPKG_NLS
- Om satt, används för att bestämma om lokalt
språkstöd ska aktiveras, även känt som
internationaliseringsstöd (eller i18n) (sedan dpkg 1.19.0).
Tillåtna värden är: 0 och 1
(förval).
dpkg-shlibdeps kommer att misslyckas om det inte hittar ett
öppet bibliotek som en av binärerna använder, eller om
biblioteket saknar associerad beroendeinformation (antingen en shlibs-fil
eller en symbols-fil). Ett öppet bibliotek har ett SONAME och
är versionshanterad (libvadsomhelst.so.X). Ett privat
bibliotek (till exempel ett insticksprogram) bör inte ha något
SONAME och behöver inte vara versionshanterat.
- hittade inte
biblioteket bibliotek-sonamn som behövs för
binär (dess RPATH är
"rpath")
- Binär använder ett bibliotek som heter
bibliotek-sonamn, men dpkg-shlibdeps kunde inte hitta
biblioteket. dpkg-shlibdeps skapar en lista över kataloger
det ser i på följande sätt: katalogerna som beskrivs
i RPATH i binären, kataloger som lagts till med flaggan -l,
kataloger i miljövariabeln LD_LIBRARY_PATH,
kors-multiarkitekturskataloger (t.ex /lib/arm64-linux-gnu,
/usr/lib/arm64-linux-gnu), vanliga öppna kataloger (/lib,
/usr/lib), kataloger listade i /etc/ld.so.conf, samt
föråldrade multilib-kataloger (/lib32, /usr/lib32, /lib64,
/usr/lib64). Därefter ser det i motsvarande kataloger i
byggträdet för paketet som innehåller binären
som analyseras, i paketbyggträdet som anges med kommandoradsflaggan
-S, i andra pakets byggträd som innehåller en
DEBIAN/shlibs-fil och slutligen i rotkatalogen. Om biblioteket inte hittas
i någon av dessa kataloger får du det här
felmeddelandet.
Om biblioteket som inte hittades ligger i en privat katalog i
samma paket bör du lägga till katalogen med -l. Om
det finns i ett annat binärpaket som byggs bör du se till
att shlibs- eller symbols-filen för paketet redan har skapats och
att -l innehåller korrekt katalog som det också
ligger i en privat katalog.
- hittade ingen
beroendeinformation för biblioteksfil (använd
av binär).
- Biblioteket som behövs av binär hittades i
biblioteksfil av dpkg-shlibdeps, men dpkg-shlibdeps
kunde inte hitta någon beroendeinformation för biblioteket.
För att hitta beroendet har det försökt koppla
biblioteket mot ett Debianpaket med hjälp av dpkg -S
biblioteksfil. Därefter såg det i motsvarande shlibs-
och symbols-filer i /var/lib/dpkg/info/, samt i de olika paketens
byggträd (debian/*/DEBIAN/).
Det här felet kan orsakas av felaktiga eller saknade
shlibs- eller symbols-filer i bibliotekets paket. Det kan även
inträffa om biblioteket byggts i samma källkodspaket och
om shlibs-filen ännu inte har skapats (då måste du
fixa debian/rules så att det skapar shlibs-filen innan det
anropar dpkg-shlibdeps). Felaktig RPATH kan också leda
till att biblioteket hittas under ett icke-kanoniskt namn (till exempel:
/usr/lib/openoffice.org/../lib/libssl.so.9.8 istället för
/usr/lib/libssl.so.0.9.8) som inte associeras till något paket,
dpkg-shlibdeps försöker gå runt detta genom
att falla tillbaka på ett kanoniskt namn (med
realpath(3)), men det fungerar kanske inte alltid. Det är
alltid bäst att städa upp RPATH i binären
för att undvika problem.
Om du anropar dpkg-shlibdeps i pratsamt läge
(-v) kommer det ge mycket mer information om var det
försökte hitta beroendeinformationen. Det kan vara
användbart om du inte förstår varför du
får felmeddelandet.
deb-substvars(5), deb-shlibs(5),
deb-symbols(5), dpkg-gensymbols(1).
ÖVERSÄTTNING
Peter Krefting och Daniel Nylander.