È possibile compilare un Darwin Distro dalla fonte, come è possibile creare un Linux Distro?


42

Ho letto e intrapreso Linux From Scratch (e BLFS) e mi chiedevo, posso seguire questa guida per creare un Darwin Distro sostituendo il xnukernel? Il processo sarebbe molto diverso da quello delineato in LFS?

La mia attuale comprensione è che tutto ciò che sarebbe necessario per rendere il sistema "Darwin" anziché "Linux" sarebbe la sostituzione del kernel. È corretto?


MODIFICARE:

In risposta al commento di Kermermist, perfezionerò questa domanda. Mentre cerco informazioni su questo argomento in generale, quello che sto cercando in particolare è qualcosa di simile a una " Guida alla creazione di Darwin Distro ", molto simile alla LFS è una " Guida alla creazione di Distro Linux ".

Mi rendo conto che tali informazioni verranno probabilmente solo dalle persone di Puredarwin , OpenDarwin o GNU / Darwin, quindi questa è una sorta di richiamo per loro di aiuto. Una guida " How-We-Made-PureDarwin-Nano-Start-To-Finish " come LFS sarebbe perfetta, ma so che lo sta chiedendo molto.


3
Probabilmente vale la pena guardare puredarwin per vedere cosa succede nella costruzione di una distribuzione basata su Darwin (e i problemi che loro e Opendarwin hanno affrontato in questo)
Journeyman Geek

1
Per l'utente comune entrambi i kernel sembrano molto simili, ma il software utilizzato per gestire il kernel e il software intimamente coinvolto (incluso libc) sono abbastanza diversi. La documentazione LFS non sarà di grande aiuto in questi primi passi critici. Forse a partire (o almeno studiando) il ramo kFreeBSD di Debian è più rilevante.
vonbrand,

1
Suggerimento: se in realtà fai una domanda su ciò che stai cercando di fare, entrambi aumentano le possibilità di trovare un successo in domande già esistenti, ma aumentano anche la probabilità che attiri più persone con idee su come rispondere alla domanda . Al contrario di essere confuso quale sia davvero la domanda. Solo un pensiero.
assassino

1
Darwin è in qualche modo basato su BSD, che è diverso da Linux. Il modo in cui BSD fa le cose è diverso in più cose rispetto al solo kernel (preferenze del filesystem, strutture di directory, politica di aggiornamento, ecc.).
Vesperto,

2
Essere binari compatibili non è la stessa cosa, temo. @Vesperto ha ragione, Darwin è più strettamente legato alla famiglia BSD che a Linux; sebbene con un kernel decisamente diverso rispetto ad altri BSD. Penso che avresti più fortuna a cercare una guida ai tipi BFS che a una basata su LFS. Il manuale di BSD sarebbe un'altra buona fonte di riferimento. Dovresti comunque usare i tuoi riferimenti Darwin per le sue informazioni rilevanti.
Jerry W Jackson,

Risposte:


32

Aggiornamento 19 aprile 2015:

Dopo due anni sembra esserci ancora poco interesse in questa sfera. Tuttavia, la comunità di Hackintosh è ancora molto attiva, il che significa che uno dei pochi bootloader non Apple open source in grado di avviare xnu (Chameleon e fork) è ancora mantenuto e può avviare Yosemite. Ci sono anche storie di successo che avviano OS X Yosemite all'interno di QEMU. Inoltre, grazie a uno sviluppatore (ora impiegato da Apple) che si occupa dell'handle winocm , abbiamo una porta ARM del kernel xnu . È stata la sviluppatrice più attiva che io conosca in questo settore.

C'è anche un sequel di Amit Singh per Mac OS X Internals in arrivo. Di solito non mi piace menzionare le pagine personali delle persone; tuttavia, il blog server con tutte le informazioni sembra essere un po 'inaffidabile, quindi vedi la finestra informativa sulla pagina Twitter di ameaijou .

Sono riuscito a costruire la toolchain di sviluppo di Apple (un self-host, ma anche "Darwin SDK" è stato portato su Linux ). Credo che un sistema operativo Darwin potrebbe essere ancora possibile costruire da zero - tutto ciò che potrebbe mancare sono alcuni Kexts open source. Guarda questo spazio e se sai come suscitare interesse, fammelo sapere! :)


Brevi risposte a questa domanda:

Tecnicamente:

Praticamente: No *

Con i trucchi binari: probabilmente, ma anche non legale (non testato)

Con Trucchi binari per hardware generico: Come sopra (non testato)

* a meno che tu non lavori in Apple (* si schiarisce la gola in direzione generale della California *)


Risposta più lunga:

Questo sarà piuttosto lungo. Suggerisco il caffè. Se non hai il tempo / la propensione a leggere tutto, puoi saltare a "Osservazioni conclusive".

Praticamente possibile (No):

Purtroppo, Apple ha ritirato il codice sorgente per troppi KEXT e binari necessari di Darwin per rendere possibile la compilazione di un sistema operativo Darwin esclusivamente dalla fonte. È ancora tecnicamente possibile (potresti scrivere tu stesso la fonte per rattopparla correttamente), ma semplicemente non ho il tempo, le capacità o l'inclinazione per farlo (e dubito che la comunità di finanziamento della folla sarebbe molto interessata).

Non sorprende che il punto chiave del ribaltamento sia stato il rilascio di Darwin 10, che ha portato xnu in x86_64-land. La maggior parte delle fonti necessarie erano in circolazione prima di allora, ma erano solo x86. Con il passare del tempo, il significato di "Open Source" di Apple sembra essersi spostato su "Open Source solo su hardware Apple" poiché i KEXT di Apple sono ora specifici dell'hardware in generale, quindi anche se si potesse ottenere tutto e in esecuzione (vedi sotto) saresti comunque limitato all'hardware Apple.

Tecnicamente possibile (Sì):

Tuttavia, non tutto è perduto. La guida LFS è risultata utile e certamente tutte le impostazioni necessarie possono essere eseguite senza effettivamente creare il sistema operativo Darwin. Inoltre, i passaggi presentati forniscono una tabella di marcia quasi esatta del percorso da seguire, meno il kernel, i KEXT e il bootloader. Sono riuscito comunque a risolvere il problema del bootloader (almeno per l'hardware Apple).

Se sei interessato, ecco una panoramica completa di ciò che dovrai fare:

  • Cancella una partizione (preferibilmente almeno 8 GB) su un'unità (interna o esterna - non importa) e formattala come Mac OS Extended (Journaled) (HFS +).
  • Assicurati che abbia una tabella delle partizioni GUID (GPT) e che quando lo fai abbia una partizione EFI. Il modo più semplice per farlo è tramite l'Utility Disco di Apple, ma puoi farlo dalla riga di comando se vuoi (ci sono tutorial altrove su come farlo). Il punto importante è che quando si esegue distil list diskNsM, le seguenti informazioni dovrebbero essere corrette:

    Tipo di partizione: Apple_HFS

    Sistema operativo installabile: Sì

    Supporti di sola lettura: No

    Volume in sola lettura: no

  • Ora seguiamo la guida LFS (con adattamenti).

  • Inserisci (usando l'attuale punto di montaggio, ovviamente) in eDFS=/Volumes/DarwinOS.bashrc.bash_profile

  • Crea la directory utente ( chowna 0: 0 alla fine):

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

    sudo su -
    
  • Crea la directory dei sorgenti e imposta il bit appiccicoso:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Crea la directory degli strumenti e creane un link simbolico in modo da poterlo aggiungere facilmente a $ PATH in seguito (sempre a rootproposito):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • Scarica la fonte di tutti i pacchetti che desideri. Questo è, ovviamente, dove ti blocchi. Tutti quelli necessari non ci sono. (Per inciso, preferisco binutilscomunque GNU .)

Supponendo che potresti effettivamente scaricare tutti quelli di cui hai bisogno, andiamo avanti.

  • Crea un utente non privilegiato appositamente per DFS (suggerito da 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.
    
  • Nota che devi creare manualmente il homedir del nuovo utente su un Mac:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • Ora concedi al nuovo utente l'accesso alle fonti e agli strumenti

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

    su - lfs
    Password: dfs
    
  • Eseguire il comando seguente per pulire l'ambiente (da LFS):

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • Ora esegui il comando seguente (vedi LFS per cosa fa se non sei sicuro):

    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 /configureè abbastanza flessibile. Prova a visualizzare il *-modello in sequenza o esegui semplicemente gcc -vper vedere come è stato configurato il tuo computer host e copiarlo.

  • Ora disconnettiti dall'utente lfs ed esegui nuovamente l'accesso. Ora dovresti avere un ambiente pulito.
  • Tutto da ora avviene all'interno dell'utente lfs. Noterai che ero leggermente pigro nel convertire solo metà dei simboli "LFS" in simboli "DFS". Mi dispiace ma hai avuto l'idea.

Va bene ora alla sezione ipotetica.

Da qui in avanti sarà piuttosto una procedura LFS standard: estrarre fonti, costruire, installare, testare, eliminare fonti. Nota che i 2 passaggi di binutils, GCC e Glibc sono ancora necessari, MA ANCHE devi avere una copia funzionante di libc++.1.dylib- e dovrai farlo anche in 2 passaggi. Puoi vedere la pagina libcxx del progetto LLVM per qualche dettaglio in più. Una volta compilato, puoi inserirlo /usr/lib. Dovrai compilare e installare il kernel xnu (ci sono alcuni tutorial sul web per come farlo) e quindi installare i KEXT. Anche se fossero disponibili tutti i KEXT richiesti, dovrai comunque inserirli manualmente nel pacchetto .kext. Ancora una volta ci sono tutorial su come creare a mano un KEXT sulla riga di comando.

Il bit finale sta rendendo avviabile il sistema. Per fare ciò, dovresti eseguire il seguente comando:

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

In realtà il luogo da benedire non fa davvero la differenza. Quella cartella è solo standard Apple.

In ogni caso, supponendo che il kernel e kexts erano nei posti giusti, hai avuto le copie corrette di dyld, launchdecc a posto e boot.efifunzionava correttamente, il sistema dovrebbe funzionare e avviabile!

Nota che se lo desideri davvero potresti eseguire un falso - launchdche è solo uno script per eseguire un prompt di bash - è quello che fa PureDarwin Nano .

Ancora una volta, in ogni caso, scrivi tu stesso i file KEXT e i file binari, se tecnicamente è possibile. Chiamami quando hai finito.


Con i trucchi binari: probabilmente, ma anche non legale (non testato)

Quindi, perché non puoi semplicemente estrarre binari, KEXT e file richiesti da Mountain Lion, benedire il volume e andare? Bene, probabilmente puoi. Ma hai anche bisogno di una licenza per farlo. Inoltre, se lo fai, hai praticamente fatto una copia di Mountain Lion. Non è questo il punto?

Con Trucchi binari per hardware generico: Come sopra (non testato)

Questo più o meno è il progetto OSx86. Ancora una volta ti imbatti praticamente in problemi legali immediatamente. Non c'è dubbio che questi ultimi due metodi siano sicuramente possibili - il fatto che tu possa eseguire Mountain Lion su hardware generico ne è la prova - ma il punto centrale di tutto ciò era poter compilare legittimamente il tuo sistema operativo Darwin dal sorgente.


Nota a margine

Forse avrai notato che ho deliberatamente evitato qualsiasi cosa a 32 bit. In un mondo in cui tutti i principali sistemi operativi sono disponibili a 64 bit non ha molto senso compilarne uno a 32 bit. Apple ha effettivamente fornito immagini del disco di Darwin (fino a Darwin 9) qui . Hanno funzionato perfettamente sul mio box di Windows.

Osservazioni conclusive

Credo che alla fine della giornata, la gente non compra Mac per Darwin, ma compra Mac per Aqua. Di conseguenza, il supporto per Darwin come prodotto autonomo e open source è gradualmente diminuito al punto in cui è davvero solo un gesto simbolico per la comunità open source. L'altro fatto leggermente ironico è che per imparare molto su questo, devi saltare direttamente al progetto OSx86, che non è esattamente sanzionato (per dirla blandamente). Anche allora, non ci sono molte informazioni in giro. PureDarwin è un ottimo punto di partenza e il libro di Jonathan Levin è un riferimento inestimabile per tutte le cose xnu.

È stato un anno di lavoro estremamente istruttivo e sono quasi felice di saperlo come lo farei davvero. Dovrò smettere di lavorarci su ad un certo punto e ora è quel momento. Come ultimo inutile grido ad Apple, sarebbe troppo chiedere di avere solo un'altra build di Darwin quando rilasci Mavericks?


1

Ovviamente, hai riconosciuto che l'LFS è per Linux e Darwin è molto diverso dall'LFS Linux applicato, quindi è semplice al di là dei tuoi sforzi individuali applicare l'LFS ai sistemi Darwin.

Esistono molti tentativi della comunità di sostituire / migliorare i sistemi Darwin. mentre il progetto OpenDarwin non ha molto successo, immagino che il codice di Apple sia troppo difficile, mentre rimane ancora un progetto PureDarwin:
PureDarwin SourceForge
PureDarwin HomePage

Ottieni prima un account sviluppatore, prendi i loro strumenti di compilazione, quindi potresti ottenere i passaggi per creare il tuo kernel personalizzato.

Il kernel Darwin non ha la stessa architettura con il kernel Linux, quindi non può essere sostituito con il kernel Linux, quindi è necessario compilarlo.

In realtà tutto ciò che devi fare è restare fedele al 100% con il progetto PureDarwin, quindi chiamare il seguente script: Codice Google - Pure Darwin Switch Kernel con il Kernel personalizzato Le immagini che hai creato andranno bene.

Ma per quanto riguarda come costruire un buon kernel Darwin funzionante, sarebbe una nuova domanda.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.