Cet article est dédié aux utilisateurs avancés, ayant quelques notions et une certaine maitrise du réseau et du terminal.
Continuons notre exploration des capacités de Qemu, avec la mise en réseau de notre Mac OS 9.2.2 fraichement installé, peut-être avec un OpenBios maison. Et pour ceux qui préfère SheepShaver pour l'émulation de leur Mac OS classique et qui ont de bonnes notions, nous verrons aussi comment faire car il s'agit basiquement des mêmes mécaniques.
La solution consiste en la mise en place d'un pont depuis votre Mac hôte vers vos Mac émulés. Une fois mis en place, ces derniers auront accès à l'ensemble de votre réseau local, mais aussi à internet si votre configuration est correcte. Si besoin les autres appareils disponibles sur le réseau auront la capacité de voir vos Mac OS 9.
Seul bémol sur lequel je travaille encore, les Mac émulés ne voient pas le Mac hôte et vice versa, certainement à cause d'une histoire de routage réseau. Ce qui peut être très limitant si votre objectif est, comme le mien, de partager "facilement" des données entre votre Mac et vos Mac OS 9.
Petits détails qui refroidiront peut être certains, il faudra :
- disposer des droits administrateurs
- utiliser une fois de plus le terminal, mais surtout à chaque fois que vous relancerez votre émulateur
- installer un kernel tierce
- laisser tourner les émulateurs en mode administrateur (et leur laisser, potentiellement l'accès à l'ensemble de votre machine)
- éventuellement modifier les droits sur des fichiers du système d'exploitation
Autrement dit, même si les risques sont mesurés et les explications complètes, il ne s'agit pas d'actions anodines et vous les effectuerez à vos risques et périls. Je ne pourrais être responsable d'un plantage plus ou moins violent de votre Mac.
A noter aussi, qu'il faut avoir un macOS en version Montain Lion (10.8) minumum pour mettre en place cette solution. Pour ma part, cela a parfaitement fonctionné sur Sierra (10.12).
Mise en place d'un pont
Pour commencer, il faut installer TunTapOSX, un kernel qui va permettre la connexion du pont à des interfaces réseaux virtuelles.
L'installation se fait automatiquement, il suffit de télécharger le programme et de lancer l'installation du paquet.
C'est ensuite que les choses se corsent !
Ouvrez un terminal et exécutez la commande suivante
ifconfig
pour trouver la connexion réseau utilisée par votre macOS à votre réseau local, c'est à dire celle qui contient votre adresse IP. Si vous êtes cablé, cela sera certainement en0 (attention sur les Mac Pro, avec les deux cartes réseaux internes, il se peut que ce soit en1 qui soit utilisé), si vous êtes en wifi, cela sera plutôt wlan0. Dans tous les cas, il est nécessaire de regarder pour être sûr !
Puis créons le pont
sudo ifconfig bridge0 create
attachons lui notre connexion (remplacez en0 par la connexion que vous avez trouvé dans ifconfig)
sudo ifconfig bridge0 addm en0
et enfin activons cette connexion réseau un peu particulière :
sudo ifconfig bridge0 up
Votre pont est désormais en place et en attente de liaison(s).
Gardez cet onglet/fenêtre du terminal de côté, car nous allons en avoir besoin un peu plus tard.
Configuration du réseau sur Qemu
Pour activer le réseau sur Qemu, il faut compléter la ligne de commande qui sert à lancer l'émulateur pour indiquer la prise en charge du réseau.
Ouvrez un nouvel onglet pour lancer Qemu, avec un petit ajout à faire à la commande habituelle :
-netdev tap,id=network01,script=no,downscript=no -device sungem,netdev=network01
Malheureusement pour moi, la prise en charge de la carte réseau "sungem" n'a pas fonctionné, j'ai donc continué en utilisant une carte réseau Realtek 8139, certainement la carte réseau la plus compatible de l'époque, mais qui nécessite l'ajout d'un driver dans Mac OS 9.
Pour cela il faut télécharger le driver sur le site de Realtek qui propose toujours son driver pour Mac OS 9.
Et l'ajouter à Mac OS 9, il s'agit d'une simple extension à activer.
Une fois la carte prise en charge dans Mac OS 9, vous pouvez éteindre le Mac émulé et nous allons le relancer avec le support du réseau. Pour cela il faut ajouter
-netdev tap,id=network01,script=no,downscript=no -device rtl8139,netdev=network01
à notre commande de lancement.
Mais surtout, quelque soit la carte virtuelle utilisée, il faut lancer notre commande avec sudo, afin que Qemu puisse accéder aux connexions virtuelles tap.
Dans mon cas, la commande sera donc (avec l'openbios et le réseau)
sudo qemu-system-ppc -bios openbios-qemu.elf -L pc-bios -boot c -m 512 -M mac99 -prom-env "auto-boot?=true" -prom-env "boot-args=-v" -prom-env "vga-ndrv?=true" -drive file=MacOS9-fr.img,format=raw,media=disk -drive file=Shared.img,format=raw,media=disk -device usb-mouse -device usb-kbd -netdev tap,id=network01,script=no,downscript=no -device rtl8139,netdev=network01
et va donc demander un mot de passe administrateur pour continuer.
Une fois l'émulateur lancé avec ce petit ajout dédié au réseau, il faut retourner sur notre premier terminal, pour initier la connexion entre le pont et la connexion virtuelle :
sudo ifconfig bridge0 addm tap0
Une fois Mac OS 9 lancé, il faut aller dans le tableau de bord TCP/IP pour effectuer sa configuration réseau. Si vous disposez d'un serveur DHCP actif, comme votre box internet dans sa configuration par défaut, votre Mac émulé devrait obtenir une adresse IP automatiquement, sinon il faudra le configurer manuellement comme dans la capture d'écran ci dessous.
Pour vérifier que cela fonctionne, je lance Internet Explorer 5.0b1, le navigateur fourni avec ma version de Mac OS 9.2.2.
J'ai bien accès à internet. Bien sur cela n'a aucun intérêt, car le navigateur est complètement dépassé et n'affiche plus aucun site proprement. Pire, dès qu'il y a du HTTPS, la connexion est tout simplement impossible car il ne dispose pas des dernières technologies en terme de sécurité et sa base de certificats est plus qu'obsolète.
J'ai tout de même pu lancé MECL, un site que j'ai réalisé il y a très longtemps et n'utilisant pas forcément toutes les dernières technologies.
Par défaut, avec la commande indiquée, Qemu va utiliser l'interface tap0 mais il est possible d'utiliser une autre interface, en ajoutant un paramètre supplémentaire, par exemple, pour utiliser l'interface 2
-netdev tap,id=network01,ifname=tap2,script=no,downscript=no -device rtl8139,netdev=network01
Cette modification devient utile lorsque l'on souhaite lancer plusieurs instances de QEMU, il faudra penser à leur attribuer des interfaces différentes, ainsi qu'une adresse MAC différente sur le device
-netdev tap,id=network01,ifname=tap2,script=no,downscript=no -device rtl8139,netdev=network01,mac=52:54:00:12:34:66
A savoir, l'adresse MAC utilisée par défaut est 52:54:00:12:34:56.
Enfin, autre astuce, il est possible de monter automatiquement la connexion, en indiquant un script qui s'en occupera automatiquement.
Dans un fichier au format texte brut nommé tapup.sh, écrivez
#!/bin/sh
ifconfig bridge0 addm $1
et enregistrez le à côté de votre image disque.
De la même manière, on écrit le script tapdown.sh permettant de démonter automatiquement la connexion
#!/bin/sh
ifconfig bridge0 deletem $1
Il ne reste plus qu'à les indiquer dans notre commande
-netdev tap,id=network01,ifname=tap0,script=tapup.sh,downscript=tapdown.sh -device rtl8139,netdev=network01
Ainsi vous n'avez plus besoin de manuellement lancer la connexion.
Vérification de l'accès au réseau
Comme moi, vous l'avez certainement oublié, mais Mac OS 9 n'était pas forcément taillé pour le réseau. Il s'agissait d'un OS conçu pour une utilisation locale sur lequel une couche de gestion réseau avait été rajoutée. Du coup, contrairement à macOS ou Mac OS X que nous côtoyons depuis maintenant des années, Mac OS 9 ne disposait pas de tous les outils permettant de vérifier le bon fonctionnement du réseau.
Pour cela, il a fallu fouiller Internet pour retrouver quelques antiquités qui, malgré leur âge, vont tout de même nous servir.
Et c'est sur le site de Sustworks que j'ai pu trouver mon bonheur avec un logiciel nommé IPNetMonitor fonctionnant avec Mac OS 7.6 jusqu'aux dernières versions de Mac OS 9.
Une fois transféré et installé sur Mac OS 9, je lance un "Address Scan" sur l'ensemble de mon réseau local. Avec pour résultat, comme je vous le disais en introduction de voir l'ensemble du réseau local, excepté le macOS hôte qui reste malheureusement silencieux.
Après avoir lancé les "Address scan" sur les deux machines virtuelles, je suis allée sur la Retropie, qui est finalement un Linux avec une interface dédiée pour voir le résultat :
pi@retropie:~/RetroPie/roms $ arp -a
? (192.168.1.254) at 00:07:cb:b1:2a:f8 [ether] on wlan0
? (192.168.1.28) at 52:54:00:12:34:56 [ether] on wlan0
? (192.168.1.3) at 00:25:00:ee:2e:98 [ether] on wlan0
? (192.168.1.29) at fe:fd:00:00:5d:0f [ether] on wlan0
La Pie voit très bien dans l'ordre, le routeur, Mac OS 9.2.2 sur QEMU, mon Mac sous macOS et Mac OS 9.0.4 sur SheepShaver.
Configuration du réseau sur SheepShaver
Comme je suis têtu, je voulais vérifier ce comportement très spécial du mode "pont". Je me suis lancé dans la configuration du réseau sur SheepShaver même si cela est moins utile puisque que nous avons accès à un dossier partagé qui permet de transférer plus facilement les données depuis le Mac principal vers Mac OS 9.0.4.
La solution "officielle" est, comme pour Qemu, de lancer SheepShaver en ligne de commande, préfixé avec sudo, afin qu'il puisse accéder à l'interface tap.
Le principal prérequis est que les chemins vers les fichiers du disque principal, du dossier/disque partagé et de la rom soient en absolu dans le fichier de configuration de SheepShaver. Ainsi peut importe le dossier dans lequel vous vous trouvez (dans le terminal) lorsque vous lancez la commande, SheepShaver retrouvera toujours ses petits.
Aussi, toujours dans le fichier de configuration, il faut indiquer la connexion au réseau sur une interface tap. Afin de ne pas faire d'interférence avec la connexion de Qemu, je choisi l'interface tap1
ether tap1
Puis je lance la commande telle qu'énoncée dans la documentation
sudo /Applications/Emulation/SheepShaver/SheepShaver.app/Contents/MacOS/SheepShaver & sleep 10
ou vous prendrez soin de remplacer mon chemin vers l'application SheepShaver vers votre chemin.
Malheureusement pour moi, le résultat n'est pas le bon, avec un résultat plus qu'explicite :
zsh: killed sudo
… et rien d'autre. Si cela fonctionne chez vous, inutile de passer par le même hack que moi.
En effet, si SheepShaver n'arrive pas à démarrer en mode admin pour accéder à la connexion, nous allons "déprotéger" la connexion, en changeant ses permissions pour que SheepShaver puisse y accéder.
sudo chmod 0666 /dev/tap1
Ainsi je peux démarrer l'application SheepShaver, tout simplement en double-cliquant sur son icône et ce dernier devrait avoir accès à la connexion virtuelle.
À noter que cette astuce fonctionne aussi avec Qemu, permettant de ne pas le lancer en mode administrateur. Attention tout de même, car je ne suis pas sûr des implications que cette modification pourrait avoir sur le système mais aussi la sécurité de ce dernier.
Une fois SheepShaver lancé, je retourne sur mon premier terminal afin de connecter l'interface réseau virtuelle au pont
sudo ifconfig bridge0 addm tap1
Comme pour Qemu, il faut ensuite configurer Mac OS 9.0.4 dans TCP/IP.
Les résultats sont strictement les mêmes, ici avec l'ancêtre de Firefox, Mozilla 1.1. Il est possible d'accéder à internet sur des sites n'utilisant pas SSL et un affichage à l'ancienne.
Il est possible de voir l'intégralité du réseau local, mais impossible de se connecter au mac hôte toujours aussi invisible sur le réseau.
À noter que SheepShaver perd un peu en stabilité une fois le réseau activé. Par exemple, impossible de lancer la dernière version d'Internet Explorer 5.5.
Pour le fun, connexion de l'un à l'autre
Puisque mon but initial était de trouver une solution pour partager les données de macOS vers Mac OS 9.2.2 (Qemu), avec une solution aussi facile que sur SheepShaver(Mac OS 9.0.4), sans avoir à redémarrer Qemu à chaque fois que l'on soutaite transférer un fichier, voici une alternative, pas forcément aussi facile, mais franchement fun !
Rien ne nous empéche de lancer Qemu et SheepShaver en même temps ! Attention juste à la mémoire vive attribuée aux deux machines virtuelles, qu'il vous en reste un peu pour votre macOS.
Démarrons donc nos deux émulateurs et dans le terminal, réactivons les deux connexions au pont, puisque je vous le rappelle, il faut les réactiver à chaque lancement de l'émulateur (avec ou sans scripts).
Maintenant que nous avons nos 2 Mac OS 9 lancés, activons le partage de fichier sur 9.0.4 dans le tableau de bord du même nom, si tout se passe bien et que les extensions nécessaires sont bien disponibles, cela devrait se lancer sans soucis.
Retournons sur 9.2.2, et ouvrons l'Explorateur réseau, et, ho magie, il apparait directement.
Je peux ainsi accéder aux documents de Mac OS 9.0.4 depuis Mac OS 9.2.2. À noter que l'inverse est vrai aussi, il est possible d'activer le partage sur 9.2.2 et d'y accéder sur Mac OS 9.0.4. Malheureusement, il n'est pas possible de partager le disque Unix de Mac 9.0.4, dossier partagé entre macOS et Mac OS 9.0.4 (j'espère que vous suivez toujours).
Cependant, je peux toujours copier les fichiers depuis Unix vers le dossier Partagé sur 9.0.4 et y accéder ensuite depuis 9.2.2, sans avoir à le redémarrer à chaque fois. Un demi-succès !
Nettoyage
Une fois vos émulateurs arrêtés, vous pouvez si vous le souhaitez supprimer le pont créé via la commande
sudo ifconfig bridge0 destroy
Ce pont est normalement concervé ad-vitam, même lors d'un redémarrage et sa présence ne gène en rien, même s'il n'est pas utilisé.
Attention tout de même si d'autres logiciels se servaient de ce pont, ils peuvent être déconnectés aussi.
Mise à jour
Durant l'écriture de l'article, j'ai finalement trouvé comment rendre visible le système hôte et ses invités. Pour cela il suffit d'appliquer une adresse IP à notre pont lui indiquant un nouveau sous-réseau, juste après sa création
sudo ifconfig bridge0 192.168.2.1/24
puis de configurer les Mac OS 9 dans ce nouveau réseau, avec une adresse IP en 192.168.2.xxx. Malheureusement nous avons deux problèmes: Sans configuration du NAT, les Classics perdent l'accès à internet et à tous les autres appareils du réseau local. Second problème, à la tentative de connexion, nous obtenons
ce qui, finalement, ne nous avance pas plus.
La suite au prochain épisode…