Accueil > Dossiers > Les Émulateurs > Mettre Mac OS 9 en réseau à travers Qemu ou SheepShaver

Mettre Mac OS 9 en réseau à travers Qemu ou SheepShaver

mardi 27 février 2018, par sky

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 correct. 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 voit 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 miens, 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 anondines, 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 fonctionner 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 les commandes suivantes

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 sur !

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é par 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é. Du coup, contrairement à macOS ou Mac OS X que nous cotoyons 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 fallut 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.

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

A 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. A 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 trouver 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 ...

Un message, un commentaire ?

Forum sur abonnement

Pour participer à ce forum, vous devez vous enregistrer au préalable. Merci d’indiquer ci-dessous l’identifiant personnel qui vous a été fourni. Si vous n’êtes pas enregistré, vous devez vous inscrire.

ConnexionS’inscriremot de passe oublié ?