jeudi 23 juin 2016

Monter un volume TimeMachine sous linux

Si sous MacOS il est immédiat de manipuler les images disques en ligne de commande, le faire sous un autre système POSIX demande un peu d’attention. Nous allons voir ici comment le faire, et plus spécialement pour accéder aux contenus des archives de TimeMachine.

Les archives TimeMachine

Une archive TimeMachine est une image sparsebundle contenant deux volumes :

  • un volume EFI permettant le démarrage d'un Mac sur disque externe ;
  • un volume HFSX (HFS+ sensible à la casse) contenant les fichiers de l'utilisateur.

Nous ne discuterons pas ici des (faibles) qualités intrinsèques du format de volume HFS+, ni de ses nombreux problèmes (telle la fragilité).

La technique

Sous linux, deux outils sont nécessaire pour ouvrir une archive TimeMachine et présenter correctement son contenu :

  • sparsebundlefs : agrège les bandes de l'image sparsebundle afin de présenter une image disque consolidée, exploitable par les outils habituels, tel mount ;
  • tmfs : présente efficacement le contenu d'une image disque contenant une sauvegarde TimeMachine. Cet outil n'est pas strictement indispensable pour accéder aux fichiers, mais la reconstruction de l'arborescence facilite grandement la lisibilité.

GitHub : sparsebundlefs

FUSE filesystem for reading Mac OS sparse-bundle disk images.

Mac OS X v10.5 (Leopard) introduced the concept of sparse-bundle disk images, where the data is stored as a collection of small, fixed-size band-files instead of as a single monolithic file. This allows for more efficient backups of the disk image, as only the changed bands need to be stored.

One common source of sparse-bundles is Mac OS' backup utility, Time Machine, which stores the backup data within a sparse-bundle image on the chosen backup volume.

This software package implements a FUSE virtual filesystem for read-only access to the sparse-bundle, as if it was a single monolithic image.

Debian : tmfs

Description-en: Apple Time Machine FUSE mount

Time Machine File System is a read-only virtual filesystem which helps you to read your Apple Time Machine Backup by reconstructing the hard-linked directories from the HFS+ metadata directory.

You can browse the tmfs mounted Time Machine normally and easily recover data from any backup point contained within.

Exemple

On crée les différents points de montage qui seront utilisés :

  • TimeMachine-DiskImage : l’« ouverture » de l’image sparsebundle présentant une vue manipulable par la commande mount ;
  • TimeMachine-Archive : l’image disque contenant l’archive TimeMachine ;
  • TimeMachine-Ouvert : la vue facilement exploitable de l’archive TimeMachine.
mkdir ~/mnt
mkdir ~/mnt/TimeMachine-DiskImage
mkdir ~/mnt/TimeMachine-Archive
mkdir ~/mnt/TimeMachine-Ouvert

Comme on manipule des points de montage, il faut passer root pour presque toutes les opérations. Remarque : peut suivre le détail de l’ouverture du volume avec les options -s -f -D.

sparsebundlefs \
        -o allow_root,ro,uid=$(id -u $USER),gid=$(id -g $USER),default_permissions,kernel_cache \
        MesSauvegardes.sparsebundle \
        ~/mnt/TimeMachine-DiskImage/

Un disque TimeMachine est bootable et contient donc en fait 2 volumes: celui de démarrage, et un volume contenant les données. Il nous faut donc désormais récupérer l’emplacement du volume contenant les données qui nous intéressent.

parted ~/mnt/TimeMachine-DiskImage/sparsebundle.dmg unit B print

# Disque /home/moi/mnt/TimeMachine-DiskImage/sparsebundle.dmg : 536870912000B
# Taille des secteurs (logiques/physiques): 512B/512B
# Table de partitions : gpt
# Disk Flags: 
# 
# Numéro  Début       Fin            Taille         Système de fichiers  Nom                   Fanions
#  1      20480B      209735679B     209715200B     fat32                EFI System Partition  démarrage, esp
#  2      209735680B  536736673791B  536526938112B  hfsx                 disk image

On prend le début du volume comme offset, et sa taille comme taille, pour faire pointer dessus un point d’entrée. L’ID de la boucle (ici /dev/loop0) est récupéré avec --show.

sudo losetup -f ~moi/mnt/TimeMachine-DiskImage/sparsebundle.dmg --offset 209735680 --sizelimit 536526938112 --show

On monte alors le volume ciblé de l’archive, qui contient notre archive TimeMachine.

sudo mount -t hfsplus -o ro,uid=$(id -u $USER),gid=$(id -g $USER) /dev/loop0 ~moi/mnt/TimeMachine-Archive/

Reste maintenant à ouvrir l’archive TimeMachine.

sudo tmfs \
        ~moi/mnt/TimeMachine-Archive/ \
        ~moi/mnt/TimeMachine-Ouvert/ \
        -o allow_other,ro,uid=$(id -u $USER),gid=$(id -g $USER),default_permissions,kernel_cache

On peut alors accéder — en lecture seule — aux fichiers de l’archive TimeMachine dans le répertoire ~/mnt/TimeMachine-Ouvert.

Ouf ! Ce fut laborieux, mais en posant les choses à plat on comprend la logique : il faut aller chercher en profondeur la bonne partition dans une image disque, et la manipuler avec un outil capable de traiter ses structures de données.

Une fois terminé de travailler, on referme proprement.

sudo fusermount -u ~moi/mnt/TimeMachine-Ouvert
sudo fusermount -u ~moi/mnt/TimeMachine-Archive
sudo losetup --detach /dev/loop0
sudo fusermount -u ~moi/mnt/TimeMachine-DiskImage

vendredi 13 septembre 2013

Travailler avec les volumes chiffrés de TrueCrypt sur Debian

TrueCrypt est un outil de chiffrement de volumes qui souffre de deux défauts majeurs : il n'a pas d'activité récente, et pour des raisons de licence n'est pas inclus dans Debian. Son alternative libre est tcplay, disponible dans les dépôts.

Package: tcplay

Maintainer: Laszlo Boszormenyi (GCS) <gcs@debian.org>

Description-en: Free and simple TrueCrypt Implementation based on dm-crypt tcplay is a free (BSD-licensed), pretty much fully featured (including multiple keyfiles, cipher cascades, etc) and stable TrueCrypt implementation.

This implementation supports mapping (opening) both system and normal TrueCrypt volumes, as well as opening hidden volumes and opening an outer volume while protecting a hidden volume. There is also support to create volumes, including hidden volumes, etc.

Since tcplay uses dm-crypt it makes full use of any available hardware encryption/decryption support once the volume has been mapped.

Homepage: https://github.com/bwalex/tc-play

L'approche utilisée ici est d'utiliser un disque dur entier dédié au stockage sécurisé. Nous mettrons en place un volume normal qui contiendra des données de leurre, ainsi qu'un volume caché dédié au travail réel.

Notes techniques :

  • le disque dur utilisé dans cet exemple est accessible via /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853[1]. Il contiendra uniquement un volume normal; pas même une table des partitions ;
  • les volumes sont successivement montés dans le répertoire courant ./tc ;
  • on utilise /dev/mapper/truecrypt pour le mappage des volumes  ;
  • on utilise des méthodes de chiffrement différentes pour le volume normal et le volume chiffré. Si une méthode est cassée, ça serait dommage que tous les volumes soient affectés.

Mise en place des volumes de leurre et caché

Opérations réalisées ici :

  1. créer les volumes ;
  2. remplir le volume de leurre, ainsi que le volume caché ;
  3. fermer les volumes et nettoyer le système.

Sur le disque entier, créer un volume normal avec un volume caché dedans

sudo tcplay --create --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853 \
  --cipher TWOFISH-256-XTS,AES-256-XTS \
  --pbkdf-prf=whirlpoe-erase \
  --hidden --cipher-hidden AES-256-XTS,SERPENT-256-XTS \
  --pbkdf-prf-hidden RIPEMD160

Ouvrir le volume normal, en protégeant le volume caché. Le volume normal est mappé sur /dev/mapper/truecrypt

sudo tcplay --map=truecrypt \
  --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853 \
  --protect-hidden

Formater le volume normal

sudo mkfs.xfs /dev/mapper/truecrypt

Monter le volume normal

sudo mount /dev/mapper/truecrypt ./tc/

Remplir le volume normal avec des données de leurre. Par exemple des clés privées ssh, des données bancaires, des reçus des impôts… Le but est de justifier l'usage d'un volume chiffré.

sudo cp ~/.ssh/id_ecdsa ./tc/

Démonter le volume normal

sudo umount ./tc

Supprimer le mappage du volume normal

sudo dmsetup remove /dev/mapper/truecrypt

Ouvrir le volume caché Le volume caché est lié à /dev/mapper/truecrypt

sudo tcplay --map=truecrypt --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853

Formater le volume caché

sudo mkfs.xfs /dev/mapper/truecrypt

Monter le volume caché

sudo mount /dev/mapper/truecrypt ./tc/

Remplir le volume caché avec des données sensibles. Par exemple, des clés privées PGP, des photos personnelles, votre plan de conquête du monde, etc.

sudo cp ~/.gnupg/secring.gpg ./tc/

Démonter le volume caché

sudo umount ./tc

Supprimer le mappage du volume caché

sudo dmsetup remove /dev/mapper/truecrypt

Travailler dans les volumes de leurre et caché

Actualiser les données du volume normal :

  1. ouvrir le volume caché : sudo tcplay --map=truecrypt --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853
  2. monter le volume caché : sudo mount /dev/mapper/truecrypt ./tc/
  3. travailler
  4. démonter le volume caché : sudo umount ./tc
  5. supprimer le mappage du volume caché : sudo dmsetup remove /dev/mapper/truecrypt

Actualiser les données du volume normal :

  1. ouvrir le volume normal, en protégeant le volume caché : sudo tcplay --map=truecrypt --device /dev/disk/by-id/scsi-SATA_QUANTUM_FIREBAL692705570853 --protect-hidden
  2. monter le volume normal : sudo mount /dev/mapper/truecrypt ./tc/
  3. actualiser les données de leurre
  4. démonter le volume normal : sudo umount ./tc
  5. supprimer le mappage du volume normal : sudo dmsetup remove /dev/mapper/truecrypt

Note

[1] Disque dur Quantum Fireball TM1280A provenant de mon vénérable PowerMac 4400 (processeur PPC 603ev, 96Mo de RAM) datant 1996. Ce disque de 1,2Go présente toujours zéro secteur défectueux et tourne comme un charme. Pas comme les saloperies de disques durs actuels qui meurent au bout de 3 ans, alors qu'ils bossent à peine

vendredi 15 mai 2009

Résoudre les problèmes de son sur Ubuntu, version Jaunty Jackalope

Très simplement, les mêmes causes produisant les mêmes effets, la version Jaunty Jackalope d'Ubuntu souffre de problèmes de son. Comme avec Intreprid Ibex, des logiciels tels que Flash ou Skype restent muets et sourd.

La solution est simple : il suffit d'appliquer la même méthode que pour Intrepid Ibex, à savoir supprimer PulseAudio.

vendredi 6 février 2009

Utiliser le thème GlassyBleu du portable HP Mini 1000 Mi Edition dans Ubuntu, version Intrepid Ibex

Le portable HP Mini 1000 Mi Edition est vendu avec Ubuntu. Le thème par défaut, noir, est splendide au point de vouloir l'utiliser sur son propre ordinateur.

Utiliser le thème GlassyBleu est très simple sur les systèmes à base de Debian qui ont GNOME comme interface. Le principe est de récupérer les paquets contenant les éléments du thème (fond d'écran, définition des éléments du thème, icones, etc), de les installer puis de les activer dans le compte courant. Cette opération peut être réalisée par un simple script.

#!/bin/bash

tmp=`mktemp -d` || exit 1
cd $tmp

# récupération des archives du thème
wget http://hpmini.archive.canonical.com/mie/dists/hardy-hpmini/universe/binary-lpia/glassy-bleu-browser-skin_0.5_all.deb
wget http://hpmini.archive.canonical.com/mie/dists/hardy-hpmini/universe/binary-lpia/glassy-bleu-theme_21_all.deb
wget http://hpmini.archive.canonical.com/mie/dists/hardy-hpmini/universe/binary-lpia/gnome-backgrounds-hp_0.4_all.deb
wget http://hpmini.archive.canonical.com/mie/dists/hardy-hpmini/restricted/binary-lpia/hp-tbird-theme_0.5_all.deb

# on s'assure que l'interface d'OpenOffice.org sera correcte
sudo apt-get install openoffice.org-style-*

# installation globale des paquets du thème
sudo dpkg -i ./*.deb

# suppression des altérations de thème GTK
gconftool --unset /desktop/gnome/interface/gtk_color_scheme

# définition du fond d'écran
gconftool --type string --set /desktop/gnome/background/picture_filename "/usr/share/pixmaps/backgrounds/gnome/hp/default_background_solid.png"
gconftool --type string --set /desktop/gnome/background/picture_options "stretched"

# définition du thème
gconftool --type string --set /desktop/gnome/interface/gtk_theme "GlassyBleu"

# définition du thème des icones
gconftool --type string --set /desktop/gnome/interface/icon_theme "GlassyBleu"

# définition du thème de metacity
gconftool --type string --set /apps/metacity/general/theme "GlassyBleu"

rm -Rf $tmp

Ce script va définir un style personnalisé dans le tableau de bord « Apparence » d'Ubuntu, et l'activer; également, un thème pour firefox et thunderbird sera disponible pour pousser l'intégration. Il est important de noter que le script n'a besoin d'être effectué qu'une seule fois, et que les paquets installés ne seront jamais mis à jour par la suite. Le thème ainsi défini peut donc être personnalisé à volonté.

jeudi 15 janvier 2009

Résoudre les problèmes de son sur Ubuntu, version Intrepid Ibex

Historiquement, la gestion du son avec GNU/linux a souvent été une bataille pour l'utilisateur. Même si Ubuntu prend soin d'éviter de retomber dans les guerres de tranchées historiques, il n'en reste pas moins que les problèmes continuent d'exister.

Ubuntu a fait le choix de s'appuyer sur PulseAudio pour présenter à l'utilisateur la gestion du son. Pour faire simple, même si PulseAudio peut travailler de façon autonome le plus souvent il se comporte comme une surcouche à ALSA et à OSS, avec quelques fonctionnalités spécifiques supplémentaires.

Pour l'utilisateur, la principale différence avec OSS et ALSA est l'intégration de PulseAudio dans l'environnement du bureau : applet de gestion, vuemètres des entrées-sorties, panneau de préférences accessibles, etc. Rien de bien indispensable, mais qui donne une vision simple et pratique du réglage et de l'utilisation du son sur l'ordinateur.

Mais le problème est que PulseAudio ne peut pas être utilisé directement par les logiciels audio, ils doivent être programmés en conséquence. Et c'est alors que se pose le problème du point de vue technique, car de nombreux outils et services, anciens et répandus, travaillent différemment sur les niveaux de la pile des services audio. Des passerelles existent pour faire cohabiter et communiquer les logiciels entre-eux, mais le résultat n'est pas satisfaisant pour l'utilisateur final qui doit jongler entre plusieurs technologies.

Quelles sont pour l'utilisateur grand public les conséquences de l'utilisation de PulseAudio ? Principalement, il n'est pas assuré de parvenir à faire fonctionner un logiciel. Ainsi, Skype est réputé pour ses problèmes d'utilisation dans Ubuntu à cause des mixeurs; FlashPlayer nécessite l'installation de bibliothèques particulières pour accéder à PulseAudio; et c'est sans parler des logiciels comme RecordMyDesktop qui réalisent des captures de session.

Une solution simple à ces problèmes est de supprimer PulseAudio du système, afin de basculer complètement sur ALSA. Cela implique de quitter les technologies préconisées par Ubuntu pour s'occuper nous-mêmes de la chaîne audio. Il s'agit naturellement d'une manipulation entièrement réversible.

La première étape consiste à supprimer les paquets de PulseAudio :

apt-get --purge remove pulseaudio* libpulse*

On constate que la dépendance sur le paquet ubuntu-desktop va intervenir et nous obliger à retirer ce paquet. Aucun souci ici, il suffira de le remettre en place avant la prochaine mise à jour du système vers Jaunty Jackalope. Ensuite, nous installons des outils pour gérer ALSA, qui vont nous amener également par le jeu des dépendances les bibliothèques nécessaires (qui sont normalement déjà présentes sur le système) :

apt-get install alsa-utils gstreamer0.10-alsa

Il ne reste qu'à redémarrer la machine pour nettoyer les services. Le résultat est que Skype, FlashPlayer et d'une façon générales toutes les applications utilisant l'audio fonctionnent correctement, sans réglage particulier. Mais on a perdu au passage les jolis vuemètres de PulseAudio.

On pourra affiner le réglage des entrées-sorties audio par les outils alsamixer et gnome-sound-properties.

lundi 22 décembre 2008

Utiliser un ordinateur portable comme eBook pour lire des documents

Idée générale

Actuellement, mes travaux me demandent de lire beaucoup de documents numériques, principalement sous forme de fichiers PDF et OpenDocument. Je me suis alors posé la question d'une méthode de travail pour éviter les problèmes habituels liés à cette activité : fatigue oculaire, mauvaise position du corps, etc. Je présente ici ma solution actuelle.

L'idée générale est de pouvoir travailler dans mon environnement informatique habituel, d'être capable de basculer très simplement dans une situation de lecture, pour revenir à la situation originale. L'accent a donc été mis sur la simplicité d'utilisation, dans le cadre des configurations existantes.

Cadre technique

Le cadre technique est le suivant :

  • ordinateur : portable Dell Latitude D830
  • système d'exploitation : Ubuntu, version stable actuelle (Intrepid Ibex)
  • lecteur de PDF : evince
  • lecteur d'ODF : OpenOffice.org

La rotation de l'écran est assurée par l'extension RandR de X.org. Le pilotage de la rotation se fait par la commande xrandr.

Mise en place

Au niveau de l'utilisateur, la mise en place de l'environnement de lecture se fait par l'utilisation de scripts ouvrant les documents avec des modalités adaptées. Ainsi, pour un PDF on peut envisager le script suivant qui fait pivoter l'écran, ouvre le document en plein écran, et à la fin remet l'écran en mode horizontal :

#!/bin/bash

xrandr -o left
evince --fullscreen "$1"
xrandr -o normal

Ou encore pour une série d'images dans le dossier courant :

#!/bin/bash

xrandr -o left
gqview --fullscreen "$1"
xrandr -o normal

La situation typique d'utilisation est celle-ci :

  1. je travaille dans l'environnement traditionnel, avec un affichage en mode horizontal
  2. dans un terminal, j'appelle le script de lecture sur le document désiré
  3. l'ordinateur bascule dans l'environnement de lecture, avec un affichage vertical plein écran
  4. je lis
  5. à la fin de la lecture, je ferme le document
  6. l'ordinateur rebascule automatiquement vers l'environnement traditionnel

On peut constater que si pour le système d'exploitation la rotation ne pose aucun problème, l'ouverture du document dans un mode de lecture adapté dépend uniquement du logiciel : plein écran, réglage de barre d'outil, etc. Ici, je m'appuie sur ma configuration habituelle d'evince et spécifie que je souhaite ouvrir le document en mode « plein écran ». La rotation étant déjà effectuée, l'affichage se fait en conséquence. À la fin de la lecture, je n'ai qu'à fermer le document, et donc quitter evince, pour que le script exécute la dernière instruction et rétablisse l'orientation normale.

Exemple de lecture

eBook - portable stableL'ordinateur portable se cale très bien en position assise, légèrement en arrière, en prenant appui sur les cuisses.


eBook - prise en main Prise en main de l'ordinateur. En raison du poids (1,5kg) et de la chaleur, il est préférable d'avoir une position stable.


eBook - contrôle au touchpad et au clavier Le contrôle de la lecture se fait soit par le touchpad, à hauteur médiane, soit par le pavé directionnel, en bas.


eBook - page plein écran Les pages sont affichées une par une, en plein écran. Tout en haut se trouve une barre d'outil indiquant le numéro de page et qui permet la navigation par section.


eBook - contraste élevé Même dans le noir ou en pleine lumière, l'eBook est lisible. Un écran de qualité avec un angle de vue large permet de ne pas être figé dans une position unique durant la lecture.

Améliorations envisagées

Réaliser l'inversion des axes du touchpad pour permettre une utilisation aisée du pointeur en position verticale. Cela permettra d'utiliser la navigation hypermédia dans les documents, et d'envisager la consultation du web.

Mettre en place différents jeux de configuration pour les applications. Ces jeux de configuration, spécifiques à chaque environnement de travail (eBook, 2e écran vertical, portable en déplacement, etc), permettrait de basculer complètement de façon dynamique d'un environnement, pour avoir des réglages adaptés au niveau des applications.

samedi 12 février 2005

Tutoriel pour update-alternatives

On désire proposer de façon générique un éditeur via la commande éditeur. Cette commande aura pour but de choisir un éditeur parmi une liste définie, et de le lancer. Pour se faire, nous allons utiliser les alternatives. L'intérêt de cette méthode est de rendre transparent la sélection de clones pour un programme et de simplifier leur administration. Par exemple, on pourrait souhaiter de rassembler derrière la commande browser les logiciels mozilla, firefox, galeon, dillo, etc.

L'ensemble des commandes à gérer est rassemblé dans un groupe, que nous appellerons ici éditeur. De plus, on associe une priorité à chaque alternative du groupe. Lorsque le groupe est administré en mode auto, l'alternative employée est celle possédant la plus haute priorité.

Dans notre cas, nous avons les 3 éditeurs suivants que nous souhaiterions gérer derrière notre commande générique /bin/éditeur. Cette commande sera en fait un lien dynamique pointant vers l'un des 3 logiciels suivants :

  • /usr/bin/vi
  • /usr/bin/vim
  • /usr/bin/nvi

La première étape consiste à créer notre groupe éditeur.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vim 9
$ update-alternatives --display éditeur 
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
Current `best' version is /usr/bin/vim.

D'ailleurs, il est facile de le vérifier.

$ /bin/éditeur --version
VIM - Vi IMproved 6.3 (2004 June 7, compiled Jan 19 2005 08:10:19)

Continuons, et rajoutons nvi à notre groupe. Nous lui mettrons la priorité 2.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/nvi 2
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
Current `best' version is /usr/bin/vim.

Continuons encore, et rajoutons vi à notre groupe. Nous lui mettrons la priorité 1, c'est à dire la plus faible.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vi 1
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
/usr/bin/vi - priority 1
Current `best' version is /usr/bin/vim.

Notre groupe est désormais prêt. La commande éditeur est opérationnelle.

Imaginons maintenant que suite à une mauvaise mise à jour, vim soit inutilisable. Notre commande générique éditeur devient donc inexploitable. Nous allons corriger la chose en la faisant pointer vers un autre clone de vi : nvi.

$ update-alternatives --config éditeur

There are 3 alternatives which provide `éditeur'.

Selection Alternative
-----------------------------------------------
*+    1        /usr/bin/vim
      2        /usr/bin/nvi
      3        /usr/bin/vi

Press enter to keep the default[*], or type selection number:

Rentrons 2 pour choisir nvi.

Using `/usr/bin/nvi' to provide `éditeur'.
$ update-alternatives --display éditeur
éditeur - status is manual.
link currently points to /usr/bin/nvi
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
/usr/bin/vi - priority 1
Current `best' version is /usr/bin/vim.

On découvre ici que vim est bien notre logiciel appelé, et que la gestion du groupe est passée en manual. Ce qui veut dire que l'on n'utilise pas nécessairement l'alternative ayant la plus haute priorité (qui reviendrait dans notre cas à utiliser vim, ce que nous refusons de faire car celui-ci étant indisponible).

Pour revenir à vim, on repasse par l'option --config.

$ update-alternatives --config éditeur

There are 3 alternatives which provide `éditeur'.

Selection Alternative
-----------------------------------------------
 +    1        /usr/bin/vim
*     2        /usr/bin/nvi
      3        /usr/bin/vi

Press enter to keep the default[*], or type selection number:

Répondons 1 et constatons :

Using `/usr/bin/vim' to provide `éditeur'.

Il est temps de reconfier au système la gestion automatique des alternatives du groupe et de voir en quoi cela est une Bonne Idée.

$ update-alternatives --auto éditeur

Il est bien sur possible de retirer une redirection si un logiciel vient à être désinstallé. Examinons cette possibilité pour vi.

$ update-alternatives --remove éditeur /usr/bin/vi
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vim - priority 9
/usr/bin/nvi - priority 2
Current `best' version is /usr/bin/vim.

Notre commande éditeur fait toujours appel à vim, et vi ne fait plus partie du groupe. De la même façon, si nous retirons l'alternative active, le système prendra automatiquement (d'où l'intérêt du mode auto :) l'alternative restante ayant la plus grande priorité.

$ update-alternatives --remove éditeur /usr/bin/vim
$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/nvi
/usr/bin/nvi - priority 2
Current `best' version is /usr/bin/nvi.

Finalement, comme nous sommes des gens très propres, nous allons supprimer le groupe, remettant tout en l'état.

$ update-alternatives --remove-all éditeur
$ update-alternatives --display éditeur
No alternatives for éditeur.

Durant toutes ces manipulations, il est possible de corriger une entrée précédente en l'écrasant par la nouvelle. Pratique pour changer le chemin d'accès d'un fichier déplacé. Bien entendu, si la mauvaise manipulation a été à l'origine de la création d'un nouveau groupe, la solution qui s'impose est de détruire complètement ce groupe.

La seule méthode actuelle permettant de connaître la liste des alternatives mises en place est de lister le répertoire les contenant. Notez au passage que c'est une très mauvaise idée que d'effectuer directement des modifications dans le contenu de ce répertoire.

$ ls /etc/alternatives/

Pour aller plus loin, il est possible de créer des sous-groupes au sein d'un groupe. Par exemple, pour lier des logiciels à leurs manuels. Ce qui reviendrait à fournir dynamiquement le bon manuel à l'utilisateur en cas d'appel.

Ainsi, nous aurions les couples suivants :

  • usr/bin/vim et /usr/share/man/man1/vim.1.gz
  • /usr/bin/nvi et /usr/share/man/man1/nvi.1.gz
  • /usr/bin/vi et /usr/share/man/man1/vi.1.gz

Pour se faire, on rajoutera l'option --slave lors de la définition de l'alternative. La syntaxe suit celle de l'option --install.

$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vim 9 \
	--slave /usr/share/man/man1/éditeur.1.gz éditeur.1.gz /usr/share/man/man1/vim.1.gz
$ update-alternatives --install /bin/éditeur éditeur /usr/bin/nvi 2 \
	--slave /usr/share/man/man1/éditeur.1.gz éditeur.1.gz /usr/share/man/man1/nvi.1.gz
$ update-alternatives --install /bin/éditeur éditeur /usr/bin/vi 1 \
	--slave /usr/share/man/man1/éditeur.1.gz éditeur.1.gz /usr/share/man/man1/vi.1.gz

Le résultat correspond à notre attente. En changeant d'alternative, on modifie non seulement le logiciel appelé, mais également son manuel. Un vrai bonheur.

$ update-alternatives --display éditeur
éditeur - status is auto.
link currently points to /usr/bin/vim
/usr/bin/vi - priority 1
 slave éditeur.1.gz: /usr/share/man/man1/vi.1.gz
/usr/bin/nvi - priority 2
 slave éditeur.1.gz: /usr/share/man/man1/nvi.1.gz
/usr/bin/vim - priority 9
 slave éditeur.1.gz: /usr/share/man/man1/vim.1.gz
Current `best' version is /usr/bin/vim.

La commande update-alternatives fourni encore d'autres possibilités, mais cela dépasse le cadre de cette simple documentation. Voir donc le manuel pour de plus amples informations: update-alternatives(8)

Références