RPM-VERSION(7)

NAMN
rpm-version — RPM:s versionssystem

SYNOPSIS
[EPOK:]VERSION[-UTGÅVA]

BESKRIVNING
En etikett känd som EVR används för att referera till programvaruversioner i RPM och består av upp till tre komponenter:

•   VERSION avspeglar den faktiska versionen av den paketerade programvaran.
•   UTGÅVA reflekterar paketeringsrevisioner inom den programvaruversionen.
•   EPOK är ett artificiellt åsidosättande som gör det möjligt att gå runt anomalier i versioneringen.

Endast komponenten VERSION är obligatorisk i en EVR-etikett. Alla RPM-paket har dock en VERSION och en UTGÅVA.

  Version
VERSIONssträngen avspeglar den faktiska versionen av den paketerade programvaran.

Strängen består av alfanumeriska ASCII-tecken, eventuellt avdelade med separatorerna punkt (.), understrykningstecken (_) och plustecknet (+), samt operatorerna tilde (~) och cirkumflex (^).

Operatorerna används för att avbilda versionssträngar före och efter utgåvor till en koherent uppgradering.

Särskilt kan tecknet bindestreck (-) INTE användas i VERSION eller UTGÅVA eftersom det är komponentseparatorn.

  Utgåva
UTGÅVAN avspeglar en revision inom en enda programvaruversion. Idealt är UTGÅVA ett enkelt heltal som ökas närhelst ändringar görs av ett paket, och skall återställas (till 1) närhelst programvaruversionen ändras.

Tektiskt är formatet exakt samma som för VERSION.

  Epok
EPOKEN är ett ickenegativt heltal, separat från versionen med ett kolon (:). Det är den mest signifikanta delen av en EVR som vrider versionsjämförelsen så att en äldre version förefaller nyare. Den är ibland nödvändig för att gå runt versionsanomalier såsom att ett programvaruprojekt ändrar sin versioneringsmetod, men även paketeringsmisstag.

En utelämnad EPOK har det implicita värdet noll.

Epoken skall bara användas som en sista utväg. Den bryter principen om minsta möjliga förvåning, och att ändra den kräver att alla relaterade versionerade beroenden i andra paket uppdateras på motsvarande sätt.

  Jämförelse
Två EVRer jämförs från vänster till höger, en komponent åt gången. Komponenterna jämförs från vänster till höger, ett segment åt gången. Jämförelsen slutar så fort som ett segment eller en komponentnivå skiljer, så om t.ex. epoken skiljer beaktas inte resten av EVRen alls.

Inom komponenter utgör konsekutiva alfabetiska tecken och konsekutiva siffror implicita segment. Explicita segment markeras med separatorer och operatorer. Numeriska segment jämförs numeriskt som heltal där inledande nollor ignoreras, annars används lexikografisk jämförelse. Det vill säga, abc123 består av två segment: abc och 123 och är lika med abc0123, abc.123 och abc.000123 trots att de ser olika ut.

Numeriska segment anses nyare än alfanumeriska segment oavsett det faktiska innehållet. När de är i övrigt lika betraktas komponenten med fler segment som nyare, på samma sätt som en EVR med fler komponenter betraktas som nyare. Till exempel är 0.0 nyare än 0 och 1.xyz är äldre än 1.0 men nyare än 1.

Tecknen som utgör segmentseparator jämförs inte, så de kan användas utbytbart, och flera på varandra följande separatorer hanteras som om endast en separator användes. Alltså är 1.0 lika med 1+0 och 1+.+0.

Tildeoperatorer får ett segment att sorteras som äldre, och används till förhandsutgåveversioner. Till exempel är 2.0~beta1 äldre än 2.0 eller 2.0~rc1, och nyare än 1.0. Operatorn cirkumflex är väsentligen motsatsen till tilde. Den får ett segment att sorteras som nyare, och används för ögonblicksbilder efter utgåvan som finns mellan faktiska utgåvor av programvara. Till exampel är 2.0^150825 nyare än 2.0 men äldre än 2.0.1.

EXEMPEL
123
    En enkel ensegmentsversion 123. Nyare än 99, äldre än 321.

1.0.1
    En segmenterad versionssträng 1.0.1, så som de ofta används i programvaruprojekt för att indikera major.minor.mikro-semantik. Nyare än 1.0, äldre än 1.0.2.

2.60.1-1
    Första utgåvan av version 2.60.1. Nyare än 2.0 eller 2.60, men äldre än 3.0.

1.0-5
    Femte utgåvan av version 1.0, nyare än 1.0 eller 1.0-1, äldre än 1.0.1.

5:3.0-1
    Första utgåvan av version 3.0, med epoken 5. Nyare än 6.0-1, eller 4:6.0-1, äldre än 5:3.1-1.

1.0~beta2
    Förhandsutgåva beta2 av version 1.0. Nyare än 0.99 och 1.0~beta1, äldre än 1.0.

2.0^20250611
    Ögonblicksbild från 20250611 efter version 2.0. Nyare än 2.0, äldre än 2.0.1.

FEL
Olika inte uppenbara beteenden och mörka hörn finns inom algoritmen för jämförelse av versioner, men är svåra att åtgärda på grund av hög risk att förstöra för befintliga paket:

•   Icke-ASCII tecken ignoreras och är därmed lika: 1.1.α är lika med 1.1.β och till och med 1.1.ββ. rpmbuild(1) tillåter inte sådanda EVR:er men det är möjligt att påträffa ”otillåtna” värden via API-användning, väldigt gamla paket och paket som skapats med tredjepartsverktyg.
•   Implicita segment kan vara vilseledande: 1.f är nyare än 1c.f. Resultatet blir mer uppenbart genom att göra segmenten explicita: 1.f är nyare än 1.c.f eftersom segmenten jämförs ett och ett, och c sorterar lägre än f lexikografiskt.

rpm(8) rpmbuild(1) rpmsort(1)

http://www.rpm.org/

ÖVERSÄTTNING
Den svenska översättningen av denna manualsida skapades av Göran Uddeborg <goeran@uddeborg.se>

Denna översättning är fri dokumentation; läs GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) eller senare för upphovsrättsvillkor. Vi tar INGET ANSVAR.

Om du hittar fel i översättningen av denna manualsida, skicka ett mail till Tp-sv@listor.tp-sv.se.