Realtek, Bonjour et le 64Bit: les solutions

( 7 Votes )


Avec Leopard, nous avions pris l'habitude de faire fonctionner les très utilisés chipsets RTL8168, RTL8111, RTL8169, RTL8101 de Realtek avec un kext non officiel, RealtekR1000.kext.
Le problème avec ces contrôleurs réseau, bien que vous ayez une connexion internet fonctionnelle, est que le mode "promiscuité" n'est pas activé par défaut, et donc empêche l'utilisation de Bonjour pour le partage AFP avec OSX.

Lors du passage à Snow Leopard, ce kext, dont la dernière mise à jour a été faite par Psystar, ne fonctionnait qu'en mode 32bit, et plus en 64bit.

Une solution existe depuis déjà quelques temps, afin d'activer ce mode via une version modifiée de ifconfig.
La commande terminal afin d'activer cette fonctionnalité (enX correspondant à la localisation de votre carte réseau active):
sudo /chemin-vers-ifconfig-modifié enX promisc (utilisez -promisc pour désactiver le service)
Mais voilà, malgré que l'auteur de cette version de ifconfig pour Snow Leopard ait posté un Launch Daemon avec ifconfig afin de lancer cette commande, on a eu le droit, particulièrement sur InsanelyMac, à toute une série de solutions plus ou moins farfelues...

Le but de cet article va donc être de faire le point sur "la bonne façon" de lancer un assistant en droit root avec Mac OSx.



1. Launch Daemon


Première manière de lancer un processus "root" au boot, les Launch Daemon se trouve soit dans /System/Library/LaunchDaemons/ ou soit dans /Library/LaunchDaemons/

télécharger ifconfig modifié et le launch Daemon

C'est la solution adoptée par l'auteur du ifconfig modifié. Voici à quoi il ressemble:
<dict>
<key>Label</key>
<string>localhost.setpromisc</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/ifconfig</string>
<string>en0</string>
<string>promisc</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>60</integer>
</dict>
</plist>

- Label: permet l'identification unique de l'agent (c'est aussi le nom du fichier)
- ProgramArguments: Comme son nom l'indique, il s'agit d'un tableau (array) dans lequel sont contenu les instructions (la commande) à exécuter lors de son lancement. Le premier indique le chemin de l'exécutable (ici copié dans /usr/local/bin/ifconfig) puis les arguments que l'on retrouve plus haut (en0 promisc).
- RunAtLoad: indique que l'agent doit se lancer au démarrage du système. Un agent peut également être lancé sur demande.
- StartInterval: indique, dans cet exemple, que la commande sera répétée toutes les 60 secondes. Selon l'auteur, c'est pour empêcher certaines applications (comme VMWare) de modifier à nouveau la configuration de la carte réseau.

Les Launch Daemon sont plutôt simples à mettre en place, il s'agit de fichiers XML qui vont dans l'un des dossiers cités plus haut. Il faut ensuite les rendent exécutables, et les attribuer à root pour que ce dernier exécute la commande avec les bon privilèges.

Et ça, vous devez voir faire faire maintenant ( Le Terminal) :
chmod -R 755 /System/Library/LaunchDaemons/monLaunch
sudo chown - R root:wheel /System/Library/LaunchDaemons/monLaunch

Vous voyez donc qu'il est possible de créer vos propres Daemon pour vos propres besoins. Le lien indispensable:
Documentation Apple sur la création des Launch Daemon (en)


2. Startup Items


Autre manière, sans doute la plus utilisée, de lancer des processus personnalisés root sont les Startut Items.
Les startup items se trouvent soit dans /System/Library/StartupItems/ soit /Library/StartupItems/

La structure d'un starttupItem est un peu différent car elle contient deux fichiers:

- Le dossier/
- L'exécutable
- Le .plist des paramètres (toujours nommé StartupParameters.plist)

Télécharger le Startup Item pour ifconfig/Realtek

l'Exécutable (bonjour64):
#!/bin/sh
. /etc/rc.common

StartService ()
{
ConsoleMessage "Starting bonjour64 promisc"
/usr/local/bin/ifconfig en0 promisc
return 0
}

StopService ()
{
ConsoleMessage "Stopping bonjour64 promisc"
/usr/local/bin/ifconfig en0 -promisc
return 0
}

RestartService ()
{
StopService
StartService
}

RunService "$1"

Il s'agit d'un script bash, qui va permettre de lancer des processus en tous genres (d'autres scripts .sh..etc)
Il se décompose en trois parties:

- StartService (): les commandes définies au lancement de l'Item.
- StopService (): les commandes à exécuter à la fermeture de l'Item
- RestartService (): les commandes à lancer au redémarrage de l'Item


Le plist ( StartupParameters.plist):
{
Description = "Bonjour service";
Provides = (
bonjour64,
);
OrderPreference = Last;
Messages = {
start = "Starting bonjour64 promisc";
stop = "Stopping bonjour64 promisc";
};
}

- Description: donner une description arbitraire de son service
- Provides: le nom de l'exécutable
- OrderPreference: le moment où lancer le service (ici Late, c'est à dire à la fin du boot, afin d'éviter les confits avec un machine virtuelle par exemple)
- Messages: définir les messages qui seront affichés selon les instructions dans l'exécutable

Il existe de nombreuse options et paramètres pour les StartupItems:
Documentation Apple (Anglais)
Pour installer un Startup Item, vous devrez copier le dossier contenant les deux fichier (le dossier devrait avoir le même nom que l'exécutable), et appliquer les mêmes autorisations que pour les Launch Daemond sur le dossier et les fichiers.
Un petit avantage également, l'Item s'affiche dans les Informations Système:





Conclusion


Voilà, j'espère que maintenant vous pourrez utiliser cet ifconfig modifié de la bonne façon.
Le kext RealtekR1000.kext doit être supprimé de votre système avant d'utiliser cette technique.
De plus, il est chaudement recommandé de copier le ifconfig modifié dans un répertoire unix personnel (ici /usr/local/bin/). Ces dossier ne sont pas accessible via finder, faites donc un open /usr avec le terminal pour y avoir accès, vous pourrez ensuite créer vos dossiers.

Vous trouverez ci-dessous un Installateur qui installera directement sur votre machine la Startup Item et le ifconfig. Les changements se feront après un reboot.

Pour vérifier si le tout fonctionne bien, tapez dans le terminal:
ifconfig
Vous devriez obtenir une liste détaillée de vos interfaces réseau. Celle modifiée par la commande devrait contenir PROMISC, comme ceci:
en0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST
Cela signifie que le mode "promiscuité" est bien activé.


Installateur pour ifconfig
Driver officiel Realtek 2.03

 

Commentaires 

 
0 #1 cyberbac 30-10-2009 17:47
Bizarrement sur mon VRAI iMac Core Duo (le 1) ce mode n'existe pas ...
en0: flags=8863 UP,BROADCAST,SM ART,RUNNING,SIM PLEX,MULTICAST mtu 1500Pourtant c'est un vrai Mac et BONJOUR fonctionne .!
Citer
 
 
+1 #2 sonotone 30-10-2009 17:59
Citation en provenance du commentaire précédent de cyberbac :
Bizarrement sur mon VRAI iMac Core Duo (le 1) ce mode n'existe pas ...
en0: flags=8863 UP,BROADCAST,SM ART,RUNNING,SIM PLEX,MULTICAST mtu 1500Pourtant c'est un vrai Mac et BONJOUR fonctionne .!

Oui, en fait ce mode permet de pallier au manque du driver concernant ces Chipsets. Donc ce n'est pas indispensable pour des cartes déjà fonctionnelles, mais forcer son activation permet l'utilisation de Bonjour si ce dernier n'est pas accessible.
Citer
 
 
0 #3 31-10-2009 04:10
ce nouveau RTL1000 fonctionne pour moi pour le chip RTL8111C , il faut passer en manuel pour mettre la connection internet en 1000 BASET

kexts.com/.../...
Citer
 
 
0 #4 Trauma 31-10-2009 16:09
Merci sonotone pour cet article.

je me permets juste d'ajouté que les startupitems permettent de lancer des commandes lors de l'extinction ou du redémarrage de l'ordinateur, contrairement au Lauchd.

J'ajouterais également un très bon logiciel open source pour créer et gérer les "démons" sur votre système: Lingon.

sourceforge.net/projects/lingon/files/
Citer
 
 
0 #5 sonotone 01-11-2009 16:37
Très bon soft, par l'auteur de Smultron d'ailleurs. Bien pratique en tout cas!
Citer
 
 
0 #6 02-11-2009 11:10
Je me permets de donner un lien pour le REALTEK1000.kext compatible SnowLeopard 32 et 64 k et AFP/Bonjour ! (RTL8111,8169 et 8168 chips)

insanelymac.com/.../...

credits: Bit Shoveler et Chuck Fry
Citer
 
 
0 #7 22-12-2009 11:24
J'ai remarqué que sans le mode PROMISC activé, il est impossible d'obtenir une IPV6.
Sans ce mode, une IPV4 est attribuée, mais le support IPV6 n'est pas disponible.

Pour ceux ayant une IPV6, vous pouvez vérifier qu'elle est effective ou non sur go6.net

Cela dit, je suis sous SL 64 bits, sans le RealtekR1000.kext et cela fonctionne (mais le mode PROMISC n'est pas activé par défaut).
J'ai juste activé l'injection de l'Ethernet de Chameleon RC4 et le kext d'Apple suffit.
Citer