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

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

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.

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.

lundi 8 septembre 2008

Manipuler les images disques de MacOS en ligne de commande

Avant-propos

Pour les utilisateurs venant du monde UNIX, il est indispensable de savoir manipuler en ligne de commande les images disques d'Apple. Il en existe de deux sortes : les traditionnelles (avec leur variations : chiffrées, compressées, etc) et les grossissantes.

Les images disques grossissantes sont des images disques ayant une taille maximale définie à la création. Toutefois, uniquement l'espace utilisé est écrit sur le disque, ce qui permet de limiter l'espace occupé.

Concrètement, une telle image se présente sous la forme d'un répertoire IMAGE.sparsebundle contenant une collection de bandes, un index des données et un fichier de métadonnées sur l'image. Il va de soit qu'il est extrêmement déconseillé d'aller trifouiller au petit bonheur la chance à l'intérieur de ces fichiers.

Il est important de se pencher sur la façon dont les volumes et disques sont attachés sous MacOS. Sans entrer dans les détails, on admettra que les disques physiques sont directement (c'est à dire, sans tampon ou couche tierce) accessibles par les nœuds /dev/rdisk*; ils ont leur contrepartie logique sous la forme /dev/disk*.

Une image disque, étant un volume logique, sera attachée sous la forme /dev/diskXsY, comme si elle était un disque dur. X est alors un identifiant du disque, et chaque partition est associée à un identifiant Y. Chaque partition du disque logique peut alors être montée; le point de montage par défaut étant /Volumes/. Il est bien sur possible d'attacher une image disque sans la monter, afin d'utiliser par exemple des outils travaillant sur les blocs.

Également, MacOS associe à chaque image disque une somme de contrôle permettant de tester son intégrité. Par défaut, des tests (parfois longs) sont effectués. À vous de décider si vous voulez les valider ou bien les ignorer.

La syntaxe des exemples suivants est valable pour MacOS Léopard, et peut-être des versions ultérieures (Jaguar, Panthère et Tigre ont connu des évolutions dans la gestion des images disques; sans parler de Puma et Guépard).

Attacher une image disque

Attache le disque en un nœud /dev/disk* et monte le volume dans /Volumes/. Il est possible d'attacher une image disque sans monter son volume en utilisant l'option -nomount. D'autres options comme -nobrowse ou -private marqueront le volume comme n'étant pas utilisable par les applications (ainsi, le Finder ne l'affichera pas) ou ne notifieront pas le système de l'ajout du disque (pas d'indexation SpotLight).

hdiutil attach IMAGE

Démonter une image disque

Démonte un système de fichiers d'une image disque sans libérer ce dernier. Le nœud /dev/disk* est toujours présent mais le système de fichiers n'est plus monté.

hdiutil umount /Volumes/IMAGE

Démonter et détacher une image disque

Démonter le système de fichiers; le nœud du disque logique est supprimé de /dev/disk*,

hdiutil detach /Volumes/IMAGE

Créer une image disque grossissante

Créer une image disque de taille maximale 500 Go, avec un système de fichier en HFS+ journalisé et sensible à la casse :

  • -size 500G : taille maximale de l'image
  • -fs HFSX : système de fichiers HFS+ sensible à la casse
  • -J : utilisation d'un journal pour le système de fichiers
  • -type SPARSEBUNDLE : le type d'image disque
  • -volname "Sauvegardes" : le nom du volume de l'image disque; il sera utilisé comme nom de point de montage par défaut dans /Volumes/
hdiutil create -size 500G -fs HFSX -fsargs -J -type SPARSEBUNDLE -volname "Sauvegardes" Sauvegardes.sparsebundle

Optimiser la taille de l'image disque

Pour une image disque grossissante, il est possible de demander la récupération de l'espace non-utilisé dans les bandes, pour faire ramener sa taille à celle du volume des données qu'elle contient.

hdiutil compact IMAGE

Formater un volume en HFS

Il est tout à fait possible de formater un volume d'une image disque existante. Il suffit d'attacher l'image disque, et de travailler sur les partitions. On peut utiliser les options suivantes :

  • -J : utilisation d'un journal pour le système de fichiers
  • -s : le système de fichier sera sensible à la casse
  • -v Données" : le nom du volume
newfs_hfs -J -s -v "Données" /dev/diskXXXXX

Connaître les opérations possibles sur les images disques

La commande hdiutil ne se limite pas aux simples opérations de montage et démontage de volumes. Elle permet également de convertir, graver, segmenter et d'une façon générale d'effectuer toutes les opérations possibles sur les images disques. La commande en elle-même intègre une documentation extensive, et son manuel contient des exemples concrets.

hdiutil help et plus précisément hdiutil help COMMAND.

Références

mercredi 3 septembre 2008

Problème d'encodage avec Java sous MacOS X Léopard

Sous Léopard, la machine virtuelle java (JVM) d'Apple se lance par défaut avec l'encodage MacRoman. Si choix est compréhensible au vu de l'histoire des technologies d'Apple, il est toutefois de nos jours rendu obsolète avec le passage à l'unicode. Pire, les développeurs et administrateurs systèmes s'attendent désormais à des outils fonctionnant en UTF-8, ce qui pose donc des problèmes d'intégration.

Pour les systèmes GNU/linux, les différentes JVM travaillent avec l'encodage du système qui est désormais l'UTF-8. Mais la JVM d'Apple se comporte différemment, avec un réglage défini en interne.

Faisons quelques essais avec ce jeu de test.

Commençons avec GNU/linux :

$ uname -a
Linux liristpq.Univ-Lyon1.fr 2.6.27-2-generic #1 SMP Thu Aug 28 17:18:43 UTC 2008 x86_64 GNU/linux

$ java GetEncoding 
Random bytes
encoding: UTF8

$ LC_ALL=ASCII java GetEncoding 
Random bytes
encoding: ASCII

Comme on peut le constater, l'utilisation de l'encodage est dynamique, avec par défaut celui du système.

Regardons maintenant ce que cela donne sur Léopard. Nous commençons par lancer la même commande que pour GNU/Linux, et ensuite nous affinerons manuellement l'encodage UTF-8 avec l'option -Dfile.encoding=UTF-8 :

$ uname -a
Darwin arda.local 9.4.0 Darwin Kernel Version 9.4.0: Mon Jun  9 19:30:53 PDT 2008; root:xnu-1228.5.20~1/RELEASE_I386 i386 i386 iMac6,1 Darwin

$ java GetEncoding
Random bytes
encoding: MacRoman

$ java -Dfile.encoding=UTF-8 GetEncoding
Random bytes
encoding: UTF8

$ LC_ALL=ASCII java GetEncoding
Random bytes
encoding: MacRoman

La différence est flagrante. La JVM d'Apple sous Léopard utilise par défaut l'encodage MacRoman et ne supporte pas la sélection par les locales, ce qui pose de réels problèmes d'interopérabilité.

Une solution simple est d'appeler systématiquement la JVM en spécifiant l'encodage UTF-8, mais elle n'est pas idéal.