NAMN
dpkg−shlibdeps − skapar substvar−beroenden för delade bibliotek
SYNOPS
dpkg−shlibdeps [flagga...] [−e]programfil [flagga...]
BESKRIVNING
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 skall 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
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).
Som en säkerhetsåtgärd kan en symbols−fil innehålla metainformationsfältet Build−Depends−Package, varpå dpkg−shlibdeps hämtar vilken minsta version som behövs för paketet ur Build−Depends−fältet och använder denna version om den är högre än den minsta version som beräknats genom att söka genom symbolerna.
Shlibs−filer
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).
FLAGGOR
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
Prepend directory to the list of directories to search for private shared libraries (since dpkg 1.17.0). This option can be used multiple times.
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 skall 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]
Print substitution variable settings to standard output (or filename if specified, since dpkg 1.17.2), rather than being added to the substitution variables file (debian/substvars by default).
−ttyp |
Prefer shared library dependency information tagged for the given package type. If no tagged information is available, falls back to untagged information. The default package type is deb. Shared library dependency information is tagged for a given type by prefixing it with the name of the type, a colon, and whitespace. |
−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 |
Enable verbose mode (since dpkg 1.14.8). Numerous messages are displayed to explain what dpkg−shlibdeps does. |
−xpaket
Exclude the package from the generated dependencies (since dpkg 1.14.8). This is useful to avoid self−dependencies for packages which provide ELF binaries (executables or library plugins) using a library contained in the same package. This option can be used multiple times to exclude several packages.
−Spaketbyggkatalog
Look into package−build−dir first when trying to find a library (since dpkg 1.14.15). This is useful when the source package builds multiple flavors of the same library and you want to ensure that you get the dependency from a given binary package. You can use this option multiple times: directories will be tried in the same order before directories of other binary packages.
−Ipackage−build−dir
Ignore package−build−dir when looking for shlibs, symbols, and shared library files (since dpkg 1.18.5). You can use this option multiple times.
−−ignore−missing−info
Do not fail if dependency information can’t be found for a shared library (since dpkg 1.14.8). Usage of this option is discouraged, all libraries should provide dependency information (either with shlibs files, or with symbols files) even if they are not yet used by other packages.
−−warnings=värde
value is a bit field defining the set of warnings that can be emitted by dpkg−shlibdeps (since dpkg 1.14.17). Bit 0 (value=1) enables the warning “symbol sym used by binary found in none of the libraries”, bit 1 (value=2) enables the warning “package could avoid a useless dependency” and bit 2 (value=4) enables the warning “binary should not be linked against library”. The default value is 3: the first two warnings are active by default, the last one is not. Set value to 7 if you want all warnings to be active.
−−admindir=kat
Change the location of the dpkg database (since dpkg 1.14.0). The default location is /var/lib/dpkg.
−?, −−help
Visar hjälpskärm och avslutar.
−−version
Visar version och avslutar.
DIAGNOSTIK
Varningar
Eftersom dpkg−shlibdeps analyserar mängden
symboler som används av varje binärfil i det
genererade paketet, kan det i flera fall skriva ut
varningsmeddelanden. De visar på saker som kan
förbättras i paketet. I de flesta fall gäller
förbättringarna direkt
uppströmskällkoden. Här är de varningar
du kan stöta på, i fallande allvarlighetsgrad:
symbolen sym, som används av
binär, hittades inte i något av
biblioteken.
Den omnämnda symbolen hittades inte i biblioteken som länkas mot binären. Binär är antagligen ett bibliotek och måste länkas mot ett annat bibliotek under byggproceduren (länkarflaggan −lbibliotek).
binär
innehåller en referens till symbolen sym
som inte kan kopplas;
det är troligen ett insticksprogram
Den angivna symbolen hittades inte i biblioteken som länkats mot binären. Binär är antagligen ett insticksprogram och symbolen tillhandahålls av programmet som läser in det. I teorin har inte insticksprogram något SONAMN, men den här binären har ett och därmed kunde det inte tydligt identifieras som insticksprogram. Det faktum att binären befinner sig i en icke−offentlig katalog är dock en stark indikation på att det inte är ett vanligt delat bibliotek. Om binären faktiskt är ett insticksprogram kan du ignorera varningen. Det är dock alltid möjligt att det är ett riktigt bibliotek och att program som länker det använder en RPATH så att den dynamiska länkaren hittar det. Om så är fallet är biblioteket trasigt och behöver fixas.
paketet kan undvika ett
onödigt beroende om binär inte
länkades mot
bibliotek (det använder inget av bibliotekets
symboler)
Ingen av binärerna som länkas mot bibliotek använder någon av symbolerna som tillhandahålls av biblioteket. Genom att rätta alla binärer kan du undvika beroendet som gäller detta bibliotek (såvida inte samma beroende även genereras av ett annat bibliotek som faktiskt används).
package could avoid a
useless dependency if binaries were not linked
against library (they use none of the
library’s symbols)
Exakt samma varning som ovan, men för flera binärer
binär borde inte
vara länkat mot bibliotek (det
använder inget av
bibliotekets symboler)
The binary is linked to a library that it doesn’t need. It’s not a problem but some small performance improvements in binary load time can be obtained by not linking this library to this binary. This warning checks the same information as the previous one but does it for each binary instead of doing the check globally on all binaries analyzed.
Fel
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 SONAMN
och är versionshanterad (libvadsomhelst.so.X).
Ett privat bibliotek (till exempel ett insticksprogram)
bör inte ha något SONAMN och behöver inte
vara versionshanterat.
hittade inte biblioteket bibliotek−sonamn
som behövs för binär (dess
RPATH är "rpath")
The binary uses a library called library−soname but dpkg−shlibdeps has been unable to find the library. dpkg−shlibdeps creates a list of directories to check as following: directories listed in the RPATH of the binary, directories added by the −l option, directories listed in the LD_LIBRARY_PATH environment variable, cross multiarch directories (ex. /lib/arm64−linux−gnu, /usr/lib/arm64−linux−gnu), standard public directories (/lib, /usr/lib), directories listed in /etc/ld.so.conf, and obsolete multilib directories (/lib32, /usr/lib32, /lib64, /usr/lib64). Then it checks those directories in the package’s build tree of the binary being analyzed, in the packages’ build trees indicated with the −S command−line option, in other packages’ build trees that contains a DEBIAN/shlibs or DEBIAN/symbols file and finally in the root directory. If the library is not found in any of those directories, then you get this error.
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).
The library needed by binary has been found by dpkg−shlibdeps in library−file but dpkg−shlibdeps has been unable to find any dependency information for that library. To find out the dependency, it has tried to map the library to a Debian package with the help of dpkg −S library−file. Then it checked the corresponding shlibs and symbols files in /var/lib/dpkg/info/, and in the various package’s build trees (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.
SE ÄVEN
deb−shlibs(5), deb−symbols(5), dpkg−gensymbols(1).
ÖVERSÄTTNING
Peter Krefting och Daniel Nylander.