FAQ sur les alternatives: round II
Voici la nouvelle version a commenter (y compris orthographiquement,
cette fois) :
7. Questions sur les alternatives
7.1. Le problème
7.2. La solution GNU
7.3. La solution Debian
7.4. update-alternatives, sa vie, son oeuvre
7.5. Les problèmes avec update-alternatives
7.6. Et comment faire les règlages pour chaque utilisateur ?
7. Questions sur les alternatives
---------------------------------
7.1. Le problème
----------------
Souvent, il existe plusieurs programmes qui rendent le même service,
et le choix de l'un ou de l'autre est une question personnelle. Par
exemple, pour visionner un fichier texte, on peut choisir `more',
`less' ou `most'. Ils permettent tous de faire plus ou moins la même
chose, mais ont un feeling différent. Quand on les appelle
directement, le problème ne se pose pas, on prend celui qu'on veut,
mais comment dire à la commande 'man' qu'on veut qu'elle utilise tel
ou tel pager ?
7.2. La solution GNU
--------------------
La plupart des programmes GNU utilisent des variables d'environnement
pour ce genre de réglage. Par exemple, si l'utilisateur fixe la
variable `EDITOR' à vim, c'est la commande vim qui sera invoquée
chaque fois qu'un programme GNU aura besoin de faire éditer un texte
(par exemple, la commande `crontab -e' utilise ce mécanisme).
La principale limite de cette approche est qu'elle demande de
modifier
tous les programmes clients pour qu'ils recherchent la bonne variable
d'environnement. Du plus, sauf erreur de ma part, ce mécanisme n'a
été mis en place que pour quelques fonctionnalités : `PAGER', qui
choisi le pager et `EDITOR', qui choisi l'éditeur. Si vous
connaissez
d'autres alternatives par variable d'environnement, n'hésitez pas à
m'en faire part, je les mettrais ici. Mais quoi qu'il en soit, on
est
loin du nombre d'alternatives à la Debian, puisque sur mon système,
je
n'en ai pas moins de 200...
7.3. La solution Debian
-----------------------
La solution Debian passe par les alternatives, qui habitent dans le
répertoire `/etc/alternatives', et une belle collection de
liens. Par
exemple, comme j'aime mieux le pager `less'', j'ai les liens suivants
sur ma machine:
/usr/bin/pager -> /etc/alternatives/pager -> /usr/bin/less
Comme ca, `man' n'a plus qu'a appeler la commande `pager', et le
programme `less' est automatiquement appelé.
Bien, cette réponse appelle une nouvelle question : pourquoi trois
liens ? La situation suivante permettrais de faire la même chose :
/usr/bin/pager -> /usr/bin/less
Oui, ça aurait le même effet, mais ça serait plus compliqué à
administrer. Centraliser les alternatives dans un seul répertoire
permet de rendre cohérent le système. Ainsi, il est beaucoup plus
simple de savoir ce que le système des alternatives propose, par un
simple `ls /etc/alternatives/', au lieu de fouiller sur tout le
disque
dur. De plus, si on travaille en réseau, cela rend possible de
partager les binaires entre les machines par un montage nfs de `/usr'
tout en permettant à chaque machine d'avoir des réglages spécifiques.
Enfin, cela permet d'écrire un script gérant tout ça automatiquement.
Et même, ce script existe déjà, il s'appelle `update-alternatives',
il
vient avec le paquet `dpkg' (et est donc déjà sur votre machine), et
il n'est accessible qu'à root.
7.4. update-alternatives, sa vie, son oeuvre
--------------------------------------------
Ce programme est utile à la fois pour les paquets, qui l'utilisent
pour s'enregistrer comme fournisseurs de fonctionnalités, et pour
l'administrateur, qui l'utilise pour dire quels sont les programmes
par défaut. Je ne m'attarde pas ici sur la première partie, car,
c'est bien connu, ceux qui font des paquets Debian sont des surhommes
capables de tout, même de lire la page du manuel correspondante...
Pour l'administrateur, il faut savoir que chaque possibilité de
l'alternative a une priorité donnée par le mainteneur du programme,
et
que donc, on peut très bien laisser le système se débrouiller seul la
plupart du temps.
Il faut aussi citer l'existence de liens esclaves d'autres
alternatives. Typiquement, la page de manuel décrivant l'éditeur est
un lien esclave de l'éditeur lui même. Comme ça, quand on dit que
l'éditeur est `vi', et qu'on fait `man editor', on voit la page de
`vi'.
Bien, reste à voir comment utiliser ce beau programme. Le plus
simple, c'est encore un bon vieux `update-alternatives --help' qui
donne les differentes facons de l'utiliser. Les seules qui
interressent l'administrateur (et non les mainteneurs) sont :
* `update-alternatives --auto <nom>' : Repasser en mode
automatique.
* `update-alternatives --display <nom>' : Voir la configuration
actuelle d'une alternative.
* `update-alternatives --config <nom>' : Modifier la configuration
d'une alternative (et basculer par la même en mode manuel, quand
ça marche, voir partie suivante).
Essayez l'option `--config', c'est beau à voir. L'architecture est
en
place pour un bel outil cliquable pour ceux qui veulent, reste plus
qu'à le faire...
Dernier point important auquel il me faut répondre : où trouver la
liste des alternatives gérées par le système ? Il suffit de faire un
`ls /etc/alternatives'. Bon, c'est vrai, ça ne montre que les
alternatives actuellement installées sur votre machine, mais bon,
cela
devrait suffire à la plupart d'entre nous.
7.5. Les problèmes avec update-alternatives
-------------------------------------------
Les vieilles versions de `dpkg' (ie, les versions antérieures à la
1.7.1 du 7 Novembre 2000, ce qui inclut celle de potato :) avaient
pas
mal de problèmes avec `update-alternatives'. Par exemple, quand on
mettait a jour une alternative, elle n'était pas mise dans le mode
"manuel", et donc, a la mise à jour suivante, tout était à refaire.
De plus, les liens esclaves n'étaient pas non plus mis à jour. Tout
ceci gâche un peu l'intérêt du système, je vous l'accorde. Mais bon.
Cela n'en est pas moins la bonne méthode de résoudre le problème sous
Debian. Pour consoler les utilisateurs de potato, disons que c'est
la
méthode d'avenir...
7.6. Et comment faire les réglages pour chaque utilisateur ?
------------------------------------------------------------
C'est que la méthode Debian est bien gentille, mais elle ne permet
que
de faire des réglages par défaut sur une machine, et non sur un
compte.
Il n'y a malheureusement pas encore de méthode Debian de le faire,
mais on peut quand même s'en sortir facilement :
export PATH=$HOME/bin:$PATH
export MANPATH=$HOME/man:$MANPATH
Ensuite, il suffit de mettre des liens dans les repertoires bin et
man
correspondants, tout comme `update-alternatives' le fait dans
`/etc/alternatives'. On peut même rêver que ce programme sera un
jour
accessible au commun des mortels (et pas seulement root), et qu'il
fera quelque chose du genre...
Voila, Mt.
Reply to: