Le système d’exploitation Mac OS X descend directement des Unix BSD. Ainsi nous retrouvons sous OS X une architecture système relativement similaire. Les systèmes Unix sont connus pour leur robustesse mais également pour leur grande flexibilité de configuration. Les utilisateurs venant d’autres systèmes Unix ou tout simplement les utilisateurs « curieux » sont alors en droit de vouloir générer leur propre noyau à partir des sources libres du noyau utilisé par OS X : XNU. Cet article a pour but de vous guider pas à pas dans la réalisation de cette tâche encore peu documentée.
Attention : Cet article est fortement déconseillé aux débutants.
Introduction
Le système d’exploitation Mac OS X descend directement des Unix BSD. Ainsi nous retrouvons sous OS X une architecture système relativement similaire. Les systèmes Unix sont connus pour leur robustesse mais également pour leur grande flexibilité de configuration. Les utilisateurs venant d’autres systèmes Unix ou tout simplement les utilisateurs « curieux » sont alors en droit de vouloir générer leur propre noyau à partir des sources libres du noyau utilisé par OS X : XNU. Cet article a pour but de vous guider pas à pas dans la réalisation de cette tâche encore peu documentée.
Note : Il est important de noter que XNU est un noyau qui ne contient lui-même que très peu de pilotes ; ceux-ci sont modulaires et se chargent lorsque le système en a besoin : XNU est un micro noyau. Cependant la recompilation de votre noyau peu vous permettre d’appliquer des patch (peut-être même des patch de votre création). Nous verrons vers la fin de cet article un exemple qui va dans ce sens.
La recompilation et l’activation d’un nouveau noyau ne représente à priori pas de gros risques pour votre système d’exploitation. Cependant une erreur de manipulation peut empêcher votre ordinateur de redémarrer. Il est alors toujours possible de réparer le système grâce au CD de démarrage de MAC OS X (en réparant les permissions via l’Utilitaire de Disques) ou avec le mode target à l’aide d’un second mac. Vous êtes à présent prévenu des risques que peut engendrer ce tutorial ; si vous êtes décidés à vous lancer suivez le guide !
1 - Préparer ses outils
Afin de mener à bien la construction de notre nouveau noyau, il faut récupérer et installer un certain nombre d’outils. Voici les étapes à suivre :
a) Obtenir et installer XCode
Le premier programme à installer s’appelle Xcode. Il s’agit de la suite de développement gratuitement fournie par Apple. Elle est livrée avec tous les CD de Mac OS X Panther, et se trouve sous forme de Package (.pkg) sur les DVD de restauration livrées avec les nouvelle machines. XCode est aussi téléchargeable sous condition de s’inscrire (compte gratuit) sur le site développeur d’Apple.
http://cerberus.sourcefire.com/%7Ejeff/security.html
Par example : BIOCSHDRCMPLT -10.3.3.patch
Maintenant placez le dans le repertoire /usr/local/src, puis depuis le repertoire de xnu appliquez le correctif :
b) Préparer le terrain
Par défaut certains fichiers vont êtres installés et recherchés dans le répertoire /usr/local/bin. Assurez vous que se répertoire existe, sinon créez-le :
- Lancez l’application Terminal (dans le dossier Utilitaires du dossier Applications).
- Tapez la commande suivante :
$ sudo mkdir /usr/local/bin |
Créez un répertoire à l’endroit que vous voulez qui servira à stocker les sources de nos outils ainsi que du noyau (ex : /usr/local/src)
c) Obtenir les paquetages de nos outils
Rendez vous sur la page du projet Darwin et téléchargez les paquetages suivants :
- bootstrap_cmds
- Libstreams
- cctools
- kext-tools
- IOKitUser
- xnu
Prenez ceux correspondant à votre version de Mac OS X (ex 10.3.5)
Note : Pour la suite nous considérerons que tous ces fichiers ont été placés dans /usr/local/src.
d) Décompressez tous les paquetages téléchargés :
$ cd /usr/local/src ; for i in $(ls) ; do tar zxvf $i ; done |
e) Compilation de Libstream
Afin de compiler Libstream vous avez besoin d’un utilitaire appelé relpath, celui-ci est situé dans le répertoire créé lors de la décompression du paquetage bootstrap_cmds. Nous allons donc nous rendre dedans et compiler relpath :
$ cd bootstrap_cmds-version/relpath.tproj |
Rendons nous à présent dans le répertoire du paquetage Libstream et compilons :
$ cd ../Libstreams-version |
f) Compilation de cctools
Avant tout il faut copier un fichier d’entête dans le répertoire du framework du noyau :
$ sudo cp /usr/include/sys/unistd.h /System/Library/Frameworks/Kernel.framework/Headers/sys |
Maintenant rendez-vous dans le répertoire du paquetage cctools et éditez le Makefile de la façon suivante :
Commentez la ligne (ajoutez # au début) : COMMON_SUBDIRS = libstuff as... Et remplacez là par la ligne suivante : COMMON_SUBDIRS = libstuff libmacho misc
A présent compilez de la manière suivante :
$ sudo make RC_OS=macos |
Note : Si la compilation echoue en spécifiant que la commande seg_hack ne peut être trouvée, mettez à jour votre variable d’environnement PATH de la manière suivante :
export PATH=PATH:/usr/local/bin |
e) Activer IOKit
Rendez-vous dans le répertoire /usr/local/src et saisissez :
$ mv IOKitUser-version IOKit |
f) Compilation de kextsymboltool
C’est le plus simple à compiler mais il ne faut pas oublier de copier l’exécutable généré dans /usr/local/bin sans quoi vous ne pourrez finir la compilation de votre futur noyau :
$ cd kext-tools-version |


