Ceci est effectué en utilisant les champs du fichier de contrôle
Depends, Recommends, Sugggests, Conflicts, Provides
et
Replaces
.
Dans Depends, Recommends, Suggests
et Pre-Depends
(les
champs qui déclarent les dépendances du paquets dans lesquelles elles
apparaissent dans d'autres paquets), ces noms de paquet peuvent aussi
être des listes de noms de paquets alternatifs, séparés par des symboles
barre verticale | (symbole du tube de communication).
Tous les champs sauf Provides
peuvent restreindre leur
application à des versions particulières de chaque paquet nommé. C'est
indiqué entre parenthèses après chaque nom individuel de paquet; les
parenthèses devraient contenir une relation de la liste ci-dessous
suivie par un numéro de version, dans le format décrit dans
Numérotation des versions, chapter 5.
Les relations autorisées sont <<, <=, = >=
et >>
pour
strictement avant, avant ou égal, égal, après ou égal, strictement
après, respectivement. Les formes <
et >
ont été utilisées
pour signifier avant/après ou égal, plutôt que strictement avant/après,
ainsi ils ne doivent pas apparaître dans les nouveaux paquets (bien que
dpkg
les supporte toujours).
Les espaces peuvent apparaître n'importe où dans la spécification de
version, et doivent apparaître où cela est nécessaire pour
désambiguïser; autrement ils ne sont pas significatifs. Pour
l'uniformité et dans le cas de futurs changements à dpkg
, il est
recommandé qu'un seule espace soit utilisé après une relation de version
et avant un numéro de version; il est aussi convenu de mettre un espace
après chaque virgule, de chaque côté d'une barre verticale, et avant
chaque parenthèse ouvrante.
Par exemple:
Package: metamail Version: 2.7-3 Depends: libc5 (>= 5.2.18-4), mime-support, csh | tcsh
Depends, Recommends, Suggests, Pre-
Depends
Tous, sauf Pre-Depends
(voir ci-dessous) prennent effet seulement
quand un paquet est configuré. Ils n'empêchent pas un paquet d'être sur
le système dans un état non configuré alors que ses dépendances sont non
satisfaites, et il est possible de remplacer un paquet dont les
dépendances sont satisfaites et qui est proprement installé par une version différente
dont les dépendances ne sont pas et ne peuvent pas être satisfaites;
quand c'est le cas, le paquet dépendant sera laissé non configuré (étant
donnée que les tentatives pour le configurer, donneront des erreurs) et
ne fonctionnera pas correctement.
Pour cette raison, les paquets dans une installation sont généralement tous installés d'abord et tous configurés ensuite; ceci donne les dernières versions des paquets avec les dépendances sur les dernières versions des autres paquets, l'opportunité d'avoir leurs dépendances satisfaites.
Ainsi Depends
autorise les mainteneurs de paquets d'imposer un
ordre sur la configuration des paquets.
dpkg ne configurera pas les paquets dont les dépendances ne sont pas
satisfaites. S'il est demandé de faire une installation qui ne satisfait
pas les dépendances d'un paquet installé, il produira une
erreur[22], à moins que
--auto-deconfigure
ne soit spécifié, dans quel cas, ces paquets
seront déconfigurés avant la procédure d'installation.
dselect
rend difficile pour l'utilisateur la sélection des
paquets pour l'installation, l'effacement ou la mise à jour de façon à
ce que les champs Depends
des paquets soient insatisfaits.
L'utilisateur peut écraser cela s'il veut, par exemple s'ils savent que
dselect
a une vue périmée des relations réelles des paquets.
Le champ Depends
devrait être utilisé si le paquet d'appui est
nécessaire pour le paquet dépendant pour fournir une quantité
significative de fonctionnalités.
Recommends
est ignoré par dpkg
, afin que les utilisateurs
utilisant la ligne de commande (en supposant savoir ce qu'ils font) ne
soient pas gênés.
Il est traité par dselect
exactement comme Depends
; ce qui
rend difficile pour l'utilisateur de sélectionner les choses de façon à
laisser les champs Recommends
non satisfaits, mais ils sont
capable de le faire en étant persistent.
Le champ Recommends
devrait lister les paquets qui devraient être
liés entre eux à celui-ci pour tout sauf les installations
inhabituelles.
dselect
offrira les paquets suggérés à l'administrateur du
système quand ils sélectionnent les paquets suggérés, mais par défaut,
il n'installe pas les paquets suggérés.
Depends
, sauf qu'il force aussi
dpkg
à compléter l'installation des paquets nommés avant même de
démarrer l'installation du paquet qui déclare les pré-dépendances.
dselect
vérifie les pré-dépendances quand il fait une
installation, et essayer de trouver les paquets qui sont nécessairement
installés avant et le fait dans le bon ordre.
Cependant, ce processus est lent (car il nécessite des appels répétés à
dpkg
) et pénible (car il nécessite de deviner où se trouvent les
fichiers appropriés).
Pour ces raisons, et car ce champ impose des restrictions sur l'ordre
dans lequel les paquets doivent être installés (ce qui peut-être
difficile pour des installation à partir de média différent, par
exemple). Pre-Depends
devrait être utilisé avec modération, de
préférence seulement pour les paquets dont la mise à jour prématuré
ou l'installation pourrait entraver la capacité du système de continuer
les mises à jour en cours.
Quand le paquet déclarant qu'il a été configuré, une Pre-
Dependency
sera considérée satisfaite seulement si le paquet
dépendant a bien été configuré, juste comme ci une Depends
ordinaire avait été utilisé.
Cependant, quand un paquet déclarant un pré-dépendance est installé, la
pré-dépendance peut être satisfaite même si le ou les paquets d'appui
sont seulement installés ou à moitié configurés, indiquant qu'ils ont
été correctement installés à un moment dans la passé (et pas effacés ou
partiellement effacés depuis). Dans ce cas, les deux versions
précédemment configurées et en cours d'installation ou à moitié
configurées doivent satisfaire n'importe quelle clause de version du
champ Pre-Depends
.
Depends
, le ou les paquets qui sont nécessaires par les
composants les plus importants. Les autres composants exigés peuvent
être mentionnés comme Suggestions ou Recommendations, en fonction de
l'importance du composant.
Ces dépendances sont généralement déterminées automatiquement en
utilisant dpkg-shlibdeps
et insérées dans le fichier de contrôle
du paquet en utilisant le mécanisme de substitutions de variables du
fichier de contrôle; voir debian/substvars
et substitutions de variables, subsection 3.2.3 et
Les outils pour manipuler les paquets sources, section 3.1.
dpkg
veux effacer un paquet à cause d'un conflit, comme décrit
ci-dessus, mais en violation avec une dépendance de certains autres
paquets sur le système, dpkg
n'effacera généralement pas le
paquet en conflit et s'arrêtera sur une erreur.
Cependant, si l'option --auto-deconfigure (-B)
est utilisée,
dpkg
déconfigurera automatiquement le paquet avec la dépendance
problématique, afin que le paquet en conflit puisse être enlevé et le
paquet à installer puisse être installé. Si dpkg
est appelé pour
installer des paquets (plutôt que juste les dépaqueter), il essayera de
reconfigurer le paquet quand il aura dépaqueté tous ces arguments, dans
l'espoir qu'un des autres paquets qu'il installe, satisfera la
dépendance problématique.
dselect
fournit ces arguments à dpkg
quand il l'appelle,
afin de procéder aux installations facilement.
Conflicts
et
Replaces
dpkg
refusera
de les installer sur le système en même temps.
Si un paquet est installé, les autres doivent être enlevé d'abord - si
le paquet en cours d'installation est marqué comme remplacement
(voir Replaces
- écraser les fichiers et remplacer les
paquets, section 8.5) du paquet sur le système, ou si celui du système est marqué comme
désélectionner, ou les deux paquets sont marqués Essential
, alors
dpkg
enlèvera automatiquement le paquet qui provoque le conflit,
autrement il arrête l'installation des nouveaux paquets par une erreur.
dselect
rend difficile la sélection des paquets en conflit, bien
que l'utilisateur puisse l'annuler s'il le veut. S'ils ne sont pas
annulés alors dselect
sélectionnera un des paquets pour
l'effacer, et l'utilisateur doit être sûr que c'est le bon. Dans le
futur, dselect
vérifiera la présence d'un champ Replaces
pour décider quel paquet doit être installé et lequel enlevé.
Un paquet ne provoquera pas de conflit, simplement car ses fichiers de configuration sont toujours installés; il doit être au moins à moitié installé.
Une exception spéciale est faite pour les paquets qui déclare un conflit avec leur propre nom de paquet, ou avec un paquet virtuel qu'ils fournissent (voir ci-dessous); cela n'empêche pas leurs installations, et autorise un paquet d'être en conflit avec d'autres fournissant un remplacement pour lui. Tu peux utiliser ce dispositif quand tu veux que le paquet en question soit le seul paquet fournissant quelque chose.
Une entrée Conflicts
ne devrait presque jamais avoir une clause de
version 'avant'. Ceci devait empêcher dpkg
de mettre à jour ou
d'installer le paquet qui déclare un tel conflit jusqu'à ce que la mise
à jour ou l'effacement du paquet en conflit soient résolus. Cet aspect
de l'ordre d'installation n'est pas géré par dselect
, afin que
l'utilisation de Conflicts
provoque des problèmes pour les mises à jour
et les installations.
Provides
Depends, Recommends, Suggests
et
Conflicts
peuvent mentionner des paquets virtuels.
Un paquet virtuel est un paquet qui apparaît dans le champ
Provides
du fichier de contrôle d'un autre paquet. L'effet est
comme ci le ou les paquets qui fournissent un nom particulier de paquet
virtuel avaient été listés par nom partout le nom du paquet virtuel
apparaît.
Si il y a deux paquets, un réel et un virtuel du même nom alors la dépendance peut être satisfaite (or le conflit provoqué par) soit par le paquet réel ou n'importe quels paquets virtuels que la fournit. Par exemple, nous avons:
Package: vm Depends: emacsEt quelqu'un d'autre met à jour un paquet xemacs, ils peuvent dire:
Package: xemacs Provides: emacsEt tout fonctionnera entre temps (jusqu'à ce qu'un nom de paquet purement virtuel est décidé et les paquets
emacs
et vm
soient modifiés pour l'utiliser).
Si une dépendance ou un conflit a un numéro de version attaché alors
seuls les paquets réels seront considérés pour voir si la relation est
satisfaite (ou la prohibition violée, pour un conflit) - on supposera
qu'un paquet réel qui fournit un paquet virtuel n'est pas la bonne
version. Ainsi, un champ Provides
ne doit pas contenir de numéros
de version, et le numéro de version d'un paquet concret qui fournit un
paquet virtuel particulier ne le regardera pas quand on considère une
dépendance ou un conflit avec le nom du paquet virtuel.
Si tu veux spécifier quel paquet d'un ensemble de paquets réels devrait être celui satisfait par défaut une dépendance particulière sur un paquet virtuel, tu devrais lister le paquet réel comme alternatif avant le paquet virtuel.
Replaces
- écraser les fichiers et remplacer les
paquets
Replaces
du fichier de contrôle a deux buts qui entre en
jeu dans des situations différentes.
Les paquets virtuels (voir Les paquets virtuels - Provides
, section 8.4) ne sont
pas considérés quand on regarde le champ Replaces
- les paquets
déclarés comme étant remplacés doivent être mentionnés par leurs noms
réels.
--force-overwrite
soit mise
par défaut, déclassant l'erreur en avertissement.
Si le paquet qui écrase déclare qu'il remplace l'ancien contenant le
fichier qui doit être écrasé alors dpkg
le traitera, et
remplacera le fichier de l'ancien paquet par le nouveau. Le fichier ne
sera plus listé comme faisant partie de l'ancien paquet.
Si un paquet est complètement remplacé de cette façon, afin que
dpkg
ne sait pas quels fichiers il contient, il est considéré
comme ayant disparu. Il sera marqué comme non sélectionné sur le système
(sélectionné pour l'effacement) et non installé. tous les détails des
conffiles notés dans le paquet seront ignorés, comme ils seront pris par
le paquet qui le remplace. Le script postrm
du paquet sera
exécuté pour permettre au paquet de faire le nettoyage final nécessaire.
Voir Résumé des façons dont les scripts de maintenance sont
appelés, section 6.2.
Dans le futur, dpkg
écartera les fichiers qui écrasent ceux d'un autre
paquet qui déclare qu'il remplace celui qui est en cours d'installation
(afin de pouvoir installer une version plus ancienne d'un paquet sans
problèmes).
L'usage de Replaces
prend seulement effet quand deux paquets sont
au moins partiellement sur le système à la fois, cela peut seulement se
produire s'ils ne sont pas en conflits, ou si le conflit a été annulé.
Replaces
permet à dpkg
et dselect
de
résoudre quel paquet doit être enlevé quand il y a un conflit - voir
Les paquets alternatifs - Conflicts
et
Replaces
, section 8.3. Cet usage
prend seulement effet quand deux paquets sont en conflit, afin que les
deux effets n'interfèrent pas l'un avec l'autre.
Généralement, dselect suggérera à l'utilisateur qu'ils sélectionnent le paquet avec la classe la plus 'fondamental' (il préférera les paquets de Base plutôt que les paquets optionnels), ou le paquet qu'ils veulent le plus sélectionner, dans un certain sens.
En l'absence d'autres informations, dselect
offrira une sélection
par défaut des premiers paquets nommés de la liste des alternatives.
Cependant, il n'y a aucun moyen de spécifier l'ordre de plusieurs paquets qui fournissent tous la même chose quand cette chose est listée comme dépendance.
Donc, une dépendance sur un paquet virtuel devrait contenir un nom de paquet concret comme première alternative par défaut.
Par exemple, considérons l'ensemble de paquets suivant:
Package: glibcdoc Recommends: info-browser Package: info Provides: info-browser Package emacs Provides: info-browserSi
emacs
et info
ont tous les deux la même priorité alors
le choix dselect
est essentiellement aléatoire. Le mieux serait:
Package: glibcdoc Recommends: info | info-browserafin que
dselect
sélectionne l'info-browser.