vendredi 17 octobre 2025

Brève histoire des technologies de virtualisation : Xen, VMware, KVM, et QEMU


Remarque liminaire : ce document est une ressource pédagogique créée pour mes élèves, je la publie ici via une conversion brutale pour DotClear.

  • Lecteurs ciblés : Master 2 en informatique
  • Connaissances prérequises :
    • architectures matérielles
    • technologies des systèmes d’exploitation

Brève histoire des technologies de virtualisation : Xen, VMware, KVM, et QEMU [1]

Contexte

L’évolution des technologies de virtualisation sur architecture x86 représente l’un des aspects les plus significatifs de l’informatique moderne. Son histoire illustre comment les contraintes architecturales du processeur x86 ont conduit au développement de nouvelles solutions, puis de nouveaux paradigmes. Les quatre technologies abordées ici — Xen, VMware, KVM et QEMU - ont chacune apporté des approches distinctes pour résoudre les problèmes fondamentaux de la virtualisation x86. L’aboutissement actuel étant l’informatique par l’approche du nuage.

En complément de ces aspects techniques, la virtualisation répond aussi à des motivations économiques et opérationnelles fortes : consolidation des serveurs physiques, réduction des coûts d’infrastructure, meilleure résilience, flexibilité de déploiement… Mais tout ça on s’en fout ici.

Le défi fondamental de la virtualisation x86 : les anneaux de protection et leurs contraintes

Rappel : l’architecture x86 implémente un système de protection à quatre niveaux, appelés « anneaux de protection » (nommés de ring 0 à ring 3). Les systèmes d’exploitation non-ésotériques utilisent principalement deux de ces anneaux : le ring 0 pour l’espace noyau (kernel space) avec les privilèges maximaux, et le ring 3 pour l’espace utilisateur (user space) avec des privilèges restreints (1, 2) . Cette organisation hiérarchique garantit l’isolation et la sécurité du système en empêchant les applications utilisateur d’accéder directement aux ressources matérielles critiques.

Le problème fondamental de la virtualisation x86 réside dans l’existence d’instructions sensibles non privilégiées. Selon les critères de Popek et Goldberg (3, 4) , une architecture est virtualisable si toutes les instructions sensibles sont privilégiées. L’architecture x86 viole cette condition : certaines instructions se comportent différemment selon l’anneau d’exécution sans générer d’exception (trap). Ces instructions peuvent lire l’état du processeur ou modifier la configuration du système sans déclencher une interruption permettant à l’hyperviseur d’intervenir. C’est ce qu’on appelle pudiquement « le problème ».

Cette particularité architecturale signifie qu’un système d’exploitation conçu pour s’exécuter en ring 0 ne peut pas fonctionner correctement s’il est déplacé en ring 3 sans modifications. Les instructions privilégiées échoueront silencieusement ou produiront des résultats incorrects, compromettant la stabilité et la sécurité du système virtualisé.

La première solution : VMware et sa traduction binaire

VMware a été la première entreprise à résoudre efficacement pour la production — les geeks avaient déjà des trucs avant — le problème de virtualisation x86 avec une solution commerciale viable. L’approche appelée « traduction binaire dynamique » (dynamic binary Translation) (5, 6) représente une forme d’émulation partielle sophistiquée. Le système permet au code invité de s’exécuter directement sur le processeur physique dans la plupart des cas, mais intercepte et émule en logiciel les instructions problématiques.

La traduction binaire fonctionne en analysant dynamiquement le flux d’instructions du système invité. Lorsqu’une instruction sensible non privilégiée est détectée, l’hyperviseur VMware la remplace par une séquence d’instructions équivalentes qui produisent le même effet tout en maintenant l’isolation nécessaire. Cette technique permet d’exécuter des systèmes d’exploitation — même ésotériques — non modifiés avec des performances remarquables pour l’époque : 80 à 95 % des performances natives selon les mesures internes de VMware au début des années 2000.

Le succès commercial initial de VMware provient de cette capacité unique à virtualiser des systèmes invités sans modification, ouvrant la voie à l’adoption massive de la virtualisation dans les environnements d’entreprise.

QEMU : l’émulation universelle par compilation dynamique

Architecture et fonctionnement de QEMU

QEMU (Quick EMUlator), développé par Fabrice Bellard et publié en 2005, représente une approche radicalement différente basée sur la compilation dynamique à la volée (just in time) (7, 8) . Contrairement aux solutions précédentes qui se concentraient sur la virtualisation depuis x86 vers x86, QEMU vise l’émulation universelle permettant l’exécution de code d’une architecture sur une autre ; par exemple ARM sur x86-64 ou inversement.

Le cœur de QEMU utilise un Tiny Code Generator qui traduit dynamiquement les instructions de l’architecture source vers l’architecture cible. Cette traduction s’effectue par blocs d’instructions, avec mise en cache des blocs traduits pour optimiser les performances lors d’exécutions répétées. Cette approche décomposée permet la portabilité : QEMU peut émuler plus de 15 architectures différentes (ARM, MIPS, PowerPC…)

QEMU fonctionne selon deux modes principaux : l’émulation complète de système (system emulation) qui virtualise une machine complète (CPU, mémoire, et périphériques), et l’émulation utilisateur (user emulation) qui permet d’exécuter des applications compilées pour une architecture différente.

Impact sur l’écosystème de virtualisation

L’intérêt de cette polyvalence en fait un outil indispensable pour le développement cross-platform, les tests de compatibilité, et la recherche en architecture des processeurs.

Aussi, bien que QEMU soit initialement plus lent que les solutions spécialisées en raison de sa généralité, il est devenu un composant fondamental de l’écosystème moderne de virtualisation. La plupart des hyperviseurs libres (KVM, Xen, VirtualBox…) utilisent QEMU pour l’émulation des périphériques tout en déléguant la virtualisation CPU à des mécanismes plus efficaces. Cette architecture modulaire permet de combiner les avantages de différentes approches : performance native pour le CPU grâce aux extensions matérielles, et flexibilité maximale pour les périphériques grâce à QEMU.

Xen et le bond de la paravirtualisation

Conception et principes fondamentaux

Xen, développé à l’Université de Cambridge par Ian Pratt et Keir Fraser, a introduit en 2003 une approche orthogonale appelée paravirtualisation (9). Plutôt que d’émuler ou de traduire les instructions problématiques, Xen propose de modifier directement les systèmes d’exploitation invités pour qu’ils puissent s’exécuter efficacement en ring 3 tout en coopérant explicitement avec l’hyperviseur.

La paravirtualisation repose sur le remplacement des instructions sensibles dans le noyau du système invité par des hypercalls — des appels directs à l’hyperviseur similaires aux appels système (syscalls). Cette modification permet au système invité de fonctionner en ring 3 tout en conservant un accès contrôlé aux ressources privilégiées via l’hyperviseur qui s’exécute en ring 0. L’avantage majeur de cette approche est l’élimination quasi-complète du surcoût (overhead) de virtualisation : les performances sont typiquement de 95 à 98 % des performances natives. Le problème n’est plus alors les pénalités de la virtualisation des instructions, mais l’accès aux ressources matérielles partagées et externes : cartes filles, bus, etc.

Architecture Dom0/DomU [2] et la gestion des ressources

Xen implémente une architecture unique basée sur des domaines. Le Domain 0 (Dom0) est un domaine privilégié exécutant une version modifiée de Linux qui gère les pilotes matériels et fournit les services de gestion. Les Domains Unprivileged (DomU) sont les machines virtuelles standard qui s’exécutent sous contrôle de l’hyperviseur. Cette séparation permet une isolation robuste tout en maintenant la flexibilité nécessaire pour la gestion des ressources physiques.

L’inconvénient majeur de la paravirtualisation est sa limitation aux systèmes libres. Les noyaux propriétaires comme Windows NT à l’époque ne pouvaient pas être modifiés pour supporter les hypercalls, nécessitant l’utilisation de techniques d’émulation plus coûteuses. Cette limitation a restreint l’adoption de Xen dans les environnements mixtes Linux/Windows typiques des entreprises Heureusement, les choses ont changé pour le mieux : les systèmes d’exploitation propriétaires se sont ouverts, et QEMU est arrivé en renfort.

L’émergence des extensions matérielles

Le contexte Microsoft et les spécifications de sécurité

Le développement des extensions matérielles de virtualisation trouve en partie son origine dans les besoins de sécurité avancée de Microsoft. Lors du développement de Windows Vista, Microsoft travaillait sur le projet « Next-Generation Secure Computing Base (NGSCB) » (10, 11) , anciennement appelé « Palladium », visant à implémenter des fonctionnalités de gestion des droits numériques (DRM) au niveau matériel. L’idée était d’exécuter les composants de sécurité critique dans un environnement isolé, protégé même du système d’exploitation principal.

En parallèle, Intel et AMD développaient déjà leurs propres projets de virtualisation matérielle (« Vanderpool » et « Pacifica »). La collaboration avec Microsoft a accéléré l’adoption de ces extensions.

Technologies Intel VT-x et AMD-V

Les extensions « Intel VT-x » (Virtualization Technology) et « AMD-V » (AMD Virtualization) (12, 13) ont été introduites respectivement en 2005 et 2006. Ces technologies ajoutent un nouveau mode d’exécution au processeur, permettant à l’hyperviseur de s’exécuter dans un contexte privilégié (VMX root mode pour Intel) tandis que les systèmes invités s’exécutent dans un contexte non privilégié (VMX non-root mode) tout en conservant l’illusion d’un accès ring 0.

Ces extensions résolvent élégamment le problème des instructions sensibles non privilégiées en introduisant des VM exits automatiques. Lorsqu’une instruction sensible est exécutée par un système invité, le processeur transfère automatiquement le contrôle à l’hyperviseur qui peut alors émuler l’instruction ou effectuer l’action appropriée. Cette approche élimine le besoin de modification des systèmes invités (comme dans la paravirtualisation) ou de traduction binaire complexe (tel VMware)1415.

KVM : l’intégration native dans Linux

Développement chez Qumranet

KVM (Kernel-based Virtual Machine) a été développé par Avi Kivity chez Qumranet, une jeune-pousse israélienne fondée en 2005 (16, 17). L’objectif initial était de créer une solution de virtualisation de bureau permettant aux entreprises de déployer des postes de travail Windows virtualisés sur infrastructure Linux. Cette approche visait particulièrement les environnements d’activité nécessitant de nombreux postes standardisés (centre d’appel, filiale bancaire, etc.).

La stratégie de Qumranet était elle aussi à contre-pied : plutôt que de développer un hyperviseur indépendant (comme Xen), ils ont choisi d’intégrer directement les fonctionnalités de virtualisation dans le noyau Linux existant. Cette approche tire parti de toute l’infrastructure de Linux : gestion de la mémoire, ordonnancement, pilotes de périphériques, et système de fichiers. KVM augmente essentiellement Linux en hyperviseur natif par l’ajout d’un module noyau. Reste ensuite à gérer toutes les couches service et fonctionnelle, la sécurité, etc. Bref il vaut mieux avoir un OS dédié pour un usage non-individuel car une distribution Linux de bureau (ni même de serveur) ne peut pas être magiquement transformée en hyperviseur correctement sécurisé et proposant les fonctionnalités attendues des utilisateurs.

Architecture et intégration au noyau Linux

KVM a été intégré au noyau Linux en février 2007 avec la version 2.6.20. Cette intégration garantit la maintenance à long terme et l’évolution continue avec les améliorations du noyau Linux.

L’architecture de KVM exploite les extensions matérielles VT-x/AMD-V pour la virtualisation CPU, tout en s’appuyant sur QEMU pour l’émulation des périphériques. Cette combinaison offre des possibilités intéressantes : performances natives pour le processeur grâce au support matériel, et flexibilité maximale pour les périphériques grâce à l’écosystème riche de QEMU. Les machines virtuelles KVM apparaissent comme des processus Linux standard, bénéficiant automatiquement de toutes les fonctionnalités du noyau. Mais cette approche la rend aussi dépendante des évolutions et des limitations de Linux : KVM ne peut qu’ajouter du code, et non pas en supprimer ou en modifier. Il y a donc des pénalités à la surcharge, et des risques liés à la cohabitation avec le reste du code Linux, même s’il n’est pas utilisé par KVM.

L’évolution moderne et la convergence technologique

Adoption universelle des extensions matérielles

Aujourd’hui, tous les grands hyperviseurs modernes utilisent les extensions matérielles Intel VT-x et AMD-V pour la virtualisation CPU. Cette standardisation a éliminé des différences fondamentales entre les approches, créant une base technologique commune pour l’ensemble de l’industrie. Les performances de virtualisation atteignent désormais 95 à 99 % des performances natives pour la plupart des charges de travail, rendant la virtualisation transparente pour les utilisateurs finaux.

Parallèlement, l’approche paravirtualisée de Xen a été adoptée universellement pour les pilotes de périphériques. Les pilotes paravirtualisés (standard technique « virtio ») remplacent l’émulation matérielle traditionnelle par une interface optimisée entre invité et hyperviseur. Cette convergence technique illustre comment les meilleures idées de chaque approche ont été intégrées dans un modèle hybride optimal : extensions matérielles pour le CPU, drivers paravirtualisés pour les périphériques. Bon, ça c’est la version simple et rose, dans la pratique des industriels se tirent dans les pattes et verrouillent via les licences privatives de leurs systèmes.

Technologies avancées de virtualisation

Les hyperviseurs modernes intègrent des technologies sophistiquées bien au-delà de la virtualisation CPU basique. La Second Level Address Translation (SLAT), implémentée via Intel EPT (Extended Page Tables) et AMD NPT (Nested Page Tables), permet la virtualisation efficace de la mémoire en éliminant le surcoût (overhead) des tables de pages shadow. Les IOMMU (Input-Output Memory Management Unit) étendent la virtualisation aux périphériques, permettant l’accès direct des machines virtuelles aux cartes réseau et de stockage via des technologies comme SR-IOV.

Ces avancées apportent des cas d’usage savoureux comme le GPU passthrough pour les tâches spécialisées (traitement du signal, réseaux de neurones…), la virtualisation réseau pour les environnements dans le nuage, et l’isolation de sécurité pour les applications critiques. L’évolution vers le calcul confidentiel avec Intel Trusted Execution Technology (TXT) et AMD Memory Guard montre que les travaux de recherche et d’ingénierie sur la virtualisation continuent fortement. On constate également un rapprochement avec les mécanismes de conteneurisation, qui doivent quant à eux répondre à des enjeux connexes.

Applications contemporaines et spécialisations

Xen dans les systèmes embarqués et de sécurité

Xen a trouvé sa place dans des domaines spécialisés où ses caractéristiques uniques offrent des avantages distincts. Le mode Dom0less, introduit récemment, permet de démarrer des machines virtuelles directement sans nécessiter un domaine de contrôle Linux complet (18) . Cette fonctionnalité est particulièrement intéressante dans l’industrie automobile et les systèmes embarqués où les contraintes de mémoire et de temps de démarrage sont critiques.

Qubes OS utilise Xen pour implémenter un modèle de sécurité security by isolation où chaque application s’exécute dans une machine virtuelle dédiée. Cette approche offre une protection maximale contre les malwares et les attaques par compromission, au prix d’une complexité d’utilisation accrue. Et croyez-moi, c’est tellement chiant que vous n’avez pas envie de l’utiliser au quotidien.

Les systèmes critiques de défense et de recherche adoptent également Xen pour ses garanties d’isolation.

QEMU dans le développement et la recherche

QEMU est indispensable pour le développement cross-platform et la recherche en architecture des processeurs. Les développeurs utilisent QEMU pour tester leurs applications sur des architectures non disponibles physiquement, accélérant significativement les cycles de développement. La communauté de recherche en systèmes s’appuie sur QEMU pour prototyper de nouvelles architectures et évaluer des modifications matérielles sans nécessiter de fabrication de puces.

L’intégration de QEMU avec des frameworks de simulation (comme gem5) permet des analyses de performance détaillées et l’exploration d’architectures expérimentales. Cette capacité est cruciale pour la recherche académique et le développement de futurs processeurs dans l’industrie semiconductrice.

Il n’existe aujourd’hui pas d’alternative réelle à QEMU.

Comparaison simple de solutions modernes

Technologie Forces principales Cas d’usage typiques Surcoût en performances
KVM Intégration Linux native, écosystème riche Nuage, centres de données légers 2–5 %
VMware ESXi Maturité enterprise, outils de gestion Centres de données d’entreprise 3–7 %
Xen Isolation robuste, empreinte mémoire réduite Nuage, systèmes embarqués, sécurité critique 2–5 %
QEMU Émulation universelle, développement ''cross-platform'' Développement, recherche, émulation héritée 10–50 %

Leçons et perspectives d’évolution

L’histoire de la virtualisation x86 illustre comment les contraintes architecturales stimulent l’innovation technologique. Le manque de sécurité dans la conception des instructions sensibles non privilégiées de l’architecture x86 a conduit à un écosystème technologique diversifié, qui commence à rendre pénible le travail à cause de l’accumulation des couches historiques. Les nouvelles architectures (puces pour l’informatique mobile, Apple avec ses puces M*) peuvent laisser espérer de nouvelles approches natives. Bien sûr cela veut dire redévelopper des écosystèmes logiciels entiers, mais ça on sait faire.

Cette évolution souligne également l’importance de la collaboration entre logiciel et matériel. Les extensions VT-x/AMD-V résultent d’une coopération étroite entre les concepteurs de processeurs (Intel, AMD) et les développeurs de logiciels de virtualisation. Cette synergie continue de s’approfondir avec les technologies émergentes comme les enclaves sécurisées (Intel SGX) et le calcul confidentiel.

Ligne de temps : des étapes de la virtualisation x86 de 1974 à 2025

  • 1974 :
    • Gerald J. Popek et Robert P. Goldberg publient « Formal requirements for virtualizable third generation architectures », établissant les critères théoriques de la virtualisation
  • 1998 :
    • Fondation de VMware à Palo Alto ; environ 20 employés et développement discret
  • 1999 :
    • Lancement officiel de VMware
  • 2001 :
    • VMware entre sur le marché des serveurs avec VMware GSX Server (hébergé) et VMware ESX Server (bare-metal)
  • 2002 :
    • VMware lance ESX Server 1.5, son premier hyperviseur professionnel
    • Introduction de vMotion (migration à chaud de machines virtuelles), début de la haute disponibilité dans la virtualisation
  • 2003 :
    • Première publication de Xen : « Xen and the Art of Virtualization »
    • VMware lance vCenter Server pour la gestion centralisée
  • 2004 :
    • AMD annonce ses extensions de virtualisation sous le nom de code Pacifica (futur AMD-V/SVM)
    • Intel développe ses extensions Vanderpool Technology (futur VT-x)
    • Première conférence VMworld
  • 2005 :
    • Fabrice Bellard publie le papier QEMU à l’USENIX Annual Technical Conference
    • Intel sort les premiers processeurs VT-x (Pentium 4)
  • 2006 :
    • AMD lance les premiers processeurs AMD-V (Athlon 64)
  • 2007 :
    • KVM intégré au noyau Linux mainline avec la version 2.6.20
    • Avi Kivity publie « kVM: the Linux Virtual Machine Monitor » au Ottawa Linux Symposium
  • 2009 :
    • Extension de AMD-V 2.0 avec Rapid Virtualization Indexing (RVI)
  • 2013 :
    • Introduction de Docker pour la conteneurisation, qui rassemble plusieurs technologies existantes (jails, cgroups, namespaces…)
  • 2019 :
    • VirtualBox 6.1 supprime définitivement le support de la virtualisation logicielle, nécessitant désormais VT-x/AMD-V
  • 2020 :
    • Mode Dom0less pour Xen dans les systèmes embarqués
    • Intégration native de virtio dans tous les hyperviseurs modernes
  • 2021 :
    • Émergence des microVM et convergence conteneur/virtualisation

Références académiques et industrielles

  • 1 Protection ring. Wikipedia. https://en.wikipedia.org/wiki/Protection_ring
  • 2 Bugnion, E., Nieh, J., Tsafrir, D. (2017). The Popek/Goldberg Theorem. In: Hardware and Software Support for Virtualization. Synthesis Lectures on Computer Architecture. Springer, Cham. https://doi.org/10.1007/978-3-031-01753-7_2
  • 3 Popek, G. J., & Goldberg, R. P. (1974). "Formal requirements for virtualizable third generation architectures." Communications of the ACM, 17(7), 412-421. https://dl.acm.org/doi/10.1145/361011.361073
  • 4 Popek and Goldberg virtualization requirements. Wikipedia. https://en.wikipedia.org/wiki/Popek_and_Goldberg_virtualization_requirements
  • 5 Adams, K., & Agesen, O. (2006). "A comparison of software and hardware techniques for x86 virtualization." ACM SIGPLAN Notices, 41(11), 2-13. ASPLOS 2006. https://pdos.csail.mit.edu/6.828/2018/readings/adams06vmware.pdf
  • 6 Bugnion, E., et al. (2012). "Bringing Virtualization to the x86 Architecture with the Original VMware Workstation." ACM Transactions on Computer Systems, 30(4). https://dl.acm.org/doi/10.1145/2382553.2382554
  • 7 Bellard, F. (2005). "QEMU, a Fast and Portable Dynamic Translator." USENIX Annual Technical Conference, FREENIX Track. https://www.usenix.org/event/usenix05/tech/freenix/full_papers/bellard/bellard.pdf
  • 8 "QEMU." Wikipedia. https://en.wikipedia.org/wiki/QEMU
  • 9 Barham, P., Dragovic, B., Fraser, K., Hand, S., Harris, T., Ho, A., ... & Warfield, A. (2003). "Xen and the art of virtualization." ACM SIGOPS Operating Systems Review, 37(5), 164-177. SOSP 2003. https://www.cl.cam.ac.uk/research/srg/netos/papers/2003-xensosp.pdf
  • 10 Lavania, K. K., Gupta, M., Jain, N., & Sharma, S. (2011). "Next-Generation Secure Computing Base (NGSCB)." Journal of International Academy of Physical Sciences, 15(2), 445-453. https://www.iaps.org.in/journal/index.php/journaliaps/article/view/657
  • 11 Anderson, R. (2003). "Cryptography and competition policy: issues with ’trusted computing’." PODC ’03: Proceedings of the twenty-second annual symposium on Principles of distributed computing, 3-10. https://www.research.ed.ac.uk/en/publications/cryptography-and-competition-policy-issues-with-trusted-computing
  • 12 "x86 virtualization." Wikipedia. https://en.wikipedia.org/wiki/X86_virtualization
  • 13 Fisher-Ogden, J. "Hardware Support for Efficient Virtualization." UCSD Technical Report. https://cseweb.ucsd.edu/~jfisherogden/hardwareVirt.pdf
  • 14 "Understanding Hardware-Assisted Virtualization." Admin Magazine. https://www.admin-magazine.com/Articles/Hardware-assisted-Virtualization
  • 15 Goto, Y. (2011). "Kernel-based Virtual Machine Technology." Fujitsu Scientific & Technical Journal, 47(3), 362-368. https://hobby.esselfe.ca/docs/KVM-tech.pdf
  • 16 Kivity, A. (2007). "kvm: the Linux Virtual Machine Monitor." Ottawa Linux Symposium, 225-230. https://www.kernel.org/doc/ols/2007/ols2007v1-pages-225-230.pdf
  • 17 "KVM: Kernel-based Virtualization Driver." Qumranet White Paper. https://docs.huihoo.com/kvm/kvm-white-paper.pdf
  • 18 "dom0less." Xen Project Documentation. https://xenbits.xen.org/docs/unstable/features/dom0less.html
@misc{Clauzel:2025:Breve-histoire-des-technologies-de-virtualisation-Xen-VMware-KVM-et-QEMU,
	title = {Brève histoire des technologies de virtualisation : Xen, VMware, KVM, et QEMU},
	year = {2025},
	month = oct,
	day = 17,
	url = {https://damien.clauzel.eu/post/2025/10/17/Bre%CC%80ve-histoire-des-technologies-de-virtualisation-%3A-Xen%2C-VMware%2C-KVM%2C-et-QEMU},
	author = {Clauzel, Damien},
	language = {french},
	keywords = {virtualisation, processeur, chronologie},
	language = {french},
	abstract = {L’évolution des technologies de virtualisation sur architecture x86 représente l’un des aspects les plus significatifs de l’informatique moderne. Son histoire illustre comment les contraintes architecturales du processeur x86 ont conduit au développement de nouvelles solutions, puis de nouveaux paradigmes. Les quatre technologies abordées ici — Xen, VMware, KVM et QEMU - ont chacune apporté des approches distinctes pour résoudre les problèmes fondamentaux de la virtualisation x86. L’aboutissement actuel étant l’informatique par l’approche du nuage.}
}

Notes

[1] On va laisser de côté Hyper-V, hein. Ça sera mieux pour tout le monde 😛

[2] je vous renvoie à la 4e déclinaison du latin pour la signification et la prononciation

mercredi 4 septembre 2019

Personnaliser l’écran de connexion d’un serveur Linux

Quand un serveur Linux démarre, on aime savoir qui il est et comment s’y connecter. C’est surtout vrai dans le cas de mise en réseau par DHCP ainsi que pour les machines virtuelles dans le cloud. Le désespoir est grand on voit la console afficher « Debian GNU/Linux buster/stable Clauzel.eu tty1 » mais qu’on a aucune idée d’où se connecter par ssh.

La solution est d’enrichir le fichier /etc/issue pour demander l’affichage d’informations supplémentaires. Ainsi, la configuration

Nom d’hôte : \n.\o
IPv6 : \6
IPv4 : \4
Système : \S{PRETTY_NAME} \s \m \r

produira l’affichage

Nom d’hôte : Clauzel.eu
IPv6 : 2a01:4f8:1c17:4608::42
IPv4 : 88.99.35.242
Système : Debian GNU/Linux 10 (buster) Linux x86_64 4.19.0-5-amd64

Remarques :

  • ici la balise \6 affichera uniquement la première adresse IPv6 de la première interface. C’est ennuyeux puisque l’IPv6 permet justement de disposer de nombreuses adresses ;
  • il est possible de choisir quelle interface on souhaite afficher, avec \6{eth0}, mais là encore on ne récupère que la première adresse ;
  • il est fort possible que cette solution ne fonctionne pas correctement avec systemd ; mais en même temps, qui utilise systemd sur ses serveurs ?

Documentation : man 8 getty

mardi 5 février 2019

Utiliser Steam sur un Chromebook

Manipulation réalisé le 2019-02-05 sur un ordinateur Acer Chromebook Spin 11 R751T-C8D8.

Le prérequis est naturellement d'avoir un appareil compatible.

Dans les préférences de ChromeOS, activer les application Linux. Puis lancer le terminal pour installer le client Steam :

sudo apt update
sudo apt install wget
wget https://steamcdn-a.akamaihd.net/client/installer/steam.deb
sudo apt update
sudo dpkg -i ./steam.deb
sudo apt -f install
rm -f steam.deb
steam

Une nouvelle fenêtre de terminal va alors s'ouvrir, avec dedans l'installation de nouveaux paquets. Accepter l'installation.

Note : sur certains Chromebooks, il peut être nécessaire de positionner la variable d'environnement CPU_MHZ="2300.000" avant de lancer le client Steam :

CPU_MHZ="2300.000" /usr/bin/steam

mercredi 20 septembre 2017

Déployer un nœud YaCy sur une adresse IPv6 et avec un accès https

Il est possible de mettre en place un nœud YaCy participant à la fédération globale, avec une connectivité IPv6 et HTTPS.

Qu’est-ce que YaCy ? Facile.

YaCy est un moteur de recherche que chacun peut installer pour indexer le web (pages publiques accessibles par internet), pour indexer un intranet ou pour parcourir d'autres données avec une fonction moteur de recherche. YaCy peut être utilisé de façon autonome, mais sa principale force est de pouvoir fonctionner en réseau peer-to-peer, ce qui fait que sa puissance s’accroît avec le nombre d'utilisateurs, qu'il est entièrement acentré (tous les "peers" sont égaux et il n'y a pas un organisme administratif central) et qu'il n'est pas censurable et ne stocke pas le comportement des utilisateurs.

La liberté de l'information ainsi obtenue par le biais des logiciels libres et d'un moteur de recherche distribué est également un des objectifs du projet.

Prérequis

  • avoir une connexion IPv6 opérationnelle avec une adresse publique (nous utilisons ici 2001:41d0:12a:4d00:dcdc::46)
  • disposer d’un nom de domaine (nous créerons ici le champ AAAA YaCy.Clauzel.eu)
  • utiliser Debian/stretch sans systemd
  • avoir apache2 en place (nous ajouterons 2 vhosts)
  • avoir un certbot récent, celui de Debian/stretch est trop ancien et ne gère pas les demandes pour un hôte uniquement en IPv6 :
apt-get install certbot apt-get install certbot
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

Mise en place du nom de domaine

  • Créer l’enregistrement DNS pour le nœud; ici YaCy.Clauzel.eu pointe sur 2001:41d0:12a:4d00:dcdc::46

Installer YaCy

Mise en place initiale :

  • Lire et appliquer la documentation de YaCy ; nous utilisons ici la version 1.92 pour linux. YaCy est installé pour l’utilisateur dédié yacy:yacy dans le répertoire /home/yacy
  • Dans l’interface web de YaCy Mode d'utilisation et compte>avec SSL, activer le HTTPS sur le port 8443
  • Dans l’interface web de YaCy Administration du système>Paramètres d'accès au serveur>staticIP, définissez l’adresse publique du nœud comme étant YaCy.Clauzel.eu

Indiquer à java que nous donnons la préférence à l’IPv6 :

service yacy stop

Dans /etc/init.d/yacy, modifier JAVA_ARGS="-server -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Dsolr.directoryFactory=solr.MMapDirectoryFactory -Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Stack=true"

service yacy start

À ce moment, YaCy doit tourner en mode Senior et être publiquement joignable à l’adresse http://YaCy.Clauzel.eu:8090

Créer le certificat TLS

Un simple certificat TLS suffit, mais vous pouvez vous faire plaisir avec les options :

service apache2 stop
certbot-auto certonly --standalone -d YaCy.Clauzel.eu --renew-by-default --must-staple --staple-ocsp --agree-tos --uir --hsts
service apache2 start

Préparation du certificat pour java

Les applications java ont ceci de casse-pied particulier qu’elles n’utilisent pas les certificats TLS au format PEM : il nous faut convertir notre certificat.

openssl pkcs12 -export -in /etc/letsencrypt/live/yacy.clauzel.eu/fullchain.pem -inkey /etc/letsencrypt/live/yacy.clauzel.eu/privkey.pem -out /etc/letsencrypt/live/yacy.clauzel.eu/yacy.clauzel.eu.p12 -CAfile /etc/letsencrypt/live/yacy.clauzel.eu/chain.pem -caname root -password pass:JeSuisUnMotDePasse -name yacy.clauzel.eu
keytool -importkeystore -srcstorepass JeSuisUnMotDePasse -deststorepass JeSuisUnMotDePasse -destkeypass JeSuisUnMotDePasse -srckeystore /etc/letsencrypt/live/yacy.clauzel.eu/yacy.clauzel.eu.p12 -alias yacy.clauzel.eu -srcstoretype PKCS12 -destkeystore /etc/letsencrypt/live/yacy.clauzel.eu/yacy.clauzel.eu.key

Mettre en place le certificat

Nous pouvons alors placer notre joli certificat dans l’arborescence de l’application.

service yacy stop
 cp /etc/letsencrypt/live/yacy.clauzel.eu/yacy.clauzel.eu.key DATA/SETTINGS/
 chown yacy:yacy DATA/SETTINGS/yacy.clauzel.eu.key
 chmod 400 DATA/SETTINGS/yacy.clauzel.eu.key

Configurer l’utilisation du certificat

Il reste maintenant à informer l’application de l’existence de ce certificat. Il faut vérifier/définir dans le fichier DATA/SETTINGS/yacy.conf :

port.ssl=8443
keyStore=DATA/SETTINGS/yacy.clauzel.eu.key
keyStorePassword=JeSuisUnMotDePasse
server.https=true
staticIP=YaCy.Clauzel.eu

Puis démarrer YaCy :

service yacy start

À ce moment, YaCy doit être publiquement joignable à l’adresse https://YaCy.Clauzel.eu:8443

Définir des redirections dans apache

Nous ajoutons alors des redirections web, qui permettrons d’accéder directement au nœud sans devoir spécifier le port.

Créer la directive /etc/apache2/sites-available/00-YaCy.conf :

<VirtualHost *:80>
    Define INSTANCE yacy.clauzel.eu
    ServerName ${INSTANCE}
    RewriteEngine On
    RewriteRule ^(.*)$ https://${INSTANCE}:8443 [redirect=301]
</VirtualHost>

<VirtualHost *:443>
    Define INSTANCE yacy.clauzel.eu
    ServerName ${INSTANCE}
    RewriteEngine On
    RewriteRule ^(.*)$ https://${INSTANCE}:8443 [redirect=301]
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/${INSTANCE}/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/${INSTANCE}/privkey.pem
</VirtualHost>

Activons cette configuration :

a2ensite 00-YaCy.conf
service apache2 restart

YaCy est désormais accessible à l’adresse https://YaCy.Clauzel.eu, et http://YaCy.Clauzel.eu redirige le visiteur vers l’accès sécurisé

Bonne chance à tous, comme on dit « chez-moi ça marche ».

dimanche 4 septembre 2016

Utiliser Steam sur MacOS en 2016 avec un système de fichiers sensible à la casse

En 2016 , le client Steam sur Mac a beaucoup changé par rapport à ce qu’il était en 2010. Enfin, pas tant que ça… Il est toujours en 32 bits, exige toujours un système de fichiers non sensible à la casse, son overlay est toujours aussi problématique, et sa gestion des manettes de jeu toujours aussi erratique.

Bref, il convient d’adapter la procédure que nous avions mis en place en 2010. Le principe reste le même : on mets tous les éléments dans une image disque, et on crée des liens.

Ouvrir un terminal

Nous allons travailler principalement en ligne de commande. Eh, jouer se mérite un peu ;) On pourrait faire la même chose en utilisant des outils graphiques, mais cela serait plus long à expliquer.

Créer l’image disque qui accueillera Steam

L’image disque peut être rangée n’importe où : /Applications, $HOME, etc. Nous la mettrons dans $HOME/Applications/Jeux

mkdir -p ~/Applications/Jeux
cd ~/Applications/Jeux
hdiutil create -size 50g -type SPARSEBUNDLE -fs HFS+J -volname Steam Steam
created: /Users/USER/Applications/Jeux/Steam.sparsebundle

Pour d’informations, on se tournera vers le billet sur la manipulation des images disques.

Mettre en place l’application Steam

Ouvrir notre image disque pour Steam et y copier l’application Steam fournie par Valve.

hdiutil attach Steam.sparsebundle
/dev/disk4          	GUID_partition_scheme          	
/dev/disk4s1        	EFI                            	
/dev/disk4s2        	Apple_HFS                      	/Volumes/Steam

On constate ici que notre image disque a été montée dans /Volumes/Steam; elle apparait d’ailleurs sur le bureau. Il suffit maintenant d’y copier l’application Steam de Valve directement depuis l’image d’installation.

Adapter le compte utilisateur pour faire fonctionner Steam

Le principe est de stocker dans notre image disque tout ce qui a trait à Steam, et d’utiliser des liens pour maintenir les chemins d’accès.

mkdir -p /Volumes/Steam/Library
# copiez dans /Volumes/Steam/Library votre dossier applicatif « Steam » existant; ou vous pouvez simplement laisser Steam le recréer… et retélécharger tous vos jeux.
ln -s /Volumes/Steam/Library/Steam ~/Library/Application\ Support/Steam

Il ne reste plus qu’à synchroniser le tout et à refermer.

sync
hdiutil detach /Volumes/Steam
"disk4" unmounted.
"disk4" ejected.

Jouer !

Pour utiliser Steam, il suffit de monter l'image disque (en double cliquant dessus, par exemple), puis de lancer l'application.

mardi 5 juillet 2016

Personnaliser les en-têtes de courriels envoyés par Mail.app

Pour des besoins précis, on a souvent besoin de personnaliser les en-têtes des courriels que l’on envoie. Que ce soit pour y glisser des métadonnées de chiffrement, de transport, de filtrage, d’identité, ou encore de classification, c'est une pratique courante et transparente.

Sous MacOS, le logiciel Mail.app utilise la clé de configuration UserHeaders pour définir les en-têtes utilisateur. Ainsi, dans mon cas j’ajoute les deux en-têtes suivants :

  • OpenPGP : l’empreinte de ma clé PGP, et l’URI de son emplacement ;
  • X-FOAF : l’URI de mon identité pour le web sémantique.

Ces deux champs sont positionné via le terminal :

defaults write com.apple.mail UserHeaders "{ \
    OpenPGP = 'id=322B 89F1 FA51 3211 40F3  B358 5E88 C01E BAFD 1998; preference=signencrypt; url=https://Damien.Clauzel.eu/public/Cles_publiques/GnuPG/Damien_Clauzel.eu_publique.asc'; \
    X-Foaf = 'https://Damien.Clauzel.eu/Damien_CLAUZEL-FoaF.rdf'; \
}"

On constate désormais la présence des nouveaux en-têtes dans les courriels envoyés :

Return-Path: 
Received: from ?IPv6:2a01:e34:ec15:6030:b91e:f8a8:1579:acba? ([2a01:e34:ec15:6030:b91e:f8a8:1579:acba])
        by smtp.gmail.com with ESMTPSA id ue1sm3813420wjc.44.2016.07.01.09.55.57
        for 
        (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
        Fri, 01 Jul 2016 09:55:57 -0700 (PDT)
From: Damien Clauzel 
X-Google-Original-From: Damien Clauzel 
Subject: XXXXX
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
Content-Type: multipart/signed; boundary="Apple-Mail=_C578A8CA-4F46-4294-83B1-893306A67B44"; protocol="application/pgp-signature"; micalg=pgp-sha512
X-Pgp-Agent: GPGMail 2.6b2
X-Foaf: https://Damien.Clauzel.eu/Damien_CLAUZEL-FoaF.rdf
OpenPGP: id=322B 89F1 FA51 3211 40F3  B358 5E88 C01E BAFD 1998; preference=signencrypt; url=https://Damien.Clauzel.eu/public/Cles_publiques/GnuPG/Damien_Clauzel.eu_publique.asc
In-Reply-To: 
Date: Fri, 1 Jul 2016 18:55:56 +0200
Message-Id: 
References:  
To: Example 
X-Mailer: Apple Mail (2.3124)

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

mercredi 19 juin 2013

Passer les torrents à Transmission depuis elinks

Quand on travaille à distance sur des machines, on a parfois besoin d'utiliser des torrents pour distribuer en masse des données sans surcharger un serveur unique — par exemple, pour diffuser des mises à jour dans un parc informatique.

Le problème se pose quand il faut récupérer ces torrents sur un serveur web nécessitant une authentification : il faut alors gérer des cookies de session, parfois utiliser des formulaires, etc. Bref, quand une simple requête curl n'est humainement plus envisageable, il faut sortir le navigateur web.

Pour les torrents, j'utilise Transmission en mode serveur, naturellement; l'outil transmission-remote permet de le piloter. Mon navigateur web en mode texte de prédilection est elinks.

La technique consiste donc à plonger directement dans le site web — en utilisant les cookies d'authentification mémorisés par elinks — pour obtenir le lien de téléchargement du torrent, afin de le passer à transmission-remote qui dira quoi faire à transmission-daemon. Non, ce n'est pas aussi tordu que ça en a l'air, et ça répond parfaitement à bon nombre de situations du quotidien.

Elinks se configure très facilement via ~/.elinks/elinks.conf.

# déclaration du type mime des torrents
set mime.extension.torrent="application/x-bittorrent"

# on nomme un gestionnaire pour ce type mime; ici, tout simplement « bittorrent »
set mime.type.application.x-bittorrent = "bittorrent"

# elinks demandera confirmation avant de télécharger le torrent, et donc de le passer à transmission
set mime.handler.bittorrent.unix.ask = 1 
set mime.handler.bittorrent.unix-xwin.ask = 1 

# le téléchargement sera fait d'une façon non-bloquante dans elinks, car on a autre chose à faire.
# en même temps, un torrent est très petit, ça va vite à transférer
set mime.handler.bittorrent.unix.block = 0 
set mime.handler.bittorrent.unix-xwin.block = 0 

# on associe une commande externe au gestionnaire précédemment défini 
set mime.handler.bittorrent.unix.program = "transmission-remote --add %"
set mime.handler.bittorrent.unix-xwin.program = "transmission-remote --add %"

Les liens magnets seront gérés d'une même façon, excepté qu'on ne cible pas un type mime mais un protocole.

mardi 14 mai 2013

Trouve-moi un Vélo'v et autres développements autour des données ouvertes à Lyon

Avec plusieurs personnes d'OpenData69, je travaille autour des données publiques ou ouvertes dans le Rhône, et plus particulièrement à Lyon. Dans nos réalisations techniques, nous proposons — entre autre — différents démonstrateurs utilisant plusieurs jeux de données, dont ceux du Grand Lyon et des Vélo'v lyonnais de JCDecaux.

Ainsi, Emmanuel Scotto a réalisé un démonstrateur utilisant les données ouvertes du Grand Lyon ; sources.

Personnellement, je m'intéresse surtout aux vélos en libre service (en attendant les données des TCL…) avec un démonstrateur utilisant les données des Vélo'v de JCDecaux[1] ; sources.

Accueil démonstrateur vélov

Résultat démonstrateur vélov

Pour la suite, nous avons en tête différents outils pour permettre aux lyonnais de mieux utiliser leurs vélo'v :

  • des statistiques d'utilisations des stations : quelles sont les stations les moins/plus utilisées, à quelles périodes, etc. ;
  • des études sur les déplacements urbains : variation de l'utilisation des vélos selon la date (weekend, jour férié, vacances), la météo, les événements (rencontres sportives, concerts, etc.) ;
  • des prédictions de disponibilité/remplissage des stations : détection de motifs d'usages, et projections.

Ces travaux dépendent naturellement des API sur lesquelles nous pouvons nous appuyer, et donc de la volonté d'ouverture des administrations, des collectivités territoriales, et des entreprises.

Note

[1] sur IPv6, naturellement :)

mardi 11 septembre 2012

La rédaction moderne : utiliser XeLaTeX et biblatex ensemble

Le problème

LaTeX a pu évoluer pour supporter des fonctionnalités « modernes » comme UTF-8, les polices TrueType, etc., mais a désormais atteint ses limites. Pour bénéficier des nouvelles technologies de la composition informatique, il faut passer à un autre système, comme XeLaTeX.

Pour la bibliographie, on se tourne vers biblatex qui prend la suite de bibtex ; avec là encore un support de l'UTF-8, des nouveaux attributs, etc.

Biblatex: Bibliographies in LaTeX using BibTeX for sorting only. Biblatex is a complete reimplementation of the bibliographic facilities provided by LaTeX in conjunction with BibTeX. It redesigns the way in which LaTeX interacts with BibTeX at a fairly fundamental level.

With biblatex, BibTeX is only used (if it is used at all) to sort the bibliography and to generate labels. Formatting of the bibliography is entirely controlled by TeX macros (the BibTeX-based mechanism embeds some parts of formatting in the BibTeX style file. Good working knowledge in LaTeX should be sufficient to design new bibliography and citation styles; nothing related to BibTeX's language is needed. In fact, users need not remain bound to BibTeX for use with biblatex: an alternative bibliography processor biblatex- biber is available.

Development of biblatex and biblatex-biber is closely coupled; the present release of biblatex is designed to work with biblatex-biber version 0.9.6. The package needs e-TeX, and uses the author's etoolbox and logreq packages. For users of biblatex-biber, version 0.9 is required (at least; refer to the notes for the version of biblatex-biber that you are using). Apart from the features unique to biblatex, the package also incorporates core features of the following packages: babelbib, bibtopic, bibunits, chapterbib, cite, inlinebib, mcite and mciteplus, mlbib, multibib, splitbib. Biblatex supports split bibliographies and multiple bibliographies within one document, and separate lists of bibliographic shorthands. Bibliographies may be subdivided into parts (by chapter, by section, etc.) and/or segmented by topics (by type, by keyword, etc.). Biblatex is fully localized and can interface with the babel.

Biber: A BibTeX replacement for users of biblatex. Biber is a BibTeX replacement for users of biblatex. Biber supports full UTF-8, can (re)-encode input and output, supports highly configurable sorting, dynamic bibliography sets and many other features.

The CTAN distribution offers a compressed tar archive of the sources, etc., together with "binary" distributions for a variety of platforms. Note: on SourceForge biber is formally named "biblatex-biber", to distinguish it from an earlier (now apparently moribund) project called "biber".

L'objectif n'est pas ici de faire une présentation de ces différents outils ni de comment les utiliser, mais de montrer comment faire travailler ensemble ces deux éléments. Pour ce faire, nous allons considérer 3 ECM.

Utiliser XeLaTeX et biblatex ensemble

Prérequis :

  1. avoir installé — et testé — une distribution de XeLaTeX[1]
  2. avoir installé le paquet biblatex et ses suppléments de styles
  3. avoir installé le paquet biber

Les documentations se trouvent dans l'arborescence de Tex Live :

  • biblatex : $TEXLIVE/2012/texmf-dist/doc/latex/biblatex/
  • biber : $TEXLIVE/2012/texmf-dist/doc/bibtex/biber

En pratique on n'aura besoin que de celle de biblatex afin d'ajuster le style de rendu des citations.

Nos exemples :

  • ecm.tex : notre exemple complet minimal, qui sera développé. Il permet de s'assurer que XeLaTeX fonctionne correctement pour nos besoins
  • ecm_biblatex.tex : notre exemple complet minimal pour biblatex, qui sera développé. Il permet de s'assurer que biblatex fonctionne correctement pour nos besoins
  • ecm_biblatex_mieux.tex : notre exemple riche d'utilisation de biblatex avec XeLaTeX, avec une personnalisation du rendu
  • MaBiblioPerso.bib : bibliographie pour la démonstration

La partie qui nous intéresse principalement est dans le préambule du document :

\usepackage[
  backend=biber,         % choix de l'outil de traitement
  babel=hyphen,          % environnement linguistique dédié aux entrées en langues alternatives (utilise l'attribut « hyphenation »)
  backref=true,          % liens dans la bibliographie pour remonter dans le texte
  backrefstyle=none,     % afficher toutes les utilisations de la référence
  bibstyle=alphabetic,   % style pour les clés des références dans la bibliographie : [initialesAnnée]
  citestyle=alphabetic,  % style pour les clés des références dans le texte : [initialesAnnée]
  sorting=none,          % bibliographie triée par ordre d'utilisation des références
]{biblatex}                  % support des bibliographies
\bibliography{MaBiblioPerso} % appel à la bibliographie externe

Pour compiler les exemples, on utilise la séquence suivante :

  1. xelatex ecm+biblatex+mieux # calcule le rendu partiel du document
  2. biber ecm+biblatex+mieux # prépare la bibliographie
  3. xelatex ecm+biblatex+mieux # fini le rendu du document, avec bibliographie, hyperliens, numéros de pages, etc.

XeLaTeX utilise la classe biblatex, appelée dans les sources du document. Dans une approche similaire Biber est utilisé en place de bibtex sans options particulières.

Aller plus loin, avec des exemples d'utilisations de styles personnalisés :

Note

[1] TeX Live est actuellement ce qui se fait de mieux ; nous nous appuierons dessus pour les exemples

vendredi 7 octobre 2011

Attaque juridique sur la tz database et ses conséquences pour le monde entier

Qu’est-ce qui s’est passé ?

Ce 30 septembre 2011 s’est produit un événement rare, d’une ampleur catastrophique pour le monde entier. Et personne ne l’a su, en dehors d’informaticiens spécialisés (administrateurs systèmes, gestionnaires de distribution de logiciels, etc.) et compétents[1].

La législation sur la propriété intellectuelle a failli déstructurer non seulement internet, mais aussi la quasi totalité des ordinateurs du monde entier. Je n’ai pas l’habitude des exagérations inutiles, donc moi-même je me surprend à écrire des choses pareilles. Et pourtant, c’est vrai.

La société américaine Astrolabe qui publie des ouvrages d'astrologie et des atlas a abusé utilisé le droit américain sur la propriété intellectuelle pour mettre hors-ligne et faire cesser l’activité autour de la tz database. Cela ne vous parle absolument pas, et c’est normal : il s’agit d’une partie de l’informatique très précise qui ne concerne pas directement les utilisateurs finaux.

La tz database ?

La tz database est un ensemble d'informations techniques sur les fuseaux horaires dans le monde. Ces informations sont utilisées partout en informatique : Détail d'horloge murale

  • Chaque fois que vous indiquez la ville où vous vous trouvez, par exemple, Europe/Paris, vous utilisez la tz database.
  • Chaque fois qu'un de vos appareils se met à l'heure automatiquement, par exemple votre magnétoscope, vous utilisez la tz database.
  • Chaque fois que vous consultez un site web votre ordinateur et celui en face se réfèrent à la tz database.
  • Chaque fois que vous notez un rendez-vous dans votre agenda électronique, vous utilisez la tz database.
  • Chaque fois que vous dépendez d'un appareil médical qui permet de vous maintenir en vie, vous pouvez être sur qu'il utilise la tz database.
  • Chaque fois que vous téléphonez, vous utilisez la tz database.
  • Chaque fois que vous prenez l'avion, vous utilisez la tz database.
  • Chaque fois que vous allumez la lumière dans une pièce, vous pouvez être sur que c'est grâce à des ordinateurs qui utilisent la tz database.

La tz database a été mise en place par Arthur Olson en 1986, pour permettre de disposer en un seul d'endroit des informations nécessaires pour gérer la data et l'heure sur les dispositifs informatiques. Avoir une seule source d'information permit à l'époque de factoriser de nombreux efforts éparpillés et de résoudre les problèmes de synchronisation. Ce projet s'est révélé être tellement pratique qu'il a été ensuite utilisé par l'ensemble des équipements qui utilisent de l'informatique; et qui donc s'appuient sur la notion de temps. De nos jours, on retrouve l'utilisation de la tz database dans la quasi totalité des équipements informatiques.

La tz database est gérée dans la grande tradition du libre : ouverture et transparence totale. N'importe qui peut rejoindre le projet, discuter de la structuration des données, participer au travail de collecte et de vérification des informations, réfléchir sur l'évolution de la gestion du temps (année bissextile, ajout et retrait de seconde pour compenser la rotation de la Terre, etc). Il est donc aisé pour n'importe quelle personne de contrôler la qualité du travail accompli et de le réutiliser.

Par une de ces bizarreries dont l'histoire a le secret, la tz database est hébergée par le NIH, ce qui convient très bien. De plus, elle est libre de toute contrainte politique et ne dépend d'aucun organisme. Ce qui correspond parfaitement aux besoins [2].

La bonne gestion de la tz database est importante car chaque année plusieurs dizaines de modifications y sont apportées : des pays sont créés et supprimés, des décisions politiques sont mises en œuvre pour limiter la consommation d'énergie (horaire été/hiver), des zones géographiques sont réaménagées, des tremblements de terre affectent la rotation de la planète, etc.

Conséquences de l'attaque juridique sur la tz database

La tz database est alimentée par des informations publiques : des lois sont votées, des arrêtés sont pris, des calculs scientifiques sont publiés… Son contenu n'est donc pas soumis à de quelconques règles d'exclusivité. En fait, c'est même l'inverse : ces informations doivent absolument être diffusées. Et au niveau international, la question politique du temps est plutôt bien gérée. Bref, rien à signaler.

Tout le monde (ou presque) dépend des informations de cette base de données. L'armée, la police, les secours aux personnes, la médecine, les transports, les entreprises, les particuliers… il n'y a aucun domaine couvert par l'informatique qui ne soit pas concerné. Et donc, la législation sur la propriété intellectuelle a failli supprimer et bloquer tout usage ultérieur de ces informations. Vous réalisez maintenant ce qui a affolé les informaticiens ?

kilo-étalon

Supprimer cette base de données équivaut à supprimer le kilo-étalon du Bureau international des poids et mesures et à interdire l'usage de sa dimension. Il n'y aurait alors plus de référence pour calibrer les machines-outils, et les conséquences seraient aussi dramatiques qu'immédiates dans tous les secteurs. Il se passe actuellement une chose similaire au niveau du temps : sa référence (ou plus précisément la grille qui permet de l'interpréter) est supprimée.

Naturellement, les informaticiens ont mis en place des procédures temporaires pour préserver le temps[3] et réfléchissent à une réorganisation de la gestion du projet pour que cela ne soit pas reproductible. Mais le problème initial demeure, à savoir que de plus en plus des actes juridiques aberrants attentent non seulement aux libertés fondamentales, mais mettent aussi en danger notre vie quotidienne.

Que des avocats agissant au nom d'une société aient pu mettre à genoux le temps, simplement en ayant une mauvaise connaissance du sujet qu'ils traitent et en abusant d'une législation créé pour protéger la rente culturelle des grands groupes internationaux, est inacceptable.

Solution(s)

Une solution serait de faire avancer les réformes sur le droit d'auteur, la protection des œuvres, et de poursuivre la législation sur les droits et devoir des hébergeurs internet afin que cette situation ne puisse pas se reproduire. C'est le but des lois DADVSI, HADOPI et LCEN. Malheureusement cette approche est vouée à l'échec, de part la nature de la technique du numérique et de celle du travail législatif. Il va vraiment falloir que le législateur accepte le fait qu'il ne peut pas simplement « réguler internet ».

Plus prosaïquement, une solution pratique serait de supprimer la propriété intellectuelle sur les œuvres de l'esprit, les logiciels, et les brevets. Pan. Ah oui, c'est vrai : cela ne plairait pas à Vivendi Universal. Donc à la place on préfère conserver une loi qui permet de casser tous les appareils informatiques avec une simple lettre de 5 pages envoyée de l'autre côté de l'océan par une personne sur laquelle on n'a aucun contrôle.

Notes

[1] Si vous êtes directement concerné et que vous n'êtes pas au courant de cette histoire, posez-vous sérieusement la question de votre qualification… vraiment.

[2] Imaginez que vos dispositifs informatiques dépendent du bon vouloir politique d'un pays tiers ; vous apprécieriez ? Je ne pense pas ; donc c'est très bien que la politique reste en dehors du projet.

[3] Ah, l'informaticien, ce héros des temps modernes. Il passe sa vie à Sauver le Monde, et le grand public ne le sait jamais.

vendredi 8 juillet 2011

Retour d'expérience sur le passage en BÉPO

Logo BÉPO

J’ai passé le clavier d’une de mes machines Ubuntu/natty en disposition BÉPO; la procédure fonctionne aussi pour Debian/stable. La keymap BÉPO est disponible dès le démarrage pour déverrouiller le disque, et dans la console et GDM pour permettre la connexion.

Pourquoi le BÉPO ? La communauté BÉPO vous expliquera cela dans les détails.

Mes premières impressions

Si les premières minutes sont horribles, celles qui suivent sont juste terribles. Il faut se forcer à bloquer des années de réflexes et pratiques accumulés sur les dispositions AZERTY et QWERTY. Il faut non seulement réapprendre à (correctement) taper au clavier, mais aussi à utiliser les bons caractères typographiques (apostrophes, tirets quadratins, etc). Au bout de 24 heures, j’ai pris mes repères; après 48 heures je commence à taper des mots de passe et quelques mots sans trop hésiter. Je sens qu'il va me falloir plusieurs semaines pour retrouver une vitesse de frappe acceptable.

Je suis surtout lent, effroyablement lent. Mais dès les premières secondes j’ai bien ressenti l’intérêt de la disposition BÉPO : mes doigts se déplacement beaucoup moins et les voyelles sont à une place extrêmement pratiques. En fait, je peux taper des bouts de phrases entiers sans quitter la rangée médiane. C’est impressionnant.

Passage en clavier BÉPO du portable

Les principaux problèmes que je rencontre sont :

  • les raccourcis clavier : leur usage est tellement systématique et ancré que « déplacer » un ^C ou un ^Z est une véritable douleur
  • VIM : au secours, il faut tout réapprendre ! dd, I et autres ont changé de place (ou plus exactement, ce sont les touches qui ont changé). C’est totalement désespérant de se sentir trahir par son éditeur de texte.
  • les commandes du shell : taper « xi » à la place de « cd » est crispant. Heureusement, les touches à la place de « rm » sont « on »; ça évite les mauvaises surprises…

Globalement, si la rédaction de texte se passe plutôt bien, j’éprouve de réelle difficultés avec tout ce qui est usage technique des touches : programmation, administration, etc. Mais de gré ou de force, mes doigts vont s’habituer. La seule question étant alors « en combien de temps ? ». Comme les vacances d'été commencent, j’espère être au point pour la rentrée.

Procédure à suivre

Ce que j’ai fait :

1) installer le paquet console-data avec les réponses : « Choisir un codage clavier pour votre architecture », « dvorak », « Standard », « Dvorak French Bepo (UTF8) »

2) spécifier la keymap dans /etc/default/keyboard :

XKBMODEL="latitude" # spécifique à mon portable, sinon pc105
XKBLAYOUT="fr"
XKBVARIANT="bepo"
XKBOPTIONS="lv3:ralt_switch,compose:lwin,terminate:ctrl_alt_bksp"

3) pour dire que je veux la keymap dans l’initramfs, ajouter dans /etc/initramfs-tools/initramfs.conf :

#
# KEYMAP: [ y | n ]
#
# Load a keymap during the initramfs stage.
#

# pour avoir la carte Bépo le plus tôt possible
# (voir /etc/console/boottime.kmap.gz ou /etc/console-setup/cached.kmap.gz)
KEYMAP=y

4) générer un nouvel initramfs pour empaqueter le tout : update-initramfs -uv

5) redémarrer

mercredi 8 septembre 2010

Conception d'un service pour Mac OS : raccourcisseur d'URL

Le service web : bit.ly / j.mp

Bit.ly (qui existe aussi sous le nom J.mp[1]) est un outil web pour raccourcir les URL. Comme beaucoup d'autres outils web similaires, il propose une API qui permet d'interagir avec lui de façon automatisée.

About bit.ly
bit.ly allows users to shorten, share, and track links (URLs). Reducing the URL length makes sharing easier. bit.ly can be accessed through our website, bookmarklets and a robust and open API. bit.ly is also integrated into several popular third-party tools such as Tweetdeck. A more full list of third party tools can be found on the bit.ly blog. Unique user-level and aggregate links are created, allowing users to view complete, real-time traffic and referrer data, as well as location and metadata. Tracking stats are available after users shorten their long links with bit.ly by clicking on the “Info+” link on bit.ly, or just adding a “+” sign to the end of any bit.ly link (for example, http://bit.ly/n0og+).
[2]

J'utilise j.mp[3] au quotidien car il propose des outils intéressants pour le suivi et l'archivage des raccourcis créés. Il est tout à fait possible d'utiliser un autre outil à la place.

Code

Pour créer le service, nous allons utiliser l'IDE Automator d'Apple. Automator permet de combiner des « briques » élémentaires logicielles pour construire un workflow basic. Il s'agit donc d'un outil pour concevoir aisément des tâches automatisées.

Service web Mac OS - j.mp - création de projet

Les services sont des processus contextuels disponibles dans Mac OS X. Ils acceptent du texte ou des fichiers de l’application actuelle ou du Finder. Les services apparaissent dans le menu Services.

Service web Mac OS - j.mp - code

Le code en lui-même est très court : alimenté par le sélecteur automatique d'URL, on effectue une requête http sur l'API du service web pour récupérer l'adresse raccourcie; on la place alors dans le presse-papier du système. Cela signifie combiner deux briques d'Automator : exécution d'un script UNIX, et placer un élément dans le presse-papier.

Le script est une simple requête CURL utilisant en entrée les données fournies par le sélecteur : /usr/bin/curl "http://api.bit.ly/v3/shorten?login=IDENTIFIANT&apiKey=CLÉAPI&format=txt&domain=j.mp&longUrl=$1".

Avertissement : cette méthode implique de mettre en dur dans le code l'identifiant et la clé de l'API. Cela ne pose pas un problème en soit dans le cadre d'une utilisation personnelle, car le service que nous créons (J.mp) est stocké dans le profil de l'utilisateur : ~/Library/Services/J.mp.workflow. Toutefois, en cas de partage il faudra songer à changer les identifiants de connexion au service web; cela peut se faire directement avec un éditeur de texte dans le fichier Contents/document.wflow. Pour un déploiement plus large (plusieurs machines, mise à disposition globale à tous les utilisateurs de la machine, etc), un mécanisme de paramétrage sera à mettre en place (on peut songer à un fichier de préférences dans ~/.config/).

Un fois le code source enregistré dans Automator, le service est immédiatement opérationnel. En effet, MacOS stock directement le service dans ~/Library/Services/ sans demander à l'utilisateur où placer le projet. Pratique, mais inhabituel.

Références

Notes

[1] pour les personnes qui desperately need those two additional free characters in order to make your point, comme l'annonce le blog

[2] source

[3] prononcer jump

mercredi 9 juin 2010

Comparaison appliquée des principaux outils web de calcul d'itinéraire

J’ai eu récemment à faire un déplacement sur Vienne (Isère). Étant un villeurbannais sans voiture, mon choix s’est naturellement porté sur le train pour m’y rendre. Ne connaissant pas du tout Vienne, je me suis tourné vers les outils gratuits du web pour organiser le trajet depuis la gare de Vienne jusqu’à mon lieu de rendez-vous. Leur comparaison sur ce cas concret en dehors des grandes agglomérations fortement couvertes me laisse songeur sur la qualité des zones peu peuplées.

Informations sur le trajet à effectuer :

  • Départ : la gare d'Estressin, à Vienne, en France
  • Arrivée : le 49 avenue Marcelin Berthelot, à Vienne, en France
  • Mode de déplacement : piéton

Google maps

Réglages : Tester soi-même

  • Départ : Gare Estressin, Vienne, France
  • Arrivée : 49 avenue Marcelin Berthelot, Vienne, France
  • Option : piéton

Problème immédiat : Google ne connait pas la gare d'Estressin

# Gare de Vienne‎ - plus d'infos » Place Pierre Semard, 38200 Vienne

# Gare de Givors-Canal‎ - plus d'infos » Avenue du 11 Novembre 1918, 69700 Givors

# Gare de Givors-Ville‎ - plus d'infos »

# Gare du Péage-de-Roussillon‎ - plus d'infos » Place de la Gare, 38550 Péage de Roussillon (Le)

# Gare d'Oullins‎ - plus d'infos » 69600 Oullins

# Gare de Saint-Clair-Les Roches‎ - plus d'infos »

# Gare Saint Paul‎ - plus d'infos » Place Saint-Paul, 69005 Lyon

# Gare de Vénissieux‎ - plus d'infos »

# La Gare 12 Route Nationale, 69560 Sainte-Colombe

Lancer une nouvelle recherche de commerces et services à proximité pour afficher les 7 484 résultats pour Gare Estressin, Vienne

Et son mauvais mappage carte ↔ terrain lui fait placer le n°49 de l'avenue Berthelot à l'endroit du n°8. Vérifier soi-même

Résultat : la proposition d'itinéraire est complètement râtée. C'est dommage, car le mode Street View est extrêmement pratique pour se répérer durant le trajet.

Via Michelin

Réglages : Tester soi-même

  • Départ :
    • ville : Vienne (France)
    • emplacement : gare Estressin
  • Arrivée :
    • ville : Vienne (France)
    • emplacement : 49 avenue Marcelin Berthelot
  • Option : piéton

Suivent aussitôt deux questions & un nettoyage automatique :

  1. confirmer dans une liste que ma ville de Vienne se trouve bien dans l'Isère (38) ? Aucune idée, je dis oui
  2. « gare Estressin » est corrigé automatiquement en « Gare d’Estressin »; ah ben… merci
  3. confirmer dans une liste que ma ville de Vienne se trouve bien dans l'Isère (38), et que 'est bien le 49 avenue Berthelot que je demande ? Je dis oui

Résultat : il est immédiat et délicieux.

  • cartes : globale, détail du départ, détail de l'arrivée, détail sur chaque changement de direction
  • feuille de route très lisible (continuer sur… prendre à droite sur…), avec les distances en kilomètres et en temps
  • possibilité d'imprimer une version papier très lisible et complètes : principales cartes, directions, etc.
  • possibilité d'envoyer les information par email, ou sur un GPS (6 grands fabricants supportés)

Bref, yabon. On sent bien l’efficacité des bases de connaissances de Michelin : les détails sont précis et conformes à la réalité, les informations ultraclaires et tout a été pensé pour faciliter le déplacement de l’utilisateur.

Mappy

Réglages : Tester soi-même

  • Départ : Gare Estressin, Vienne, France
  • Arrivée : 49 avenue Marcelin Berthelot, Vienne, France
  • Option : piéton

Le formulaire de saisie me demande de préciser mon lieu de départ en choisissant entre le Parking de la gare d'Estressin, et la Gare d'Estressin; va pour la gare.

Résultat : il est sans appel.

  • Mappy interprète ma gare d'Estressin comme étant en fait la gare de Vienne, située à l'autre bout de la ville. Ce n'est pas du tout le résultat attendu. Pire, c’est même un résultat trompeur. Pourtant, j'aurais cru que… mais non. Et si je choisis à la place de la gare le parking de la gare d'Estressin, à Estressin, Mappy m'impose la gare de Vienne comme interprétation.
  • L'itinéraire proposé est du coup complètement faux, même s’il est très bien présenté : directions à prendre, distances en mètres et en temps, cartes locales… Mais il est faux.

Yahoo! maps

Réglages : Tester soi-même

  • Départ : Gare Estressin, Vienne, France
  • Arrivée : 49 avenue Marcelin Berthelot, Vienne, France

Résultat : What. The. Fuck. L’envoi de ma recherche est intercepté par un bulle d'aide jaune, à la Windows.

Le lieu que vous avez demandé est introuvable. Voulez-vous essayer avec cette adresse proche : 49, avenue Marcellin Berthelot ? Conseils :

* Vérifiez l’orthographe.

* Spécifiez une nouvelle valeur d’adresse (rue), de ville et de région (département/province/état), ou un code postal.

* Pour signaler une erreur de la carte, cliquez sur ce lien.

J'ai envie de dire « Mais pourquoi ? POURQUOI ? ».

Je valide la bulle d'aide et obtiens le résultat de ma recherche d'itinéraire, avec l'adresse telle que je l'ai demandée.

L'itinéraire proposé est correct, sans plus, car il est surtout adapté aux voitures. La présentation est touffue et les points de passages ne sont pas détaillées (panneaux à suivre, cartes, etc). La carte proposée pour visualiser le trajet est uniquement en mode « plan », aucune photo aérienne ou satellite n'est disponible pour afficher cette zone.

Splendide raté de Yahoo! Maps, car même s'il a trouvé un itinéraire je ne peux que difficilement l’utiliser.

Bing Cartes

Réglages : Tester soi-même

  • Départ : Gare Estressin, Vienne, France
  • Arrivée : 49 avenue Marcelin Berthelot, Vienne, France
  • Option : piéton

Ah ben ça commence bien. Ma gare de départ est inconnue de Bing.

Nous n'avons trouvé aucun résultat correspondant à votre recherche.

Aller, je lui donne un coup de pousse et corrige en « Gare Estressin, France » et je valide.

Résultat : Sans sourciller, Bing m'annonce que :

Aucun itinéraire aussi long n'est disponible pour les piétons. Modifiez vos préférences.

Ce qui est plutôt normal au vu du fait qu'il a interprété ma gare de départ comme étant « Gare, Nord, France ». Tout en quittant Bing, j'apprend en soupirant que Gare est un petit village situé à l'Est de Cambrais; qui se trouve effectivement dans le Nord.

Échec sans appel. En plus, la carte de résultat est moche. Aucun regret.

Conclusions

J'utilise les outils de préparation d'itinéraires depuis de nombreuses années, et je n'ai jamais eu à me plaindre des résultats pour les grandes villes : indication des stations de métro, des sens uniques ou encore des voies piétonnes, photos aériennes des changements de directions, calcul des distances au mètre prêt, etc, le résultat est presque toujours parfait; la différence entre les outils se fait alors sur leur ergonomie et fonctionnalités annexes.

Mais en ce qui concerne les zones moins peuplées (petites villes de province, campagnes, bords de mer, etc) les plans sont très souvent approximatifs. En effet, les outils de cartographie travaillent automatiquement à partir de photos aériennes et satellite, couplées à des données GPS collectées de façon assez cavalières.

Des projets comme OpenStreetMap permettent de réparer ces imprécisions en construisant des cartes libres à partir de différentes sources, libres elles-aussi. La prochaine étape pour améliorer les outils de calcul d'itinéraires sera logiquement de croiser ces bases de connaissances libres avec des bases de connaissances privées de qualité, telles que celle de Michelin.

vendredi 14 mai 2010

Utiliser Steam sur MacOS avec un système de fichiers sensible à la casse

Tout joyeux, vous avez téléchargé la version MacOS de Steam pour profiter gratuitement de Portal. Vous avez bien raison, c'est un excellent jeu. Mais une fois lancé, Steam s'arrête en affichant le message suivant :

Steam requieres that /Users/USER/Téléchargements/Steam.app/Contents/MacOS be created on a case insensitive filesystem, with read-write access.

Le problème : pour être installé sur MacOS, Steam exige un système de fichiers insensible à la casse. Et ce aussi bien pour l'application elle-même que ses données (~/Library/Application\ Support/Steam et ~/Documents/Steam\ Content).

La solution : utiliser la technique habituelle, à savoir passer par une image disque pour regrouper les fichiers sur un volume personnalisé.

Ouvrir un terminal

Nous allons travailler principalement en ligne de commande. Eh, jouer se mérite un peu ;) On pourrait faire la même chose en utilisant des outils graphiques, mais cela serait plus long à expliquer.

Créer l'image disque qui accueillera Steam

L'image disque peut être rangée n'importe où : /Applications, $HOME, etc. Nous la mettrons dans $HOME/Applications

$ mkdir -p ~/Applications
$ cd ~/Applications
$ hdiutil create -size 50g -type SPARSEBUNDLE -fs HFS+J -volname Steam Steam
created: /Users/USER/Applications/Steam.sparsebundle

Pour d'informations, on se tournera vers le billet sur la manipulation des images disques.

Mettre en place l'application Steam

Ouvrir notre image disque pour Steam et y copier l'application Steam fournie par Valve.

$ hdiutil attach Steam.sparsebundle
/dev/disk4          	GUID_partition_scheme          	
/dev/disk4s1        	EFI                            	
/dev/disk4s2        	Apple_HFS                      	/Volumes/Steam

On constate ici que notre image disque a été montée dans /Volumes/Steam; elle apparait d'ailleurs sur le bureau. Il suffit maintenant de copier l'application Steam de Valve dans cette image disque.

Adapter le compte utilisateur pour faire fonctionner Steam

Le principe est de stocker dans notre image disque tout ce qui a trait à Steam, et d'utiliser des liens pour maintenir les chemins d'accès.

$ mkdir /Volumes/Steam/Application\ Support
$ mkdir /Volumes/Steam/Steam\ Content

$ ln -s /Volumes/Steam/Application\ Support ~/Library/Application\ Support/Steam
$ ln -s /Volumes/Steam/Steam\ Content ~/Documents/Steam\ Content

Il ne reste plus qu'à synchroniser le tout et à refermer.

$ sync
$ hdiutil detach /Volumes/Steam
"disk4" unmounted.
"disk4" ejected.

Jouer !

Pour utiliser Steam, il suffit de monter l'image disque (en double cliquant dessus, par exemple), puis de lancer l'application.

mercredi 17 juin 2009

Collection d'extensions pour Firefox ayant pour but de renforcer sa vie privée sur le web

La fondation Mozilla propose désormais aux utilisateurs de créer, partager et de collaborer sur des « collections ». Une collection est un ensemble d'extensions, de thèmes et de greffons qui étendent les fonctionnalités d'un logiciel; dans notre cas, il s'agit du navigateur web Firefox mais cela concerne également Thunderbird.

Pour utiliser les collections, il est au préalable nécessaire d'équiper Firefox de l'extension Add-on Collector.

La collection « Protection Vie Privée »

J'ai créé une collection dédiée à la protection de la vie privée sur le web, qui contient les extensions suivantes :

  1. Get jetable mail : Permet de générer à la volée des alias mail qui expirent automatiquement.
  2. CustomizeGoogle : Permet de filtrer les publicités et cookies de Google.
  3. Torbutton : Permet de basculer simplement sur TOR+privoxy durant la navigation web. Aide à la configuration de Firefox pour une navigation protégée.
  4. BetterPrivacy : Permet la gestion des cookies de Flash, autrement inaccessibles.
  5. Adblock Plus : Permet de filtrer les publicités, soit directement, soit en s'abonnant à des listes de règles prédéfinies.
  6. Adblock Plus: Element Hiding Helper : Permet d'ajouter simplement des filtres à la liste d'Adblock Plus, en créant des règles optimisées.
  7. BugMeNot : Permet la navigation anonyme sur des sites demandant une identification.
  8. FoxyProxy : Permet de passer automatiquement par des proxies prédéfinis par listes ou motifs lors de la navigation web.
  9. User Agent Switcher : Permet de changer à la volée l'identification de votre navigateur web.

Le but de cette collection « Protection Vie Privée » est d'apporter à l'utilisateur un ensemble cohérent d'outils, simples à utiliser, qui lui permettrons de protéger sa vie privée durant son utilisation du web : filtrage des cookies insidieux, des publicités envahissantes (et traçant les profils), gestion automatique des proxies, email jetable contre le SPAM, etc.

Un avantage secondaire des collections est la simplicité pour déployer des configurations standards: en installant une collection contenant les extensions à utiliser, on diminue le nombre de manipulations à faire, et la mise à jour de chaque élément est automatisée via l'administrateur de la collection qui décide quelle version employer.

Je discute avec des utilisateurs a priori avancés dans l'utilisation du web sur les forums Ubuntu-fr afin d'obtenir des retours sur cette collection orientée grand public.

Retours sur la collection « Protection Vie Privée »

La principale remarque est l'absence de l'extension NoScript.

C'est une remarque intéressante, qui s'inscrit dans un contexte plus large. Il y a plusieurs discussions sérieuses sur la pertinence ou non de mettre l'utilisateur grand public sur un Firefox avec NoScript. Cela va plus loin que le simple fait de « bloquer la publicité » ou de « protéger l'utilisateur ». J'expose ici simplement les 4 arguments majeurs qui soutiennent que NoScript n'est pas adapté au grand public :

  1. Impact d'usage. L'extension a un impact très fort sur le web. Énormément de sites populaires s'appuient sur des scripts pour construire leurs interfaces dynamiques. Bloquer ces scripts revient alors à fortement dégrader l'expérience de l'utilisateur sur ce genre de site;
  2. Utilisation contraignante. Il faut identifier puis catégoriser les sites web et les scripts qu'ils comportent. C'est un processus long, complexe et agaçant pour l'utilisateur qui est engagé dans une simple démarche d'utilisation;
  3. Efficacité contestée. Le renforcement de la sécurité est fortement contestable, car sans démarche active il est difficile de proposer une couverture fiable des techniques d'attaque. À moins de désactiver entièrement les scripts, mais là on retombe sur le point 1;
  4. Fonctionnalités déjà disponibles. Adblock Plus permet le blocage des scripts externes (et aussi internes, mais moins facilement) aux pages. Via les listes d'inscription, un filtrage des scripts publicitaires est déjà mis en place pour l'utilisateur.

Bonus : la collection « Utilisation courante du web »

J'ai également créé une collection Utilisation courante du web qui apporte un ensemble d'extensions utiles au quotidien pour la navigation web. On peut considérer cette collection comme un « kit de base » permettant une utilisation confortable du web.

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 13 février 2009

Mise à jour de MacOS X Serveur en ligne de commande

Il est possible de mettre à jour MacOS par la ligne de commande, de façon à, par exemple, intervenir à distance sur une machine par SSH. On utilise pour cela la commande softwareupdate depuis un compte ayant les droits d'administration.

L'outil de mise à jour : softwareupdate

Si on les compare à d'autres outils comme apt de Debian, les possibilités de softwareupdate sont fortement limitées. Mais en compensation, il ne faut pas oublier qu'Apple prend en charge via des scripts les différents changements à apporter au système, donc le travail de l'administrateur système est simplifié.

D'ailleurs, softwareupdate ne permet de réaliser que des mises à jour du système, et rien d'autre : pas d'ajout ou de suppression de logiciels, de choix de version, etc. Pour ce genre de chose, on se tournera plutôt vers l'outil installer (man 8 installer)

La commande softwareupdate fonctionne de la façon suivante :

$ sudo softwareupdate --help
usage: softwareupdate <mode> [<args> ...]

        -l | --list             List all appropriate updates
        -d | --download         Download Only
        -i | --install          Install
                <label> ...     specific updates
                -a | --all              all appropriate updates
                -r | --recommended      only recommended updates

        Per-user preferences:
        --ignore <label> ...    Ignore specific updates
        --reset-ignored         Clear all ignored updates
        --schedule (on | off)   Set automatic checking

        -h | --help     Print this help

Le manuel (man 8 softwareupdate) contient également des précisions, avec des exemples simplifiés d'utilisation de la commande.

On constate donc que les possibilités se résument à lister les mises à jour disponibles, et à les installer individuellement ou collectivement. Simple, mais fonctionnel.

Exemple d'utilisation

Pour illustrer l'utilisation de softwareupdate, nous réaliserons la mise à jour de MacOS X Serveur, le vendredi 13 février 2009.

$ sudo softwareupdate -l
Software Update Tool
Copyright 2002-2007 Apple

Software Update found the following new or updated software:
   * JavaForMacOSX10.5Update3-1.0
        Java Update 3 pour Mac OS X 10.5 (1.0), 2959K [recommended]
   * SecUpdSrvr2009-001-1.0
        Security Update 2009-001 (1.0), 48400K [recommended] [restart]

Nous demandons l'installation (-i) de toutes les mises à jour disponibles (-a).

$ sudo softwareupdate -i -a
Software Update Tool
Copyright 2002-2007 Apple


Downloading Java Update 3 pour Mac OS X 10.5    0..20..40..60..80..100
Verifying Java Update 3 pour Mac OS X 10.5
waiting Java Update 3 pour Mac OS X 10.5
Downloading Security Update 2009-001    0.
Verifying Security Update 2009-001
Downloading Security Update 2009-001    0..20..40..60..80..100
Verifying Security Update 2009-001
waiting Security Update 2009-001
Installing Java Update 3 pour Mac OS X 10.5     0..20..40..60..80..100
Done Java Update 3 pour Mac OS X 10.5
Installing Security Update 2009-001     0..20..40..60..80..100
Done Security Update 2009-001
Done.

You have installed one or more updates that requires that you restart your
computer.  Please restart immediately.

il ne reste plus qu'à relancer les services utilisant les composants mis à jour (si on les connaît...), ou redémarrer le serveur (qui est souvent ennuyeux pour un serveur). Apple doit donc apporter des améliorations sur cet aspect.

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é.

- page 1 de 2