Chaque paquet a un numéro de version, dans son champ Version du fichier de contrôle.
dpkg impose un ordre sur les numéros de version, afin de savoir si
les paquets sont nouveaux ou anciens et afin que dselect
puisse
dire si un des paquets qu'il a trouvé est plus récent que celui installé sur le
système. La partie la plus significative dans le format de numéro de version
se trouve au début.
Le format de numéro de version est:
[epoch:]version-originale[-révision-debian]
Les trois composants sont:
Il est fourni pour autoriser des erreurs dans les numéros de version des vieilles versions de paquet, et aussi pour abandonner une structure précédente de numérotation de version de paquet.
dpkg n'affiche pas habituellement le champ epoch, à moins
qu'il ne soit essentiel (différent de 0, ou si le champ
version-originale contient la ponctuation :), dselect
n'affiche pas le champ epoch du tout dans la partie principale d'un
affichage de sélection de paquet.
Le comportement de la comparaison de dpkg en respect avec le champ version-originale est décrit ci-dessous. La portion du champ version-originale du numéro de version est obligatoire.
Le champ version-originale ne peut contenir seulement des caractères alphanumériques et les caractères + . - : et doit commencer par un chiffre. S'il n'y a pas de champ révision-debian alors le tiret (-) n'est pas autorisé. S'il n'y a pas le champ epoch alors les : ne sont pas autorisés.
Ce champ est optionnel. S'il n'est pas présent alors le champ version-originale ne peut contenir de tirer (-). Ce format représente le cas où un morceau de code a été écrit spécialement pour obtenir le paquet binaire Debian. S'il n'y a qu'une seule et plus débianisation du paquet, aucune indication de révision n'est nécessaire.
Par convention, le champ révision-debian est remis à 1 à chaque fois que le champ version-originale est incrémenté.
dpkg coupera en deux, les champs version-originale et révision-debian au dernier tiret dans le numéro de version. L'absence du champ révision-debian est comparée plus tôt que la présence de ce champ (mais le champ révision-debian est la partie la moins significative du numéro de version).
Le champ révision-debian peut contenir seulement des caractères alphanumériques et les caractères (+ .).
Les champs version-originale et révision-debian sont comparés par dpkg en utilisant le même algorithme.
Les chaînes sont comparées de gauche à droite.
D'abord la partie initiale de chaque chaîne, qui consiste entièrement de caractères sans chiffre, est déterminée. Ces deux parties sont comparées lexicalement. Si une différence est trouvée, elle est retournée. La comparaison lexicale est une comparaison de valeurs ASCII modifiées afin que toutes les lettres soient triées plus tôt que les chiffres et caractères de ponctuation.
Ensuite, la partie initiale du reste de chaque chaîne qui consiste entièrement de chiffre est déterminée. La valeur numérique de ces deux parties est comparée, la différence est retournée comme résultat de la comparaison. C'est dans ce but, qu'une chaîne vide (qui apparaît seulement à la fin de l'une ou des deux chaînes comparées de version) compte pour un zéro.
Ces deux phases sont répétées (en enlevant du début de la chaîne les caractères et les chiffres) jusqu'à ce qu'une différence soit trouvée ou que les deux chaînes soient terminées.
Le but du champ epoch est d'inhiber les erreurs de numérotation de version, et de s'arranger avec les situations où la numérotation de version change. Il ne sert pas à corriger les numéros de version contenant des chaînes de caractères que dpkg ne peut pas interpréter (tel que ALPHA ou pre-) ou une numérotation bâtarde (l'auteur du manuel original a entendu qu'un paquet avait une version 1.1.1.2, 1.3, 1, 2.1, 2.2, 2 et ainsi de suite).
Si un paquet original a un problème de numérotation de version, il doit être converti dans un format sain pour être utilisé dans le champ Version.
Si tu as besoin de comparer les numéros de version dans un script, tu peux
utiliser dpkg --compare-versions ...
. Voir dpkg
--help
pour avoir plus de détails sur les arguments.
Le manuel de programmation de dpkg
15 avril 2002cure@cnam.fr
jacolot@ubolib.univ-brest.fr