RPM-VERSION(7)

NUME
rpm-version - sistemul de versiuni RPM

SINOPSIS
[EPOCH:]VERSION[-RELEASE]

DESCRIERE
O etichetă cunoscută sub numele de EVR este utilizată pentru a face referire la versiunile de software din RPM, constând din maximum trei componente:

•   VERSION (versiune) reflectă versiunea actuală a pachetului software.
•   RELEASE (lansare) reflectă reviziile împachetării în cadrul acelei versiuni de software.
•   EPOCH (epocă) este o suprascriere artificială care permite rezolvarea anomaliilor legate de denumirea versiunilor.

Numai componenta VERSION este obligatorie într-o etichetă EVR. Cu toate acestea, toate pachetele RPM au o componentă VERSION și o componentă RELEASE.

  Versiune
Șirul VERSION reflectă versiunea actuală a software-ului împachetat.

Șirul este format din caractere alfanumerice ASCII, opțional segmentate cu separatoare punct (.), liniuță de subliniere (_) și semnul plus (+), și operatori tilde (~) și caret (^).

Operatorii I sunt utilizați pentru a asocia șirurile de caractere ale versiunilor anterioare și ulterioare lansării într-o evoluție a actualizării coerentă.

De remarcat faptul că liniuța de unire (-) NU poate fi utilizată în VERSION sau RELEASE, deoarece este separatorul de componente.

  Lansare
RELEASE reflectă o revizuire în cadrul unei singure versiuni de software. În mod ideal, RELEASE este un număr întreg simplu care crește de fiecare dată când se fac modificări la un pachet și ar trebui să fie reinițializat (la 1) de fiecare dată când se schimbă versiunea de software.

Din punct de vedere tehnic, formatul este exact același ca pentru VERSION.

  Epocă
EPOCH este un număr întreg nenegativ, separat de versiune prin două puncte (:). Este cea mai importantă parte a unui EVR, distorsionând compararea versiunilor pentru a face o versiune mai veche să pară mai nouă. Uneori este necesar să se rezolve anomaliile de versiune, cum ar fi schimbarea schemei de versiuni a unui proiect software, dar și erorile de împachetare.

O componentă EPOCH omisă are o valoare implicită de zero.

EPOCH ar trebui utilizată numai ca ultimă soluție. Aceasta încalcă principiul surprizei minime, iar modificarea acesteia necesită actualizarea corespunzătoare a tuturor dependențelor versiunilor conexe din alte pachete.

  Compararea
Două EVR-uri sunt comparate de la stânga la dreapta, câte o componentă pe rând. Componentele sunt comparate de la stânga la dreapta, câte un segment pe rând. Compararea se oprește imediat ce se găsește o diferență la nivel de segment sau componentă, astfel încât, dacă, de exemplu, epocile diferă, restul EVR-ului nu este luat în considerare deloc.

În cadrul componentelor, caracterele alfabetice consecutive și numerele consecutive formează segmente implicite. Segmentele explicite sunt indicate prin separatoare și operatori. Segmentele numerice sunt comparate numeric ca numere întregi, ignorându-se zerourile din față, în caz contrar fiind utilizată comparația lexicografică. Adică, abc123 constă din două segmente: abc și 123 și este egal cu abc0123, abc.123 și abc.000123, în ciuda diferenței de aspect.

Segmentele numerice sunt considerate mai noi decât segmentele alfabetice, indiferent de conținutul real. În cazul în care sunt egale, componenta cu mai multe segmente este considerată mai nouă, iar în mod similar, un EVR cu mai multe componente este considerat mai nou. De exemplu, 0.0 este mai nou decât 0, iar 1.xyz este mai vechi decât 1.0, dar mai nou decât 1.

Caracterele segmentului separator nu sunt comparate, astfel încât pot fi utilizate în mod interschimbabil, iar separatoarele consecutive multiple sunt tratate ca și cum ar fi fost utilizat un singur separator. Astfel, 1.0 este egal cu 1+0 și 1+.+0.

Operatorul tildă determină sortarea unui segment mai vechi și este utilizat pentru versiuni pre-lansare. De exemplu, 2.0~beta1 este mai vechi decât 2.0 sau 2.0~rc1 și mai nou decât 1.0. Operatorul caret este, în esență, opusul operatorului tildă. Acesta determină sortarea unui segment mai nou și este utilizat pentru instantanee post-lansare care există între lansările efective de software. De exemplu, 2.0^150825 este mai nou decât 2.0, dar mai vechi decât 2.0.1.

EXEMPLE
123
    O versiune simplă cu un singur segment 123. Mai nouă decât 99, mai veche decât 321.Aceasta determină sortarea segmentului ca fiind mai nou și este utilizată pentru instantanee post-lansare care există între lansările efective ale software-ului. De exemplu, 2.0^150825 este mai recent decât 2.0, dar mai vechi decât 2.0.1.

1.0.1
    Un șir de caractere segmentat 1.0.1, utilizat frecvent în proiectele software pentru a indica semantica majoră.minoră.micro. Mai nou decât 1.0, mai vechi decât 1.0.2.

2.60.1-1
    Prima lansare a versiunii 2.60.1. Mai nouă decât 2.0 sau 2.60, dar mai veche decât 3.0.

1.0-5
    A cincea lansare a versiunii 1.0, mai nouă decât 1.0 sau 1.0-1, mai veche decât 1.0.1.

5:3.0-1
    Prima lansare a versiunii 3.0, cu epoca 5. Mai nouă decât 6.0-1 sau 4:6.0-1, mai veche decât 5:3.1-1.

1.0~beta2
    Versiune preliminară (pre-lansare) beta2 a versiunii 1.0. Mai nouă decât 0.99 și 1.0~beta1, mai veche decât 1.0.

2.0^20250611
    Instantanee post-lansare 20250611 a versiunii 2.0. Mai nouă decât 2.0, mai veche decât 2.0.1.

ERORI
În algoritmul de comparare a versiunilor există diverse comportamente neevidente și aspecte obscure, dar acestea sunt dificil de abordat din cauza riscului ridicat de a afecta pachetele existente:

•   Caracterele non-ASCII sunt ignorate și, prin urmare, sunt egale: 1.1.α este egal cu 1.1.β și chiar cu 1.1.ββ. rpmbuild(1) respinge astfel de EVR-uri, dar este posibil să întâlniți valori „ilegale” prin utilizarea API-ului, pachete foarte vechi și pachete create cu instrumente terțe.
•   Segmentele implicite pot fi înșelătoare: 1.f este mai nou decât 1c.f. Rezultatul devine mai evident prin explicarea segmentelor: 1.f este mai nou decât 1.c.f deoarece segmentele sunt comparate unul câte unul, iar c este sortat lexicografic mai jos decât f.

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

http://www.rpm.org/

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.