GNU/Linux >> Znalost Linux >  >> Linux

Je možné zkompilovat Darwin Distro ze zdroje, jako můžete sestavit Linux Distro?

Aktualizace z 19. dubna 2015:

Po dvou letech se zdá, že o tuto oblast je stále velmi malý zájem. Komunita Hackintosh je však stále vysoce aktivní, což znamená, že jeden z mála open source zavaděčů jiných než Apple schopných bootovat xnu (Chameleon a forky) je stále udržován a může bootovat Yosemite. Existují také příběhy úspěšných při zavádění OS X Yosemite v rámci QEMU. Navíc díky vývojáři (nyní zaměstnanému v Applu), který jde za kliku winocm , máme port ARM jádra xnu. Byla nejaktivnější vývojářkou, kterou v této oblasti znám.

Brzy se také chystá pokračování Amit Singh's Mac OS X Internals. Osobní stránky lidí obvykle nerad zmiňuji; blogový server se všemi informacemi se však zdá být trochu nespolehlivý, takže se podívejte do informačního pole na Twitterové stránce ameaijou.

Podařilo se mi vytvořit vývojový toolchain společnosti Apple (samohostitel, nicméně „Darwin SDK“ bylo také portováno na Linux). Domnívám se, že Darwin OS může být ještě možné postavit od nuly – asi vše, co nám může chybět, jsou nějaké open-source Kexty. Sledujte tento prostor, a pokud víte, jak vzbudit zájem, dejte mi vědět! :)

Krátké odpovědi na tuto otázku:

Technicky: Ano

Prakticky: Ne*

S binárními cheaty: Pravděpodobně, ale také ne legální (netestováno)

S binárními cheaty pro obecný hardware: Jako výše (netestováno)

*pokud nepracujete ve společnosti Apple (*odkašlává obecně směrem na Kalifornii*)

Delší odpověď:

Tohle bude dost dlouhé. Navrhuji kávu. Pokud nemáte čas/chuť to celé číst, můžete přeskočit na "Závěrečné poznámky".

Prakticky možné (Ne):

Je smutné, že Apple stáhl zdrojový kód pro příliš mnoho Darwinových nezbytných KEXT a binárních souborů, aby bylo možné kompilaci operačního systému Darwin čistě ze zdroje. Stále je to technicky možné (mohli byste napsat zdroj sami, abyste to správně opravili), ale prostě na to nemám čas, dovednosti nebo chuť (a pochybuji, že by to komunitu crowdfundingu velmi zajímalo).

Není překvapením, že klíčovým bodem zlomu bylo vydání Darwin 10, které přineslo xnu do x86_64-land. Většina potřebných zdrojů existovala již dříve, ale byly pouze x86. Jak čas plynul, význam slova „Open Source“ společnosti Apple se zřejmě posunul na „Open Source pouze na hardwaru Apple“, protože KEXT společnosti Apple jsou nyní značně specifické pro hardware, takže i když byste mohli vše nastavit a běžící (viz níže) byste byli stále omezeni na hardware Apple.

Technicky možné (Ano):

Není však vše ztraceno. Průvodce LFS se opravdu hodil a určitě lze všechna potřebná nastavení provést bez skutečného budování operačního systému Darwin. Kromě toho vám prezentované kroky poskytují téměř přesný plán cesty vpřed, bez jádra, KEXT a zavaděče. Podařilo se mi však vyřešit problém s bootloaderem (alespoň pro hardware Apple).

Pokud máte zájem, zde je úplný přehled toho, co budete muset udělat:

  • Vymažte oddíl (nejlépe 8 GB nebo větší) na jednotce (interní nebo externí – na tom nezáleží) a naformátujte jej jako Mac OS Extended (Journaled) (HFS+).
  • Ujistěte se, že má GUID Partition Table (GPT) a že když to uděláte, má oddíl EFI. Nejjednodušší způsob, jak to udělat, je pomocí Diskové utility společnosti Apple, ale můžete to udělat na příkazovém řádku, pokud chcete (jinde jsou návody, jak to udělat). Důležité je, že když spustíte distil list diskNsM , následující informace by měly být správné:

    Typ oddílu:Apple_HFS

    OS lze nainstalovat:Ano

    Média pouze pro čtení:Ne

    Svazek pouze pro čtení:Ne

  • Nyní postupujte podle průvodce LFS (s úpravami).

  • Vložte DFS=/Volumes/DarwinOS (samozřejmě pomocí skutečného bodu připojení) do .bashrc a .bash_profile

  • Vytvořte uživatelský adresář (chown to na 0:0 na samém konci):

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

    sudo su -
    
  • Vytvořte adresář se zdroji a nastavte lepivý bit:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Vytvořte adresář nástrojů a vytvořte na něj symbolický odkaz, abychom jej mohli později snadno přidat do $PATH (stále v root mimochodem):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • Stáhněte si zdroj všech požadovaných balíčků. Tady se samozřejmě zaseknete. Všechny potřebné tam nejsou. (Mimochodem, preferuji GNU binutils stejně.)

Za předpokladu, že byste si mohli stáhnout všechny potřebné, pojďme dál.

  • Vytvořte znevýhodněného uživatele speciálně pro DFS (navrženo 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.
    
  • Všimněte si, že musíte vytvořit domovský adresář nového uživatele ručně na Macu:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • Nyní udělte novému uživateli přístup ke zdrojům a nástrojům

    sudo chown -v lfs $DFS/tools
    sudo chown -v lfs $DFS/sources
    
  • Přihlaste se:

    su - lfs
    Password: dfs
    
  • Spusťte následující příkaz k vyčištění prostředí (z LFS):

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • Nyní spusťte následující příkaz (pokud si nejste jisti, co dělá, viz LFS):

    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
    
  • /configure GCC je docela flexibilní. Zkuste grepovat *- vzor, ​​nebo stačí spustit gcc -v abyste viděli, jak byl váš hostitelský počítač nakonfigurován, a zkopírujte to.

  • Nyní se odhlaste od uživatele lfs a znovu se přihlaste. Nyní byste měli mít čisté prostředí.
  • Vše se ode dneška odehrává uvnitř uživatele lfs. Všimnete si, že jsem byl trochu líný, když jsem převedl pouze polovinu symbolů „LFS“ na symboly „DFS“. Omlouvám se, ale chápete to.

Dobře, nyní k hypotetické části.

Odtud to bude docela dobře standardní postup LFS:Extrahovat zdroje, sestavit, nainstalovat, otestovat, odstranit zdroje. Všimněte si, že 2 průchody binutils, GCC a Glibc jsou stále nutné, ale musíte mít také pracovní kopii libc++.1.dylib – a budete to muset udělat také ve 2 průchodech. Několik dalších podrobností naleznete na stránce libcxx projektu LLVM. Jakmile je zkompilován, můžete jej vložit do /usr/lib . Budete muset zkompilovat a nainstalovat jádro xnu (na webu je několik návodů, jak to udělat) a poté nainstalovat KEXT. I kdyby byly všechny požadované KEXT k dispozici, stále byste je museli vkládat do balíčku .kext ručně. Opět jsou zde návody, jak ručně vytvořit KEXT na příkazovém řádku.

Posledním krokem je zavádění systému. Chcete-li to provést, spusťte následující příkaz:

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

Ve skutečnosti na místě požehnání opravdu nezáleží. Tato složka je standardem společnosti Apple.

V každém případě, za předpokladu, že jádro a KEXT byly na správných místech, měli jste správné kopie dyld , launchd , atd. na místě a boot.efi fungoval správně, systém by měl fungovat a spustitelný!

Všimněte si, že pokud opravdu chcete, můžete spustit faux-launchd to je jen skript pro spuštění bash prompt – to je to, co PureDarwin Nano dělá.

Opět platí, že pokud chcete, napište KEXT a binární soubory sami – je technicky možné. Zavolejte mi, až budete hotovi.

S binárními cheaty:Pravděpodobně, ale také ne legální (netestováno)

Proč tedy nemůžete jednoduše vytrhnout binární soubory, KEXT a požadované soubory z Mountain Lion, požehnat svazku a jít? No, pravděpodobně můžete. K tomu ale potřebujete také licenci. Také, pokud to uděláte, právě jste v podstatě vytvořili kopii Mountain Lion. Není to tak trochu mimo mísu?

S binárními cheaty pro obecný hardware:Jak je uvedeno výše (netestováno)

Toto do značné míry je projekt OSx86. Opět se téměř okamžitě dostanete do právních problémů. Není pochyb o tom, že tyto dvě poslední metody jsou rozhodně možné – důkazem toho je fakt, že Mountain Lion můžete provozovat na generickém hardwaru – ale smyslem toho všeho bylo být schopen legitimně zkompilovat svůj vlastní Darwin OS ze zdroje.

Postranní poznámka

Možná jste si všimli, že jsem se záměrně vyhýbal čemukoli 32bitovému. Ve světě, kde je každý hlavní operační systém dostupný v 64bitové verzi, nemá příliš smysl kompilovat 32bitovou verzi. Apple zde skutečně poskytl obrazy disků Darwina (až do Darwina 9). Fungovaly perfektně na mém Windows boxu.

Závěrečné poznámky

Myslím, že na konci dne lidé nekupují Mac pro Darwina, ale kupují Mac pro Aqua. V důsledku toho podpora Darwina jako samostatného produktu s otevřeným zdrojovým kódem postupně upadala do bodu, kdy jde skutečně jen o symbolické gesto vůči komunitě s otevřeným zdrojovým kódem. Dalším lehce ironickým faktem je, že abyste se toho hodně dozvěděli, musíte skočit přímo do projektu OSx86, který není zrovna posvěcený (nenápadně řečeno). Ani pak kolem není mnoho informací. PureDarwin je skvělé místo, kde začít, a kniha Jonathana Levina je neocenitelným odkazem pro všechny věci xnu.

Byl to mimořádně vzdělávací rok práce a jsem téměř stejně šťastný, že vím, jak to udělat, jako bych to skutečně dělal. V určité fázi na tom budu muset přestat pracovat a teď je ten čas. Jako poslední marný výkřik směrem k Applu, bylo by příliš žádat mít jen jednu další sestavení Darwina, když vydáte Mavericks?


Linux
  1. Nainstalujte Apache 2 ze zdroje na Linux

  2. Jak zkompilovat vlastní standardní knihovnu glibc C ze zdroje a použít ji?

  3. Mohu vytvořit linuxové distro s libc místo glibc

  1. Zvládneš to? Kompilace programů C v systému Linux pomocí příkazu Make

  2. Jak zkompilovat a nainstalovat software ze zdrojového kódu na Linuxu

  3. Naučit se kompilovat věci ze zdroje (na Unix/Linux/OSX)

  1. Můžete spustit Xcode v Linuxu?

  2. Mohu zavést Linux z VHD?

  3. Je možné sestavit linuxové distro podporující RPM i .deb balíčky?