45 votes

Est-il possible de compiler une distribution Darwin à partir des sources, comme on peut le faire pour une distribution Linux ?

J'ai lu et entrepris Linux à partir de zéro (et BLFS) et je me demandais si je pouvais suivre ce guide pour créer une distro Darwin en remplaçant le fichier xnu noyau ? Le processus serait-il très différent de celui décrit dans le LFS ?

D'après ce que j'ai compris, il suffirait de remplacer le noyau pour que le système devienne "Darwin" plutôt que "Linux". Est-ce exact ?


EDIT:

En réponse au commentaire de killermist, je vais affiner cette question. Bien que je cherche des informations sur ce sujet en général, ce que je cherche plus particulièrement est quelque chose comme un " Guide de création de la distribution Darwin "tout comme le LFS est un " Guide de création d'une distro Linux ".

Je suis conscient que de telles informations ne seront probablement fournies que par les personnes qui viennent de l'extérieur. Puredarwin , OpenDarwin o GNU/Darwin Il s'agit donc en quelque sorte d'un appel à l'aide. A " Comment nous avons fabriqué PureDarwin-Nano - du début à la fin "Un guide comme LFS serait parfait, mais je sais que c'est beaucoup demander.

35voto

MER Points 121

Mise à jour 19 avril 2015 :

Deux ans plus tard, il semble que ce domaine ne suscite toujours pas beaucoup d'intérêt. Cependant, la communauté Hackintosh est toujours très active, ce qui signifie que l'un des rares bootloaders open source non-Apple capable de démarrer xnu (Chameleon et forks) est toujours maintenu et peut démarrer Yosemite. Il existe également des exemples de démarrage réussi d'OS X Yosemite dans QEMU. De plus, grâce à un développeur (maintenant employé par Apple) qui se fait appeler winocm , nous avons un Portage ARM du noyau xnu . Elle a été le développeur le plus actif que je connaisse dans cette région.

Il y a également une suite à Mac OS X Internals d'Amit Singh à venir. D'habitude, je n'aime pas mentionner les pages personnelles des gens ; cependant, le serveur du blog contenant toutes les informations semble ne pas être fiable. de ameaijou Page Twitter.

J'ai réussi à construire la chaîne d'outils de développement d'Apple (un auto-hébergement, cependant le "Darwin SDK" a également été porté sur Linux ). Je pense qu'il est encore possible de construire un système d'exploitation Darwin à partir de zéro - il ne nous manquerait plus que quelques Kexts open-source. Surveillez cet espace, et si vous savez comment susciter l'intérêt, faites-le moi savoir ! :)


Réponses courtes à cette question :

Techniquement : Oui

En pratique : Non*

Avec Binary Cheats : Probablement, mais aussi pas légal (non testé)

Avec Binary Cheats pour le matériel générique : Comme ci-dessus (non testé)

*sauf si vous travaillez chez Apple (*se racle la gorge en direction de la Californie*)


Réponse plus longue :

Cela va être assez long. Je vous conseille de prendre un café. Si vous n'avez pas le temps ou l'envie de tout lire, vous pouvez passer directement aux "Remarques finales".

Pratiquement possible (non) :

Malheureusement, Apple a retiré le code source d'un trop grand nombre de ses produits. Les KEXT nécessaires à Darwin et des binaires pour rendre possible la compilation d'un système d'exploitation Darwin à partir des sources. C'est toujours techniquement possible (vous pourriez écrire le code source vous-même pour le corriger correctement), mais je n'ai tout simplement pas le temps, les compétences ou l'envie de le faire (et je doute que la communauté du financement par la foule soit très intéressée).

Sans surprise, le point de bascule a été la sortie de Darwin 10, qui a permis à xnu d'entrer dans le monde x86_64. La plupart des sources nécessaires existaient déjà avant cette date, mais n'étaient disponibles que pour x86. Au fil du temps, la signification de l'expression "Open Source" d'Apple semble s'être transformée en "Open Source sur le matériel Apple uniquement", car les KEXT d'Apple sont désormais en grande partie spécifiques au matériel, de sorte que même si vous parveniez à tout faire fonctionner (voir ci-dessous), vous seriez toujours confiné au matériel Apple.

Techniquement possible (oui) :

Cependant, tout n'est pas perdu. Le guide LFS s'est avéré utile et il est certain que toute la configuration nécessaire peut être effectuée sans avoir à construire le système d'exploitation Darwin. De plus, les étapes présentées vous donnent une feuille de route presque exacte du chemin à parcourir, moins le noyau, les KEXTs et le bootloader. J'ai cependant réussi à résoudre le problème du bootloader (au moins pour le matériel Apple).

Si vous êtes intéressé, voici un aperçu complet de ce que vous devrez faire :

  • Effacez une partition (8 Go ou plus de préférence) sur un disque (interne ou externe - peu importe) et formatez-la en Mac OS Extended (Journaled) (HFS+).

  • Assurez-vous qu'il dispose d'une table de partition GUID (GPT) et, le cas échéant, d'une partition EFI. La façon la plus simple de procéder est d'utiliser l'Utilitaire de disque d'Apple, mais vous pouvez le faire en ligne de commande si vous le souhaitez (vous trouverez ailleurs des tutoriels sur la façon de procéder). Le point important est que lorsque vous exécutez distil list diskNsM Les informations suivantes doivent être correctes :

    Type de partition : Apple_HFS

    Le système d'exploitation peut être installé : Oui

    Supports en lecture seule : Non

    Volume en lecture seule : Non

  • Il s'agit maintenant de suivre le guide LFS (avec des adaptations).

  • Insérer DFS=/Volumes/_DarwinOS_ (en utilisant le point de montage actuel, évidemment) dans .bashrc y .bash_profile

  • Créez le répertoire de l'utilisateur ( chown à 0:0 à la toute fin) :

    sudo mkdir -v "$DFS"/usr
  • Entrer root :

    sudo su -
  • Créez le répertoire des sources et mettez en place le sticky bit :

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
  • Créez le répertoire tools et créez un lien symbolique vers celui-ci afin de pouvoir l'ajouter facilement à $PATH par la suite (toujours dans root d'ailleurs) :

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
  • Téléchargez les sources de tous les paquets que vous souhaitez. C'est là, bien sûr, que vous vous retrouvez bloqué. Tous ceux qui sont nécessaires ne sont pas là. (Soit dit en passant, je préfère le paquetage de GNU binutils Quoi qu'il en soit.)

En supposant que vous ayez pu télécharger tous ceux dont vous aviez besoin, poursuivons.

  • Créer un utilisateur défavorisé spécifiquement pour DFS (suggéré par LFS) :

    sudo dscl . -create /Users/lfs
    sudo dscl . -create /Users/lfs UserShell /bin/bash
    sudo dscl . -create /Users/lfs RealName "LFS DFS"
    sudo dscl . -create /Users/lfs UniqueID "2070"      # whatever you like
    sudo dscl . -create /Users/lfs PrimaryGroupID 20    # Default 'staff'
    sudo dscl . -create /Users/lfs NFSHomeDirectory /Users/lfs
    sudo dscl . -passwd /Users/lfs dfs          # Again to taste.
  • Notez que vous devez créer manuellement le répertoire d'accueil du nouvel utilisateur sur un Mac :

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
  • Accordez maintenant au nouvel utilisateur l'accès aux sources et aux outils

    sudo chown -v lfs $DFS/tools
    sudo chown -v lfs $DFS/sources
  • Se connecter :

    su - lfs
    Password: dfs
  • Exécutez la commande suivante pour nettoyer l'environnement (à partir de LFS) :

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
  • Exécutez maintenant la commande suivante (voir LFS pour savoir ce qu'elle fait si vous n'êtes pas sûr) :

    cat > ~/.bashrc << "EOF"
    set +h
    umask 022
    DFS=/Volumes/*DarwinOS*     # As previously
    LC_ALL=POSIX
    LFS_TGT=$(uname -m)-dfs-darwin1242  # Look inside gcc/configure for possibilities!
    PATH=/tools/bin:/bin:/usr/bin       # Note symlink from before
    export LFS LC_ALL LFS_TGT PATH
    echo ".bashrc script complete. Environment is ready."
    EOF
  • Le CCG /configure est assez flexible. Essayez d'extraire le code *- ou simplement exécuter gcc -v pour voir comment votre machine hôte a été configurée et copiez-la.

  • Déconnectez-vous de l'utilisateur lfs et reconnectez-vous. Vous devriez maintenant avoir un environnement propre.

  • À partir de maintenant, tout se passe à l'intérieur de l'utilisateur lfs. Vous remarquerez que j'ai été un peu paresseux en ne convertissant que la moitié des symboles 'LFS' en symboles 'DFS'. Je m'en excuse, mais vous avez compris l'idée.

Passons maintenant à la partie hypothétique.

À partir de maintenant, il s'agit d'une procédure standard pour les points de vente au détail : Extraire les sources, construire, installer, tester, supprimer les sources. Notez que les 2 passes de binutils, GCC et Glibc sont toujours nécessaires MAIS vous devez AUSSI avoir une copie fonctionnelle de libc++.1.dylib - et vous devrez également le faire en deux fois. Vous pouvez consulter la page page libcxx pour plus de détails. Une fois compilé, vous pouvez le placer dans /usr/lib . Vous devrez compiler et installer le noyau xnu (il y a une série d'options de compilation). quelques tutoriels sur le web pour savoir comment procéder), puis installer les KEXT. Même si tous les KEXTs nécessaires étaient disponibles, vous devriez les intégrer manuellement dans le paquet .kext. Encore une fois, il y a sont des tutoriels pour savoir comment créer un KEXT à la main sur la ligne de commande.

La dernière étape consiste à rendre le système amorçable. Pour ce faire, vous devez exécuter la commande suivante :

 "$DFS/usr/sbin/bless" --folder "$MOUNT/System/Library/CoreServices" --bootefi --verbose

En fait, le lieu de la bénédiction ne fait pas vraiment de différence. Ce dossier fait partie de la norme Apple.

Dans tous les cas, en supposant que le noyau et les KEXT soient au bon endroit, vous aviez les bonnes copies de dyld , launchd etc. en place et boot.efi fonctionnait correctement, le système devrait fonctionner et être amorçable !

Remarque : si vous le vouliez vraiment, vous pourriez mettre en place un faux launchd qui est juste un script pour lancer une invite bash - c'est ce que PureDarwin Nano ne.

Encore une fois, n'hésitez pas à écrire les KEXTs et les binaires vous-même si vous le souhaitez. est techniquement possible. Appelez-moi quand vous aurez terminé.


Avec Binary Cheats : Probablement, mais aussi pas légal (non testé)

Alors, pourquoi ne pas simplement extraire les binaires, les KEXT et les fichiers nécessaires de Mountain Lion, bénir le volume et partir ? Eh bien, c'est probablement possible. Mais vous avez également besoin d'une licence pour le faire. De plus, si vous faites cela, vous venez de faire une copie de Mountain Lion. N'est-ce pas un peu hors sujet ?

Avec Binary Cheats pour le matériel générique : Comme ci-dessus (non testé)

C'est à peu près est le projet OSx86. Là encore, on se heurte directement à des problèmes juridiques. Il ne fait aucun doute que ces deux dernières méthodes sont tout à fait possibles - le fait que vous puissiez faire fonctionner Mountain Lion sur du matériel générique en est la preuve - mais l'objectif principal était de pouvoir compiler légitimement votre propre système d'exploitation Darwin à partir des sources.


Note de bas de page

Vous avez peut-être remarqué que j'ai délibérément évité tout ce qui est 32 bits. Dans un monde où tous les principaux systèmes d'exploitation sont disponibles en 64 bits, il n'y a pas beaucoup d'intérêt à compiler un système 32 bits. Apple a effectivement fourni des images disques de Darwin (jusqu'à Darwin 9). aquí . Ils ont parfaitement fonctionné sur ma boîte Windows.

Remarques finales

Je pense qu'en fin de compte, les gens n'achètent pas Mac pour Darwin, ils achètent Mac pour Aqua. En conséquence, le soutien à Darwin en tant que produit autonome à code source ouvert a progressivement diminué au point qu'il n'est plus qu'un geste symbolique à l'égard de la communauté à code source ouvert. L'autre fait légèrement ironique est que pour en savoir plus sur tout cela, il faut se lancer dans le projet OSx86, qui n'est pas vraiment sanctionné (pour dire les choses crûment). Même dans ce cas, il n'y a pas beaucoup d'informations disponibles. PureDarwin est un excellent point de départ, et Le livre de Jonathan Levin est une référence inestimable pour tout ce qui concerne le xnu.

Cette année de travail a été extrêmement instructive, et je suis presque aussi heureux de savoir comment faire que de le faire réellement. Il faudra bien que j'arrête de travailler dessus à un moment ou à un autre, et c'est maintenant que ça se passe. En guise de dernier cri futile à Apple, serait-ce trop demander que d'avoir juste une version supplémentaire de Darwin lorsque vous sortirez Mavericks ?

1voto

Manifestement, vous avez reconnu que le LFS est destiné à Linux et que Darwin est très différent du LFS Linux appliqué, de sorte que l'application du LFS aux systèmes Darwin dépasse tout simplement vos efforts individuels.

De nombreuses communautés tentent de remplacer/améliorer les systèmes Darwin. Le projet OpenDarwin n'a pas beaucoup de succès, car le code d'Apple est trop difficile à deviner, tandis qu'il reste un projet PureDarwin :
PureDarwin SourceForge
Page d'accueil de PureDarwin

Obtenez d'abord un compte développeur, utilisez leurs outils de construction, puis vous pourrez suivre les étapes pour créer votre propre noyau personnalisé.

Le noyau Darwin n'a pas la même architecture que le noyau Linux, il ne peut donc pas être remplacé par le noyau Linux, vous devez donc le compiler.

En fait, tout ce que vous avez à faire est de vous en tenir à 100% au projet PureDarwin, puis d'appeler le script suivant : Google Code - Noyau de commutation Darwin pur avec les images de noyau personnalisées que vous avez créées.

Mais en ce qui concerne la construction d'un noyau Darwin fonctionnel, il s'agit d'une nouvelle question.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X