Publié le 12 janvier 2023 par Andrew Owen (4 minutes)
J’ai déjà parlé d’UTM. Il s’agit d’un joli wrapper pour QEMU qui vous permet de créer des machines virtuelles ARM et d’émuler des machines non-ARM sur macOS. Il est possible de le télécharger gratuitement depuis le site web, ou de l’obtenir dans l’app store. Mais l’une des fonctionnalités que j’attendais avec impatience est la possibilité d’utiliser Rosetta pour traduire les instructions X64 en instructions ARM64, ce qui est pris en charge dans la dernière version d’UTM sur macOS Ventura. J’espérais pouvoir installer des VM Intel en utilisant Rosetta, mais pour cela il faut toujours utiliser QEMU. Ce que vous pouvez faire, c’est installer une VM ARM Debian, activer Rosetta, puis exécuter des paquets Debian X64 sur cette VM. Cela peut être utile si vous avez besoin d’un paquet particulier qui n’a pas de version ARM native. Jusqu’à présent, je n’ai réussi à faire fonctionner que des paquets, et non des binaires Intel individuels. Il y a aussi une grosse mise en garde:
Il y a un bogue présent dans les machines virtuelles Linux sur Ventura et la puce M1 de base qui provoque une panique aléatoire du noyau et un gel de la machine virtuelle. Malheureusement, cela signifie que les utilisateurs de la puce M1 de base doivent éviter le backend de virtualisation d’Apple jusqu’à ce qu’Apple ou les responsables de Linux fournissent un correctif.
Je travaille sur un M1 Pro, et cela semble bien fonctionner. Après avoir installé UTM, vous aurez besoin de l’installateur Debian Net. Vous devrez également installer Rosetta.
$ set USERNAME=`whoami`
$ su -p
# /usr/sbin/usermod -aG sudo $USERNAME
Après avoir activé sudo pour l’utilisateur par défaut, vous devez redémarrer la machine virtuelle pour que la modification prenne effet.
sudo apt install spice-vdagent
.sudo apt install binfmt-support
.sudo mkdir /media/rosetta
.sudo mount -t virtiofs rosetta /media/rosetta
./etc/fstab
: rosetta /media/rosetta virtiofs ro,nofail 0 0
.sudo / usr / sbin / update - binfmts--install rosetta / media / rosetta / rosetta \
--magic "\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x3e\x00" \
--mask "\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff" \
--credentials yes--preserve no--fix - binary yes
Le paramètre magique décrit les 20 premiers octets de l’en-tête ELF pour les binaires X64. Le noyau Linux effectue un ET logique bit à bit avec les 20 premiers octets de tout binaire que vous essayez d’exécuter avec la valeur du masque. S’il y a une correspondance, il utilise le gestionnaire enregistré pour interpréter le binaire. Dans le cas contraire, il signale une erreur.
7. Activer les paquets X64:
sudo dpkg --add-architecture amd64
sudo apt update
Vous pouvez maintenant installer et exécuter n’importe quel paquet X64 dans le dépôt Debian avec sudo apt install packagename:amd64
.
L’un de ces paquets est WINE, qui vous permettra d’exécuter certains binaires Windows 64 bits. Mais vous devrez également installer WINE32 pour le lancer. Je ne sais pas s’il est possible de convaincre Rosetta d’exécuter également des binaires 32 bits. Il faudra que je fasse des recherches plus approfondies. Vous devrez également activer les paquets X86:
sudo dpkg --add-architecture i386
sudo apt update
Vous pouvez ensuite installer WINE avec:
sudo apt install wine64:amd64
sudo apt install wine32:i386
Pour l’instant, seul l’explorateur de fichiers intégré fonctionne (lancement avec wine64 explorer
). Si je parviens à faire fonctionner les applications 32 bits, j’écrirai un nouvel article à ce sujet.