dpkg-gensymbols(1) | dpkg suite | dpkg-gensymbols(1) |
dpkg-gensymbols - generera symbolfiler (information om delade bibliotek)
dpkg-gensymbols [flagga...]
dpkg-gensymbols söker genom en temporärt byggträd (som standard debian/tmp) efter bibliotek och skapar en symbols-fil som beskriver dem. Denna fil kommer sedan, såvida den inte är tom, att installeras i DEBIAN-underkatalogen i byggträdet så att den hamnar i styrinformationen i paketet.
När dessa filer skapas, används ett par symbolfiler från paketansvariga som indata. Programmet söker efter följande filer (och använder den första det finner):
Dessa filer är i huvudsak intressanta för att kunna tillhandahålla den minimala version associerad med varje symbol i biblioteken. Detta motsvarar normalt den första version av paketet som tillhandahöll symbolen, men det kan manuellt inkrementeras av de ansvariga om symbolens ABI utökas med bibehållen bakåtkompatibilitet. Det är den ansvarigas ansvar att hålla dessa filer àjourförda och korrekta, men dpkg-gensymbols kan hjälpa till med detta.
När den genererade symbolfilen skiljer sig mot den version som tillhandahållits av de paketansvariga kommer dpkg-gensymbols att skriva ut en differens mellan de två versionerna. Om ändringarna är för stora kommer programmet dessutom att misslyckas (du kan justera hur stora ändringar du kan tolerera, se flaggan -c).
Det grundläggande utväxlingsformatet för symbolfilen beskrivs i deb-symbols(5), vilket används av symbolfilerna som inkluderas i bärpaket. Dessa genereras från mallsymbolfiler med ett format som baseras på det tidigare nämnda, beskrivet i deb-src-symbols(5) och inkluderas i källkodspaket.
Symbolfilerna är bara riktigt nyttiga om de motsvarar hur paketet har utvecklats över flera versioner. De paketansvariga måste därför uppdatera dem varje gång en ny symbol läggs till så att dess associerade minimala version motsvarar verkligheten.
Diffarna som inkluderas i byggloggarna kan användas som en startpunkt, men den paketansvarige måste dessutom se till att beteendet för symbolerna inte har ändrats på ett sätt som gör att något som använder symbolerna och länkar mot den nya versionen slutar fungera med den gamla versionen.Diffarna som finns i byggloggarna kan användas som startpunkt, men paketansvariga måste dessutom se till att beteendet på dessa symboler inte på något sätt har ändrat sig på ett sådant sätt att något som använder symbolerna och länkar mot den nya versionen slutar fungera med den gamla versionen.
I de flesta fall kan differensfilen appliceras direkt på filen debian/paket.symbols. Med det i åtanke så behövs det oftast ytterligare justeringar: det rekommenderas till exempel att skippa Debianrevisionen från det minimala versionsnummer så att bakåtanpassningar med ett lägre versionsnummer, men med samma uppströmsversion, fortfarande uppfyller de genererade beroendena. Om Debianrevisionen inte kan tas bort på grund av att en symbol faktiskt lades till av en Debianspecifik ändring så bör ett ”~” läggs till i slutet av versionen.
Innan man applicerar en patch på symbolfilen bör de ansvariga dubbelchecka att den är korrekt. Publicerade symboler bör inte försvinna, så patchen bör ideellt sett bara lägga till nya rader.
Observera att du kan lägga in kommentarer i symbolfilerna
Glöm inte att kontrollera om de gamla symbolversionerna måste ökas. Det finns inget sätt för dpkg-gensymbols att varna om detta. Att blint applicera diffen eller utgå från att inget har ändrats om diffen är tom, utan att se efter sådana ändringar, kan leda till att paket med lösa beroenden kan deklarera att de fungerar med äldre paket de inte kan fungera tillsammans med. Detta kommer introducera svårfunna problem vid (delvisa) uppgraderingar.{
Ett välunderhållet bibliotek har följande funktioner:
När man underhåller symbolfilen är det lätt att upptäcka symboler som dyker upp och försvinner. Det är svårare att upptäcka inkompatibla API- och ABI-ändringar. Den paketansvarige bör därför noggrant läsa igenom uppströmsändringsloggen för fall då reglerna för god hantering av bibliotek bryts. Om ett möjligt fel upptäcks bör uppströmsförfattaren meddelas, då det alltid är bättre att problemet rättas uppströms än specifikt i Debian.
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.
Värdet kan överstyras med miljövariabeln DPKG_GENSYMBOLS_CHECK_LEVEL.
<https://people.redhat.com/drepper/symbol-versioning>, <https://people.redhat.com/drepper/goodpractice.pdf>, <https://people.redhat.com/drepper/dsohowto.pdf>, deb-src-symbol(5), deb-symbols(5), dpkg-shlibdeps(1).
Peter Krefting och Daniel Nylander.
2023-05-11 | 1.21.22 |