Ist es möglich, eine Darwin-Distribution aus dem Quellcode zu kompilieren, wie Sie eine Linux-Distribution erstellen können?


42

Ich habe Linux From Scratch (und BLFS) durchgelesen und mich gefragt, ob ich dieser Anleitung folgen kann, um eine Darwin Distro durch Ersetzen des xnuKernels zu erstellen . Würde sich der Prozess erheblich von dem in LFS beschriebenen unterscheiden?

Mein gegenwärtiges Verständnis ist, dass alles, was erforderlich wäre, um das System "Darwin" anstatt "Linux" zu machen, die Kernel-Substitution wäre. Ist das richtig?


BEARBEITEN:

Als Antwort auf Killermists Kommentar werde ich diese Frage präzisieren. Während ich allgemein nach Informationen zu diesem Thema suche, ist das, was ich speziell suche, so etwas wie ein " Darwin Distro Creation Guide ", ähnlich wie das LFS ein " Linux Distro Creation Guide ".

Ich schätze, dass solche Informationen wahrscheinlich nur von den Leuten von Puredarwin , OpenDarwin oder GNU / Darwin kommen werden, daher ist dies eine Art Hilferuf an sie. Ein " How-We-Made-PureDarwin-Nano-Start-To-Finish " -Handbuch wie LFS wäre perfekt, aber ich weiß, dass das viel verlangt.


3
Es lohnt sich wahrscheinlich, sich Puredarwin anzuschauen, um zu sehen, was beim Aufbau einer darwin-basierten Distribution anfällt (und mit welchen Problemen sie und Opendarwin konfrontiert waren)
Journeyman Geek

1
Für normale Benutzer sehen beide Kernel sehr ähnlich aus, aber die zur Verwaltung des Kernels verwendete Software und die damit eng verbundene Software (einschließlich libc) sind sehr unterschiedlich. Die LFS-Dokumentation wird in diesen kritischen ersten Schritten keine große Hilfe sein. Vielleicht ist es relevanter, vom kFreeBSD-Zweig von Debian anzufangen (oder zumindest zu studieren).
Vonbrand

1
Tipp: Wenn Sie tatsächlich eine Frage zu dem stellen, was Sie versuchen, erhöhen Sie sowohl die Wahrscheinlichkeit, in bereits vorhandenen Fragen einen Treffer zu finden, als auch die Wahrscheinlichkeit, dass dadurch mehr Menschen mit Ideen zur Beantwortung der Frage angezogen werden . Im Gegensatz dazu, verwirrt zu sein, was die Frage wirklich ist. Nur ein Gedanke.
Killermist

1
Darwin basiert etwas auf BSD, was sich von Linux unterscheidet. Die BSD-Vorgehensweise unterscheidet sich in mehr als nur im Kernel (Dateisystemeinstellungen, Verzeichnisstrukturen, Upgrade-Richtlinien usw.).
vesperto

2
Binärkompatibel zu sein ist leider nicht dasselbe. @Vesperto hat recht, Darwin ist enger mit der BSD-Familie verwandt als mit Linux. allerdings mit einem deutlich anderen Kernel als andere BSDs. Ich denke, Sie hätten mehr Glück bei der Suche nach einem BFS-Leitfaden als nach einem LFS-basierten. Das BSD-Handbuch wäre eine weitere gute Referenzquelle. Sie müssten weiterhin Ihre Darwin-Referenzen für die relevanten Informationen verwenden.
Jerry W Jackson

Antworten:


32

Update 19. April 2015:

Nach zwei Jahren scheint das Interesse an diesem Bereich noch sehr gering zu sein. Die Hackintosh-Community ist jedoch nach wie vor sehr aktiv, was bedeutet, dass einer der wenigen Open-Source-Bootloader, die nicht von Apple stammen und zum Booten von xnu (Chameleon and forks) fähig sind und Yosemite booten können. Es gibt auch Erfolgsgeschichten, die OS X Yosemite innerhalb von QEMU booten. Darüber hinaus haben wir dank eines (jetzt bei Apple angestellten) Entwicklers, der Winocm beherrscht , eine ARM-Portierung des xnu-Kernels . Sie war die aktivste Entwicklerin, die ich in diesem Bereich kenne.

Es gibt auch eine Fortsetzung von Amit Singhs Mac OS X Internals, die bald erscheinen wird. Normalerweise erwähne ich die persönlichen Seiten der Leute nicht gern. Der Blog-Server mit all den Informationen scheint jedoch etwas unzuverlässig zu sein, sehen Sie sich also das Info-Feld auf der Twitter-Seite von ameaijou an .

Ich habe es geschafft, Apples Entwicklungs-Toolchain zu erstellen (ein Selbst-Host, aber das "Darwin SDK" wurde auch auf Linux portiert ). Ich glaube, dass ein Darwin-Betriebssystem möglicherweise noch von Grund auf neu erstellt werden kann - alles, was wir vermissen, sind einige Open-Source-Kexts. Beobachten Sie diesen Bereich und lassen Sie es mich wissen, wenn Sie wissen, wie Sie Interesse wecken können! :)


Kurze Antworten auf diese Frage:

Technisch: ja

Praktisch: Nein *

Mit Binary Cheats: Wahrscheinlich, aber auch nicht legal (ungetestet)

Mit Binary Cheats für generische Hardware: Wie oben (ungetestet)

* es sei denn, Sie arbeiten bei Apple (* räuspert sich in allgemeine Richtung von Kalifornien *)


Längere Antwort:

Das wird ziemlich lange dauern. Ich schlage Kaffee vor. Wenn Sie nicht die Zeit / Lust haben, alles zu lesen, können Sie mit "Abschließende Bemerkungen" fortfahren.

Praktisch möglich (Nein):

Leider hat Apple den Quellcode für zu viele der von Darwin benötigten KEXTs und Binaries zurückgezogen, um die Kompilierung eines Darwin-Betriebssystems nur aus dem Quellcode zu ermöglichen. Es ist technisch immer noch möglich (Sie könnten die Quelle selbst schreiben, um sie richtig zu flicken), aber ich habe einfach nicht die Zeit, die Fähigkeiten oder die Neigung, dies zu tun (und ich bezweifle, dass die Crowdfunding-Community sehr interessiert wäre).

Es ist nicht überraschend, dass der wichtigste Wendepunkt die Veröffentlichung von Darwin 10 war, die xnu in x86_64-land brachte. Die meisten der benötigten Quellen waren bereits vorhanden, es handelte sich jedoch nur um x86. Im Laufe der Zeit scheint sich die Bedeutung von Apples "Open Source" zu "Open Source nur auf Apples Hardware" zu verschieben, da Apples KEXTs nun im Großen und Ganzen hardwarespezifisch sind, selbst wenn Sie alles auf- und abrufen könnten Wenn Sie (siehe unten) ausführen, sind Sie immer noch auf Apple-Hardware beschränkt.

Technisch möglich (Ja):

Es ist jedoch nicht alles verloren. Der LFS-Leitfaden hat sich als nützlich erwiesen, und mit Sicherheit können alle erforderlichen Einstellungen vorgenommen werden, ohne dass das Darwin-Betriebssystem tatsächlich erstellt werden muss. Außerdem erhalten Sie mit den vorgestellten Schritten eine fast exakte Roadmap des vor Ihnen liegenden Pfades, abzüglich des Kernels, der KEXTs und des Bootloaders. Ich habe es jedoch geschafft, das Bootloader-Problem zu lösen (zumindest für Apple-Hardware).

Wenn Sie interessiert sind, finden Sie hier eine vollständige Übersicht über Ihre Aufgaben:

  • Löschen Sie eine Partition (vorzugsweise 8 GB oder mehr) auf einem Laufwerk (intern oder extern - spielt keine Rolle) und formatieren Sie sie als Mac OS Extended (Journaled) (HFS +).
  • Stellen Sie sicher, dass es eine GUID-Partitionstabelle (GPT) und eine EFI-Partition hat. Der einfachste Weg, dies zu tun, ist das Apple Festplatten-Dienstprogramm. Sie können dies jedoch auch über die Befehlszeile tun (es gibt an anderer Stelle Anleitungen dazu). Der wichtige Punkt ist, dass beim Ausführen distil list diskNsMdie folgenden Informationen korrekt sein sollten:

    Partitionstyp: Apple_HFS

    Betriebssystem kann installiert werden: Ja

    Schreibgeschützte Medien: Nein

    Schreibgeschütztes Volume: Nein

  • Folgen Sie nun der LFS-Anleitung (mit Anpassungen).

  • Fügen Sie (offensichtlich unter Verwendung des tatsächlichen Einhängepunkts) in und einDFS=/Volumes/DarwinOS.bashrc.bash_profile

  • Erstellen Sie das Benutzerverzeichnis ( chownganz am Ende 0: 0):

    sudo mkdir -v "$DFS"/usr
    
  • Geben Sie ein root:

    sudo su -
    
  • Machen Sie das Quellverzeichnis und setzen Sie das Sticky-Bit:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Erstellen Sie das Tools-Verzeichnis und erstellen Sie einen Symlink, damit wir es später ganz einfach zu $ ​​PATH hinzufügen können ( rootübrigens immer noch):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • Laden Sie die Quelle aller gewünschten Pakete herunter. Hier steckt man natürlich fest. Alle notwendigen sind nicht da. (Übrigens bevorzuge ich binutilssowieso GNUs .)

Angenommen, Sie könnten tatsächlich alle benötigten herunterladen, dann machen wir weiter.

  • Machen Sie einen unterprivilegierten Benutzer speziell für DFS (vorgeschlagen von 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.
    
  • Beachten Sie, dass Sie das Homedir des neuen Benutzers auf einem Mac manuell erstellen müssen:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • Gewähren Sie nun dem neuen Benutzer Zugriff auf die Quellen und Werkzeuge

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

    su - lfs
    Password: dfs
    
  • Führen Sie den folgenden Befehl aus, um die Umgebung (von LFS) zu bereinigen:

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • Führen Sie nun den folgenden Befehl aus (siehe LFS für Informationen, wenn Sie sich nicht sicher sind):

    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 /configureist sehr flexibel. Versuchen Sie, das *-Muster zu überprüfen , oder führen Sie den Befehl aus , um gcc -vzu sehen, wie Ihr Host-Computer konfiguriert wurde, und kopieren Sie das Muster .

  • Melden Sie sich jetzt vom lfs-Benutzer ab und wieder an. Sie sollten jetzt eine saubere Umgebung haben.
  • Alles von nun an findet innerhalb des lfs-Benutzers statt. Sie werden feststellen, dass ich nur die Hälfte der "LFS" -Symbole in "DFS" -Symbole konvertiert habe. Tut mir leid, aber Sie haben die Idee.

Okay, jetzt zum hypothetischen Teil.

Von hier aus wird es ziemlich gut zur Standard-LFS-Prozedur: Quellen extrahieren, erstellen, installieren, testen, Quellen löschen. Beachten Sie, dass die 2 Durchgänge von binutils, GCC und Glibc immer noch erforderlich sind, ABER Sie müssen AUCH eine Arbeitskopie von haben libc++.1.dylib- und das müssen Sie auch in 2 Durchgängen tun. Auf der libcxx-Seite des LLVM-Projekts finden Sie einige weitere Details. Einmal kompiliert, können Sie es einfügen /usr/lib. Sie müssen den xnu-Kernel kompilieren und installieren (es gibt einige Tutorials im Internet, um dies zu tun) und anschließend die KEXTs installieren. Selbst wenn alle erforderlichen KEXTs verfügbar wären, müssten Sie sie manuell in das .kext-Paket einfügen. Wieder gibt es Tutorials, wie man einen KEXT auf der Kommandozeile von Hand erstellt.

Das letzte Bit macht das System bootfähig. Dazu würden Sie den folgenden Befehl ausführen:

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

Eigentlich macht der Ort, an dem gesegnet werden soll, keinen großen Unterschied. Dieser Ordner ist nur Apple-Standard.

In jedem Fall den Kernel und kexts waren an den richtigen Stellen vorausgesetzt, Sie hatten richtige Kopien dyld, launchdetc. statt und boot.efiwurden ordnungsgemäß funktioniert, soll das System arbeitet und das Boot werden!

Wenn Sie es wirklich wollten, können Sie einen Faux ausführen - launchddas ist nur ein Skript, mit dem Sie eine Bash-Eingabeaufforderung ausführen können - genau das macht PureDarwin Nano .

Schreiben Sie auf jeden Fall die KEXTs und Binaries selbst, wenn Sie möchten - es ist technisch möglich. Ruf mich einfach an, wenn du fertig bist.


Mit Binary Cheats: Wahrscheinlich, aber auch nicht legal (ungetestet)

Also, warum können Sie nicht einfach die Binärdateien, KEXTs und erforderlichen Dateien aus Mountain Lion rippen, die Lautstärke segnen und loslegen? Na ja, das kannst du wahrscheinlich. Dafür benötigen Sie aber auch eine Lizenz. Wenn Sie dies tun, haben Sie im Grunde nur eine Kopie von Mountain Lion erstellt. Ist das nicht nebensächlich?

Mit Binary Cheats für generische Hardware: Wie oben (ungetestet)

Dieser ziemlich ist das OSx86 - Projekt. Wieder stoßen Sie ziemlich sofort auf rechtliche Probleme. Es steht außer Frage, dass diese beiden letzten Methoden definitiv möglich sind - die Tatsache, dass Sie Mountain Lion auf generischer Hardware ausführen können, ist ein Beweis dafür -, aber der springende Punkt dabei war, Ihr eigenes Darwin-Betriebssystem legitim aus dem Quellcode kompilieren zu können.


Randnotiz

Sie haben vielleicht bemerkt, dass ich 32-Bit absichtlich vermieden habe. In einer Welt, in der alle wichtigen Betriebssysteme in 64-Bit verfügbar sind, ist es nicht sinnvoll, ein 32-Bit-Betriebssystem zu kompilieren. Apple hat hier tatsächlich Disk-Images von Darwin (bis Darwin 9) bereitgestellt . Sie funktionierten perfekt auf meiner Windows-Box.

Abschließende Bemerkungen

Letztendlich kaufen die Leute keinen Mac für Darwin, sie kaufen einen Mac für Aqua. Infolgedessen ist die Unterstützung für Darwin als eigenständiges Open-Source-Produkt allmählich so weit zurückgegangen, dass dies für die Open-Source-Community nur noch eine symbolische Geste ist. Die andere, etwas ironische Tatsache ist, dass Sie, um viel darüber zu lernen, direkt in das OSx86-Projekt springen müssen, das nicht genau sanktioniert ist (um es milde auszudrücken). Selbst dann gibt es nicht viele Informationen. PureDarwin ist ein ausgezeichneter Ausgangspunkt, und Jonathan Levins Buch ist eine unschätzbare Referenz für alles, was mit xnu zu tun hat.

Es war ein äußerst lehrreiches Arbeitsjahr, und ich bin fast so glücklich, zu wissen, wie ich es tun würde. Ich werde aber irgendwann aufhören müssen, daran zu arbeiten, und jetzt ist es soweit. Wäre es zu viel verlangt, wenn Sie Apple noch einmal nach Darwin fragen, wenn Sie Mavericks veröffentlichen?


1

Offensichtlich haben Sie erkannt, dass das LFS für Linux bestimmt ist und Darwin sich stark von dem angewendeten Linux-LFS unterscheidet. Daher ist es über die Bemühungen einer einzelnen Person hinaus einfach, das LFS auf die Darwin-Systeme anzuwenden.

Es gibt viele Community-Versuche, die Darwin-Systeme zu ersetzen / verbessern. Obwohl das OpenDarwin-Projekt nicht viel Erfolg hat, ist der Code von Apple wohl zu hart, obwohl noch ein Projekt von PureDarwin übrig ist:
PureDarwin SourceForge
PureDarwin HomePage

Besorgen Sie sich zuerst ein Entwicklerkonto, greifen Sie auf die Build-Tools zu, und führen Sie dann die Schritte zum Erstellen Ihres eigenen benutzerdefinierten Kernels aus.

Da der Darwin-Kernel nicht dieselbe Architektur wie der Linux-Kernel hat, kann er nicht durch den Linux-Kernel ersetzt werden. Daher müssen Sie ihn kompilieren.

Eigentlich müssen Sie sich nur zu 100% an das PureDarwin-Projekt halten und dann das folgende Skript aufrufen: Google Code - Pure Darwin Switch Kernel mit den benutzerdefinierten Kernel-Images, die Sie erstellt haben, ist in Ordnung.

Aber wie man einen gut funktionierenden Darwin-Kernel erstellt, wäre eine neue Frage.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.