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

8720
Ephemera

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

Nach meinem derzeitigen Verständnis ist alles, was erforderlich ist, um das System "Darwin" anstelle von "Linux" zu machen, der Kernelersatz. Ist das richtig?


BEARBEITEN:

Als Antwort auf den Kommentar von Killermist 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 " ist.

Ich bin mir bewusst, dass solche Informationen wahrscheinlich nur von den Leuten von Puredarwin, OpenDarwin oder GNU / Darwin stammen werden, daher ist dies eine Art Hilfestellung für sie. Eine Anleitung " Wie wir gemacht haben - PureDarwin-Nano-Start-to-Finish " wie LFS wäre perfekt, aber ich weiß, dass das viel verlangt.

40
Es ist wahrscheinlich einen Blick auf Puredarwin wert, um zu sehen, was mit dem Aufbau einer auf Darwin basierenden Distribution (und den Problemen, mit denen sie und Opendarwin konfrontiert sind) verbunden ist. Journeyman Geek vor 11 Jahren 3
Für normale Benutzer sehen beide Kernel sehr ähnlich aus, aber die zum Verwalten des Kernels verwendete Software und die damit zusammenhängende Software (einschließlich libc) sind sehr unterschiedlich. Die LFS-Dokumentation wird in diesen wichtigen ersten Schritten keine große Hilfe sein. Vielleicht ist es wichtiger, ab dem kFreeBSD-Zweig von Debian zu beginnen (oder zumindest zu studieren). vonbrand vor 11 Jahren 1
Hinweis: Wenn Sie tatsächlich die Frage stellen, was Sie zu tun versuchen, erhöhen Sie sowohl die Wahrscheinlichkeit, einen Treffer in bereits vorhandenen Fragen zu finden, als auch die Wahrscheinlichkeit, dass mehr Leute mit Ideen zur Beantwortung der Frage kommen . Im Gegensatz zu verwirrt zu sein, was die Frage wirklich ist. Nur ein Gedanke. killermist vor 11 Jahren 1
Darwin basiert etwas auf BSD, was sich von Linux unterscheidet. Die Vorgehensweise bei BSD unterscheidet sich in mehr als nur dem Kernel (Dateisystemeinstellungen, Verzeichnisstrukturen, Upgrade-Richtlinien usw.). vesperto vor 11 Jahren 1
Nun, BSD ist Linux binär kompatibel so ....? David vor 11 Jahren 0
Binärkompatibel zu sein ist nicht dasselbe, fürchte ich. @Vesperto hat recht, Darwin ist enger mit der BSD-Familie verbunden als mit Linux. allerdings mit einem entschieden 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üssen immer noch Ihre Darwin-Referenzen verwenden, um relevante Informationen zu erhalten. Jerry W Jackson vor 11 Jahren 2
Verzeihen Sie meine Unwissenheit, ich bin echt neugierig. Wie ist ein reines Darwin-basiertes System praktisch nützlich? Adrian Frühwirth vor 10 Jahren 0
@ AdrianFrühwirth So weit ich weiß, ist das überhaupt nicht der Fall :). Es ist eher ein persönliches Projekt als ein nützliches Unterfangen. Ich habe jedoch viel gelernt und das ist an sich die bisherige Anstrengung aus meiner Sicht wert. Ephemera vor 10 Jahren 0
@PLPiper Ich stimme völlig zu, wollte nur, dass Sie meine Vermutung bestätigen, da die Projektwebseiten diese Frage nicht wirklich zu beantworten scheinen :) Adrian Frühwirth vor 10 Jahren 0

2 Antworten auf die Frage

32
Ephemera

Update 19.04.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 von Drittanbietern, die Xnu (Chameleon und Gabeln) booten können, erhalten bleibt und Yosemite booten kann. Es gibt auch Erfolgsgeschichten, die OS X Yosemite in QEMU starten. Dank eines (jetzt bei Apple beschäftigten) Entwicklers, der sich Winocm zulässt, verfügen wir außerdem über einen ARM-Port des Xnu-Kernels . Sie war der aktivste Entwickler, den ich in diesem Bereich kenne.

In Kürze gibt es auch eine Fortsetzung von Mac OS X Interns von Amit Singh . Normalerweise möchte ich nicht gerne die persönlichen Seiten von Personen erwähnen, jedoch scheint der Blogserver mit allen Informationen ein wenig unzuverlässig zu sein. Siehe dazu das Infobox auf der Twitter-Seite von ameaijou .

Ich habe es geschafft, Apples Entwicklungs-Toolchain aufzubauen (ein Selbst-Host, das "Darwin SDK" wurde jedoch auch auf Linux portiert ). Ich glaube, dass ein Darwin-Betriebssystem möglicherweise noch von Grund auf neu erstellt werden kann - alles, was uns fehlen könnte, sind einige Open-Source-Kexts. Schauen Sie sich diesen Raum an und wenn Sie wissen, wie man Interesse weckt, lassen Sie es mich wissen! :)


Kurze Antworten auf diese Frage:

Technisch: Ja

Praktisch: Nein *

Mit binären Cheats: Wahrscheinlich aber auch nicht legal (ungetestet)

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

* außer Sie arbeiten bei Apple (* räuspert sich allgemein in Richtung Kalifornien *)


Längere Antwort:

Das wird ziemlich lange dauern. Ich schlage Kaffee vor. Wenn Sie nicht die Zeit / Neigung 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 von Darwins notwendige KEXTs und Binaries zurückgezogen, um die Erstellung eines Darwin-Betriebssystems ausschließlich aus der Quelle zu ermöglichen. Es ist technisch immer noch möglich (Sie könnten die Quelle selbst schreiben, um sie richtig zu reparieren), 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).

Wenig überraschend war der entscheidende Wendepunkt die Veröffentlichung von Darwin 10, die xnu in x86_64-land brachte. Die meisten notwendigen Quellen waren vor diesem Zeitpunkt in der Nähe, waren jedoch nur x86. Im Laufe der Zeit scheint sich die Bedeutung von Apples "Open Source" auf "Open Source nur für Apple-Hardware" zu verlagern, da Apples KEXTs jetzt von der Größe her sehr hardwarespezifisch sind Wenn Sie ausgeführt werden (siehe unten), sind Sie immer noch auf Apple-Hardware beschränkt.

Technisch möglich (Ja):

Es ist jedoch nicht alles verloren. Die LFS-Anleitung hat sich als nützlich erwiesen, und sicherlich können alle erforderlichen Einstellungen durchgeführt werden, ohne dass das Darwin-Betriebssystem erstellt werden muss. Die vorgestellten Schritte geben Ihnen außerdem eine fast genaue Straßenkarte des vorausgehenden Pfads ohne Kernel, KEXTs und Bootloader. Ich habe es jedoch geschafft, das Bootloader-Problem zu lösen (zumindest für Apple-Hardware).

Wenn Sie interessiert sind, finden Sie hier einen vollständigen Überblick über das, was Sie tun müssen:

  • 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 über eine GUID-Partitionstabelle (GPT) verfügt, und dass eine EFI-Partition vorhanden ist. Der einfachste Weg dazu ist das Festplatten-Dienstprogramm von Apple, aber Sie können dies auch in der Befehlszeile tun, wenn Sie möchten (es gibt andere Anleitungen, wie Sie dies tun können). Der wichtige Punkt ist, dass distil list diskNsMdie folgenden Informationen beim Ausführen korrekt sein sollten:

Partitionstyp: Apple_HFS

Betriebssystem kann installiert werden: Ja

Schreibgeschützte Medien: Nein

Nur-Lese-Volume: Nein

  • Nun folgen Sie der LFS-Anleitung (mit Anpassungen).

  • Fügen Sie 'DFS = / Volumes / DarwinOS ' (ohne Anführungszeichen und offensichtlich mit dem tatsächlichen Mount-Punkt) in .bashrcund ein.bash_profile

  • Erstellen Sie das Benutzerverzeichnis ( chownam Ende 0: 0):

    sudo mkdir -v $ DFS / usr

  • Eingabe root:

    sudo su -

  • Erstellen Sie das Quellverzeichnis und setzen Sie das Sticky-Bit:

    mkdir -v $ DFS / sources # Stellen Sie sicher, dass noch $ DFS definiert ist. Wenn nicht, definieren Sie es neu.

    chmod -v a + wt $ DFS / sources

  • Erstellen Sie das Tools-Verzeichnis und erstellen Sie einen Symlink zu ihm, damit wir ihn später leicht zu $ ​​PATH hinzufügen können ( rootübrigens noch im Weg):

    mkdir -v $ DFS / tools

    ln -sv $ DFS / tools /

    logout # Wurzel verlassen

  • Laden Sie den Quellcode aller gewünschten Pakete herunter. Hier stecken Sie natürlich fest. Alle notwendigen sind nicht da. (Übrigens bevorzuge ich GNUs binutilssowieso.)

Angenommen, Sie könnten tatsächlich alle herunterladen, die Sie benötigen, lassen Sie uns weitergehen.

  • Erstellen Sie einen unterprivilegierten Benutzer speziell für DFS (von LFS vorgeschlagen):

    sudo dscl. -create / users / lfs

    sudo dscl. -create / Users / lfs UserShell / bin / bash

    sudo dscl. / users / lfs RealName "LFS DFS" erstellen

    sudo dscl. -create / Users / lfs UniqueID "2070" # was auch immer Sie möchten

    sudo dscl. -create / Users / lfs PrimaryGroupID 20 # Default 'staff'

    sudo dscl. -create / Users / lfs NFSHomeDirectory / Users / lfs

    sudo dscl. -passwd / Users / lfs dfs # Wieder abschmecken.

  • Beachten Sie, dass Sie das Homedir des neuen Benutzers manuell auf einem Mac erstellen müssen:

    sudo mkdir / Benutzer / lfs

    sudo chown -R lfs: staff / Benutzer / lfs /

  • Geben Sie dem neuen Benutzer nun Zugriff auf die Quellen und Tools

    sudo chown -v lfs $ DFS / tools

    sudo chown -v lfs $ DFS / sources

  • Einloggen:

    su - lfs

    Passwort: dfs

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

    cat> ~ / .bash_profile << "EOF"

    echo "Reines Umfeld betreten ..."

    exec env -i HOME = $ HOME TERM = $ TERM PS1 = '\ u: \ w \ $' / bin / bash

    EOF

  • Führen Sie nun den folgenden Befehl aus (siehe LFS, wenn Sie sich nicht sicher sind):

    cat> ~ / .bashrc << "EOF"

    set + h

    umask 022

    DFS = / Volumes / DarwinOS # Wie zuvor

    LC_ALL = POSIX

    LFS_TGT = $ (uname -m) -dfs-darwin1242 # Siehe gcc / configure für Möglichkeiten!

    PATH = / tools / bin: / bin: / usr / bin # Symlink von vorhin beachten

    LFS LC_ALL LFS_TGT PATH exportieren

    echo ".bashrc-Skript abgeschlossen. Umgebung ist bereit."

    EOF

  • GCC /configureist ziemlich flexibel. Probieren Sie das *-Muster aus oder führen Sie einfach einen Lauf durch, um gcc -vzu sehen, wie Ihr Host-Computer konfiguriert wurde, und kopieren Sie ihn.

  • Melden Sie sich jetzt vom lfs-Benutzer ab und melden Sie sich wieder an. Sie sollten jetzt eine saubere Umgebung haben.
  • Ab jetzt findet alles innerhalb des lfs-Benutzers statt. Sie haben bemerkt, dass ich etwas faul war, nur die Hälfte der 'LFS'-Symbole in' DFS'-Symbole zu konvertieren. Tut mir leid, aber Sie haben die Idee.

Okay, jetzt zum hypothetischen Teil.

Von hier aus wird es ein Standard-LFS-Verfahren sein: Quellen extrahieren, erstellen, installieren, testen, löschen. Beachten Sie die 2 Durchgänge von binutils, GCC und Glibc sind noch notwendig, ABER Sie libc++.1.dylibbenötigen AUCH eine Arbeitskopie - und Sie müssen dies auch in 2 Durchgängen tun. Sie finden die libcxx-Seite des LLVM-Projekts für weitere Details. Nach dem Kompilieren können Sie es einfügen /usr/lib. Sie müssen den xnu-Kernel kompilieren und installieren (dazu gibt es einige Tutorials im Web) und anschließend die KEXTs installieren. Selbst wenn alle erforderlichen KEXTs verfügbar sind, müssen Sie sie dennoch manuell in das .kext-Paket einfügen. Wieder gibt es Tutorials, wie man einen KEXT in der Befehlszeile manuell erstellt.

Das letzte Bit macht das System bootfähig. Dazu führen Sie den folgenden Befehl aus:

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

Eigentlich macht die Lage zum Segen keinen Unterschied. Dieser Ordner ist nur Apple-Standard.

In jedem Fall den Kernel und kexts unter der Annahme, an den richtigen Stellen waren, haben Sie die richtigen Kopien dyld, launchdusw. an Ort und Stelle undboot.efi wurde ordnungsgemäß funktioniert, sollte das System arbeitet und das Boot werden!

Beachten Sie, wenn Sie wirklich wollten, dass Sie ein Faux ausführen könnten - launchddas ist nur ein Skript, um eine Bash-Eingabeaufforderung auszuführen - das ist der PureDarwin Nano tut.

Schreiben Sie die KEXTs und Binaries auf jeden Fall selbst, wenn Sie möchten. Dies ist technisch möglich. Rufen Sie mich einfach an, wenn Sie fertig sind.


Mit binären Cheats: Wahrscheinlich aber auch nicht legal (ungetestet)

Warum können Sie also nicht einfach die Binaries, KEXTs und erforderlichen Dateien aus Mountain Lion herausreißen, die Lautstärke segnen und loslegen? 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 irgendwie neben dem Punkt?

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

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


Randnotiz

Sie haben vielleicht bemerkt, dass ich absichtlich alles 32-Bit gemieden habe. In einer Welt, in der jedes größere Betriebssystem in 64-Bit verfügbar ist, ist es nicht sinnvoll, ein 32-Bit-Betriebssystem zu erstellen. Apple hat tatsächlich bieten Disk - Images von Darwin (bis Darwin 9) hier . Sie funktionierten perfekt auf meiner Windows-Box.

Abschließende Bemerkungen

Ich schätze, am Ende des Tages gehen die Leute nicht von Mac für Darwin ab, sie kaufen Mac für Aqua. Daher ist die Unterstützung für Darwin als eigenständiges Open-Source-Produkt allmählich so weit zurückgegangen, dass es wirklich nur eine Zeichenbewegung für die Open-Source-Community ist. Die andere, etwas ironische Tatsache ist, dass Sie, um etwas darüber zu erfahren, direkt in das OSx86-Projekt springen müssen, was nicht gerade sanktioniert ist. Selbst dann gibt es nicht viele Informationen. PureDarwin ist ein hervorragender Ausgangspunkt und Jonathan Levins Buch ist eine unschätzbare Referenz für alle Dinge, die mit Xnu zu tun haben.

Es war ein sehr lehrreiches Jahr der Arbeit, und ich bin fast so glücklich darüber, wie ich es tun würde, als würde ich es tatsächlich tun. Ich werde jedoch irgendwann aufhören, daran zu arbeiten, und jetzt ist es soweit. Als letztes, vergebliches Shout an Apple, wäre es zu viel zu fragen, um nur einen weiteren Build von Darwin zu haben, wenn Sie Mavericks veröffentlichen?

1

Offensichtlich haben Sie erkannt, dass das LFS für Linux ist und Darwin sich sehr von dem verwendeten Linux-LFS unterscheidet. Es ist also nicht nur Ihre Bemühungen einer Einzelperson, das LFS auf die Darwin-Systeme anzuwenden.

Es gibt viele Community-Versuche, die Darwin-Systeme zu ersetzen / zu verbessern. Während das OpenDarwin-Projekt nicht viel Erfolg hat, ist der Code von Apple zu hart, während PureDarwin noch ein Projekt enthält:
PureDarwin SourceForge
PureDarwin HomePage

Holen Sie sich zuerst ein Entwicklerkonto, schnappen Sie sich die Build-Tools und dann können Sie die Schritte zur Erstellung Ihres eigenen benutzerdefinierten Kernels durchführen.

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

Alles, was Sie tun müssen, ist 100% am PureDarwin-Projekt zu bleiben und dann das folgende Skript aufzurufen: Google Code - Pure Darwin Switch-Kernel mit den benutzerdefinierten Kernel-Images, die Sie erstellt haben, sind in Ordnung.

Aber was den Aufbau eines gut funktionierenden Darwin-Kernels angeht, wäre dies eine neue Frage.