Est-il possible de compiler un Darwin Distro à partir des sources, comme vous pouvez construire un Distro Linux?

42

J'ai lu et entrepris Linux From Scratch (et BLFS) et je me demandais, puis-je suivre ce guide pour créer un Darwin Distro en remplaçant le xnunoyau? Le processus serait-il très différent de celui décrit dans l'EPA?

Ma compréhension actuelle est que tout ce qui serait nécessaire pour rendre le système "Darwin" plutôt que "Linux" serait la substitution du noyau. Est-ce correct?


MODIFIER:

En réponse au commentaire de killermist, je vais affiner cette question. Bien que je recherche des informations sur ce sujet en général, ce que je recherche précisément, c’est quelque chose comme un " Guide de création Darwin Distro ", un peu comme le LFS est un " Guide de création Distro Linux ".

Je suis conscient que de telles informations ne proviendront probablement que des personnes de Puredarwin , OpenDarwin ou GNU / Darwin . C’est donc un appel à leur aide. Un guide " Comment-nous-avons-fait-PureDarwin-Nano-Start-To-Finish " comme LFS serait parfait, mais je sais que cela demande beaucoup.

Éphémère
la source
3
Il vaut probablement la peine de regarder puredarwin pour voir comment construire une distribution basée sur darwin (et les problèmes auxquels ils et opendarwin ont été confrontés)
Journeyman Geek
1
Les deux noyaux se ressemblent beaucoup, mais le logiciel utilisé pour gérer le noyau et le logiciel qui y est intimement impliqué (y compris la libc) sont très différents. La documentation de LFS ne sera pas d'une grande aide dans cette première étape critique. Peut-être que commencer (ou au moins étudier) la branche kFreeBSD de Debian est plus pertinent.
vonbrand le
1
Astuce: Si vous faites une question sur ce que vous essayez de faire, vous augmentez vos chances de trouver un succès dans des questions déjà existantes, mais vous augmentez également la probabilité que cela attirera plus de gens avec des idées de réponses à la question. . Au lieu d'être confus quelle est la question. Juste une pensée.
Killermist
1
Darwin est quelque peu basé sur BSD, qui est différent de Linux. La manière de faire de BSD diffère de celle du noyau (préférences du système de fichiers, structure des répertoires, politique de mise à niveau, etc.).
Vesperto
2
Être compatible binaire n'est pas la même chose, j'ai bien peur. @Vesperto a raison, Darwin est plus étroitement lié à la famille BSD qu'à Linux; bien qu'avec un noyau nettement différent des autres BSD. Je pense que vous auriez plus de chance de trouver un guide de type BFS que pour un guide basé sur LFS. Le manuel BSD serait une autre bonne source de référence. Vous devez toujours utiliser vos références Darwin pour obtenir des informations pertinentes.
Jerry W Jackson

Réponses:

32

Mise à jour du 19 avril 2015:

Après deux ans, l’intérêt pour ce domaine semble encore très faible. Cependant, la communauté Hackintosh est toujours très active, ce qui signifie que l’un des rares chargeurs de démarrage non-Apple open source capable de démarrer xnu (Chameleon and forks) est toujours maintenu et peut démarrer Yosemite. Il existe également des exemples de réussite démarrant OS X Yosemite dans QEMU. De plus, grâce à un développeur (maintenant employé de Apple) qui suit le Winocm , nous avons un port ARM du noyau xnu . Elle a été le développeur le plus actif que je connaisse dans ce domaine.

Une suite à Mac OS X Internals d' Amit Singh sera bientôt disponible. Je n'aime généralement pas parler des pages personnelles des gens; cependant, le serveur de blog avec toutes les informations semble être un peu peu fiable, alors consultez la boîte d’informations sur la page Twitter d’ameaijou .

J'ai réussi à construire la chaîne d'outils de développement d'Apple (un auto-hébergeur, mais le "SDK Darwin" a également été porté sur Linux ). Je pense qu’un système d’exploitation Darwin est peut-être encore possible de créer à partir de rien. Il ne manque que quelques Kexts open-source. Surveillez cet espace, et si vous savez susciter l'intérêt, faites le moi savoir! :)


Réponses courtes à cette question:

Techniquement: oui

Pratiquement: non *

Avec des astuces binaires: Probablement, mais aussi non légal (non testé)

Avec les astuces binaires pour le matériel générique: Comme ci-dessus (non testé)

* sauf si vous travaillez chez Apple (* efface la gorge en direction générale de la Californie *)


Réponse plus longue:

Cela va être assez long. Je suggère du café. Si vous n'avez pas le temps ni l'envie de tout lire, vous pouvez passer à "Remarques finales".

Pratiquement possible (non):

Malheureusement, Apple a retiré le code source de trop nombreux fichiers KEXT et binaires nécessaires à Darwin pour permettre la compilation d'un système d'exploitation Darwin à partir de la source. C'est toujours techniquement possible (vous pouvez écrire vous-même la source pour la 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 participatif soit très intéressée).

Sans surprise, le point décisif a été la publication de Darwin 10, qui a introduit xnu dans x86_64-land. La plupart des sources nécessaires existaient avant, mais elles n'étaient que x86. Au fil du temps, le sens du terme "Open Source" d’Apple semble être passé à "Open Source sur le matériel Apple uniquement", car les KEXT d’Apple sont désormais spécifiques au matériel, de sorte que même si vous pouviez tout obtenir En cours d'exécution (voir ci-dessous), vous seriez toujours limité 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 réalisée sans créer réellement 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 KEXT et le chargeur de démarrage. J'ai toutefois réussi à résoudre le problème du chargeur de démarrage (du moins pour le matériel Apple).

Si cela vous intéresse, voici un aperçu complet de ce que vous devrez faire:

  • Effacez une partition (8 Go ou plus de préférence) sur un lecteur (interne ou externe - peu importe) et formatez-la en tant que Mac OS étendu (journalisé) (HFS +).
  • Assurez-vous qu'il dispose d'une table GPT (GUID Partition Table) et que, lorsque vous le faites, il dispose d'une partition EFI. Le moyen le plus simple de procéder consiste à utiliser l'Utilitaire de disque d'Apple, mais vous pouvez le faire en ligne de commande si vous le souhaitez (des didacticiels sont également disponibles sur la procédure à suivre). 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

    Médias en lecture seule: Non

    Volume en lecture seule: Non

  • Maintenant, suivez le guide de l’EPA (avec adaptations).

  • Insérer (en utilisant le point de montage réel, évidemment) dans etDFS=/Volumes/DarwinOS.bashrc.bash_profile

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

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

    sudo su -
    
  • Créez le répertoire des sources et définissez 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 faites-en un lien symbolique afin que nous puissions l'ajouter facilement à $ PATH plus tard (toujours en rootcours):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • Téléchargez la source de tous les paquets que vous voulez. C'est bien sûr où vous êtes bloqué. Tous les nécessaires ne sont pas là. (Incidemment, je préfère binutilsquand même GNU .)

En supposant que vous puissiez télécharger tous ceux dont vous avez besoin, poursuivons.

  • Créez 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 configurer manuellement le nouvel utilisateur de homedir 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
    
  • S'identifier:

    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
    
  • Maintenant, lancez la commande suivante (voir LFS pour savoir ce qu’il 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
    
  • GCC /configureest assez flexible. Essayez de rechercher le *-modèle ou exécutez-le simplement gcc -vpour voir comment votre ordinateur hôte a été configuré et copiez-le.

  • Déconnectez-vous maintenant de l'utilisateur lfs et reconnectez-vous. Vous devriez maintenant avoir un environnement propre.
  • Tout se passe désormais à l'intérieur de l'utilisateur lfs. Vous remarquerez que j'étais légèrement paresseux en ne convertissant que la moitié des symboles "LFS" en symboles "DFS". Désolé, mais vous avez l’idée.

Bon, passons maintenant à la section hypothétique.

À partir de là, il s'agira plutôt d'une procédure standard de LFS: extraire des sources, construire, installer, tester, supprimer des sources. Notez que les 2 passes de binutils, GCC et Glibc sont toujours nécessaires MAIS vous devez AUSSI avoir une copie de travail de libc++.1.dylib- et vous devrez le faire aussi en 2 passes. Vous pouvez voir la page libcxx du projet LLVM pour plus de détails. Une fois compilé, vous pouvez le mettre en /usr/libpo Vous devrez compiler et installer le noyau xnu (il existe quelques tutoriels sur le Web expliquant comment le faire), puis installer les fichiers KEXT. Même si tous les fichiers KEXT requis étaient disponibles, vous auriez quand même besoin de les insérer manuellement dans le package .kext. Là encore, il existe des tutoriels sur la création manuelle d'un fichier KEXT sur la ligne de commande.

Le dernier bit rend 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 réalité, l'emplacement pour bénir ne fait pas vraiment une différence. Ce dossier est juste au standard Apple.

Dans tous les cas, en supposant que le noyau et kexts étaient dans les bons endroits, vous aviez copies propres de dyld, launchd, etc en place et boot.efifonctionnait correctement, le système devrait fonctionner et de démarrage!

Notez que si vous le vouliez vraiment, vous pourriez exécuter un faux - launchdc'est juste un script pour lancer une invite bash - c'est ce que fait PureDarwin Nano .

Encore une fois, par tous les moyens, écrire les kexts et les binaires vous - même si vous aimez - il est techniquement possible. Appelez-moi quand vous avez fini.


Avec des astuces binaires: Probablement, mais aussi non légal (non testé)

Alors, pourquoi ne pouvez-vous pas extraire les fichiers binaires, les fichiers KEXT et les fichiers requis de Mountain Lion, bénir le volume et partir? Eh bien, vous pouvez probablement. Mais vous avez également besoin d'une licence pour le faire. De plus, si vous faites cela, vous venez essentiellement de faire une copie de Mountain Lion. N'est-ce pas en quelque sorte la question?

Avec les astuces binaires pour le matériel générique: Comme ci-dessus (non testé)

Ce à peu près est le projet OSx86. Encore une fois, vous rencontrez assez rapidement des problèmes juridiques. Il ne fait aucun doute que ces deux dernières méthodes sont tout à fait possibles - le fait de pouvoir utiliser Mountain Lion sur du matériel générique en est la preuve -, mais le but de cette opération était de pouvoir légitimement compiler votre propre système d'exploitation Darwin à partir de la source.


Note latérale

Vous avez peut-être remarqué que j'ai délibérément évité quoi que ce soit en 32 bits. Dans un monde où chaque système d'exploitation majeur est disponible en 64 bits, la compilation d'un système 32 bits n'a pas beaucoup de sens. Apple a effectivement fourni des images de disque de Darwin (jusqu'à Darwin 9) ici . Ils ont parfaitement fonctionné sur ma machine Windows.

Remarques finales

Je suppose qu'en fin de compte, les gens n'achètent pas de Mac pour Darwin, ils achètent un Mac pour Aqua. En conséquence, la prise en charge de Darwin en tant que produit autonome à source ouverte a progressivement diminué au point de devenir un simple geste symbolique de la part de la communauté des sources ouvertes. L’autre fait un peu ironique est que, pour en apprendre beaucoup sur ce sujet, vous devez vous lancer directement dans le projet OSx86, qui n’est pas sanctionné (pour le dire en termes clairs). Même dans ce cas, il n’ya pas beaucoup d’information disponible. 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 xnu.

Cette année de travail a été extrêmement instructive et je suis presque aussi heureux de savoir le faire que je le ferais réellement. Cependant, je vais devoir arrêter de travailler à un moment donné et le moment est venu. Pour finir, crie-t-il à Apple, serait-ce trop demander d’avoir une version de plus de Darwin lors de la sortie de Mavericks?

Éphémère
la source
1

De toute évidence, vous avez reconnu que la LFS était destinée à Linux et que Darwin était très différent de la LFS Linux appliquée. Il est donc simple de dépasser les efforts que vous déployez pour appliquer la LFS aux systèmes Darwin.

De nombreuses communautés tentent de remplacer / améliorer les systèmes Darwin. Alors que le projet OpenDarwin n’a pas beaucoup de succès, devinez que le code d’Apple est trop difficile, alors qu’il reste encore un projet PureDarwin:
PureDarwin SourceForge
PureDarwin HomePage

Commencez par obtenir un compte de développeur, saisissez leurs outils de génération, puis suivez la procédure permettant de créer votre propre noyau personnalisé.

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

En réalité, tout ce que vous avez à faire est de coller à 100% avec le projet PureDarwin, puis appelez le script suivant: Code Google - Le noyau Pure Darwin Switch avec les images de noyau personnalisées que vous avez créées ira bien.

Mais pour ce qui est de la construction d’un bon noyau Darwin, ce serait une nouvelle question.


la source