Czy można skompilować Darwin Distro ze źródła, tak jak można zbudować Linux Distro?


42

Przeczytałem i podjąłem Linux From Scratch (i BLFS) i zastanawiałem się, czy mogę postępować zgodnie z tym przewodnikiem, aby stworzyć dystrybucję Darwina, zastępując xnujądro? Czy proces byłby zupełnie inny niż ten opisany w BAEL?

Moje obecne rozumienie jest takie, że wszystko, co byłoby wymagane, aby system był „Darwin”, a nie „Linux”, stanowiłoby podstawienie jądra. Czy to jest poprawne?


EDYTOWAĆ:

W odpowiedzi na komentarz zabójcy dopracuję to pytanie. Podczas gdy ogólnie szukam informacji na ten temat, szczególnie szukam czegoś w rodzaju „ Przewodnika tworzenia dystrybucji Darwina ”, podobnie jak LFS, to „ Przewodnika tworzenia dystrybucji w systemie Linux ”.

Rozumiem, że takie informacje prawdopodobnie będą pochodzić tylko od ludzi z Puredarwin , OpenDarwin lub GNU / Darwin, więc jest to coś w rodzaju wezwania do pomocy. PoradnikHow-We-Made-PureDarwin-Nano-Start-To-Finish ”, taki jak LFS, byłby idealny, ale wiem, że to wiele wymaga.


3
Prawdopodobnie warto spojrzeć na puredarwin, aby zobaczyć, co składa się na budowę dystrybucji opartej na darwin (i problemy, z którymi się zetknęli)
Journeyman Geek

1
Dla zwykłego użytkownika oba jądra wyglądają bardzo podobnie, ale oprogramowanie używane do zarządzania jądrem i oprogramowanie ściśle z nim związane (w tym libc) są zupełnie inne. Dokumentacja LFS nie będzie bardzo pomocna w tych krytycznych pierwszych krokach. Być może zaczynając od (lub przynajmniej studiując) gałąź Debiana kFreeBSD jest bardziej odpowiednia.
vonbrand

1
Wskazówka: jeśli faktycznie zadajesz pytanie, co próbujesz zrobić, oboje zwiększacie swoje szanse na znalezienie trafienia w już istniejących pytaniach, ale także zwiększacie prawdopodobieństwo, że przyciągnie ono więcej osób z pomysłami na odpowiedź na pytanie. . W przeciwieństwie do zamieszania, jakie jest to pytanie. Tylko myśl.
killermist

1
Darwin jest nieco oparty na BSD, który różni się od Linuksa. Sposób robienia rzeczy w BSD różni się więcej niż tylko jądrem (preferencje systemu plików, struktury katalogów, zasady aktualizacji itp.).
vesperto

2
Obawiam się, że binarna kompatybilność to nie to samo. @Vesperto ma rację, Darwin jest bliżej związany z rodziną BSD niż z Linuksem; aczkolwiek z zdecydowanie innym jądrem niż inne BSD. Myślę, że lepiej byłoby, gdybyś szukał przewodnika typu BFS niż przewodnika opartego na LFS. Podręcznik BSD byłby kolejnym dobrym źródłem informacji. Nadal będziesz musiał korzystać z referencji Darwina, aby uzyskać odpowiednie informacje.
Jerry W Jackson,

Odpowiedzi:


32

Aktualizacja 19 kwietnia 2015 r .:

Po dwóch latach nadal wydaje się, że zainteresowanie tą sferą jest bardzo małe. Jednak społeczność Hackintosha jest nadal bardzo aktywna, co oznacza, że ​​jeden z niewielu programów ładujących innych firm niż Apple, które są w stanie uruchomić Xnu (Chameleon i widelce), jest nadal obsługiwany i może uruchamiać Yosemite. Istnieją również historie sukcesu uruchamiania systemu OS X Yosemite w QEMU. Ponadto, dzięki (obecnie zatrudnionemu przez Apple) programistowi, który obsługuje Winocm , mamy port ARM jądra Xnu . Jest najbardziej aktywnym programistą, którego znam w tej dziedzinie.

Niedługo pojawi się także kontynuacja systemu Mac OS X Amit Singh . Zwykle nie lubię wspominać o osobistych stronach ludzi; serwer blogów z wszystkimi informacjami wydaje się jednak trochę zawodny, więc zobacz pole informacyjne na stronie ameaijou na Twitterze.

Udało mi się zbudować łańcuch narzędzi programistycznych Apple'a (self-host, jednak „Darwin SDK” został również przeniesiony do Linuksa ). Wierzę, że system operacyjny Darwin może być jeszcze możliwy do zbudowania od zera - prawie wszystko, czego nam brakuje, to niektóre Kexty typu open source. Obserwuj tę przestrzeń, a jeśli wiesz, jak wzbudzić zainteresowanie, daj mi znać! :)


Krótkie odpowiedzi na to pytanie:

Technicznie: tak

Praktycznie: nie *

Z kodami binarnymi: Prawdopodobnie, ale także nielegalne (nieprzetestowane)

Z kodami binarnymi dla ogólnego sprzętu: jak wyżej (nieprzetestowane)

* chyba że pracujesz w Apple (* odchrząkuje gardło w kierunku Kalifornii *)


Dłuższa odpowiedź:

To będzie raczej długie. Proponuję kawę. Jeśli nie masz czasu / ochoty na przeczytanie wszystkiego, możesz przejść do „Uwagi końcowe”.

Praktycznie możliwe (nie):

Niestety, Apple wycofało kod źródłowy zbyt wielu niezbędnych KEXT - ów i plików binarnych Darwina, aby kompilacja systemu operacyjnego Darwin była czysto możliwa ze źródła. Nadal jest to technicznie możliwe (możesz sam napisać źródło, aby poprawnie go załatać), ale po prostu nie mam czasu, umiejętności ani chęci, aby to zrobić (i wątpię, by społeczność finansująca tłum była bardzo zainteresowana).

Nic dziwnego, że kluczowym punktem zwrotnym było wydanie Darwin 10, który wprowadził xnu do ziemi x86_64. Większość niezbędnych źródeł istniała wcześniej, ale były tylko x86. Z biegiem czasu znaczenie „Apple Open Source” wydaje się zmieniać na „Open Source tylko na sprzęcie Apple”, ponieważ KEXT Apple'a są teraz specyficzne dla całego sprzętu, więc nawet gdybyś mógł wszystko podnieść i działając (patrz poniżej) nadal będziesz ograniczony do sprzętu Apple.

Technicznie możliwe (Tak):

Jednak nie wszystko jest stracone. Poradnik LFS przydał się i na pewno wszystkie niezbędne konfiguracje można przeprowadzić bez budowania systemu operacyjnego Darwin. Ponadto przedstawione kroki dają niemal dokładną mapę drogową ścieżki, pomijając jądro, KEXT i bootloader. Udało mi się jednak rozwiązać problem bootloadera (przynajmniej dla sprzętu Apple).

Jeśli jesteś zainteresowany, oto pełny przegląd tego, co będziesz musiał zrobić:

  • Wymaż partycję (najlepiej 8 GB lub więcej) na dysku (wewnętrznym lub zewnętrznym - nie ma znaczenia) i sformatuj ją jako Mac OS Extended (Journaled) (HFS +).
  • Upewnij się, że ma tabelę partycji GUID (GPT), a gdy to zrobisz, ma partycję EFI. Najłatwiej to zrobić za pomocą Narzędzia dyskowego Apple, ale możesz to zrobić w wierszu polecenia, jeśli chcesz (gdzie indziej znajdują się samouczki). Ważne jest, aby podczas uruchamiania distil list diskNsMnastępujące informacje były poprawne:

    Typ partycji: Apple_HFS

    System operacyjny można zainstalować: Tak

    Media tylko do odczytu: nie

    Głośność tylko do odczytu: nie

  • Teraz postępuj zgodnie z przewodnikiem LFS (z adaptacjami).

  • Wstaw (używając oczywiście rzeczywistego punktu montowania) do iDFS=/Volumes/DarwinOS.bashrc.bash_profile

  • Utwórz katalog użytkownika (na chownkońcu 0: 0):

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

    sudo su -
    
  • Utwórz katalog źródeł i ustaw lepki bit:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Stwórz katalog narzędzi i stwórz do niego dowiązanie symboliczne, abyśmy mogli później łatwo go dodać do $ PATH (nadal rootprzy okazji):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • Pobierz źródło wszystkich pakietów, które chcesz. Tu oczywiście utkniesz. Nie ma wszystkich niezbędnych. (Nawiasem mówiąc, wolę GNU binutilsw każdym razie).

Zakładając, że rzeczywiście możesz pobrać wszystkie potrzebne, kontynuujmy.

  • Utwórz upośledzonego użytkownika specjalnie dla DFS (sugerowane przez 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.
    
  • Pamiętaj, że musisz ręcznie ustawić homedir nowego użytkownika na komputerze Mac:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • Teraz przyznaj nowemu użytkownikowi dostęp do źródeł i narzędzi

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

    su - lfs
    Password: dfs
    
  • Uruchom następujące polecenie, aby wyczyścić środowisko (z LFS):

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • Teraz uruchom następujące polecenie (zobacz LFS, aby dowiedzieć się, co robi, jeśli nie jesteś pewien):

    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's /configurejest dość elastyczny. Spróbuj grep *-wzorca lub po prostu uruchom, gcc -vaby zobaczyć, jak skonfigurowano komputer hosta i skopiuj go.

  • Teraz wyloguj się z użytkownikiem lfs i zaloguj się ponownie. Powinieneś mieć czyste środowisko.
  • Odtąd wszystko odbywa się wewnątrz użytkownika LFS. Zauważysz, że byłem trochę leniwy w konwersji tylko połowy symboli „LFS” na symbole „DFS”. Przepraszam za to, ale masz pomysł.

OK, teraz do hipotetycznej części.

Odtąd całkiem nieźle będzie standardowa procedura LFS: Wyodrębniaj źródła, buduj, instaluj, testuj, usuwaj źródła. Zauważ, że 2 przejścia binutils, GCC i Glibc są nadal konieczne, ALE RÓWNIEŻ musisz mieć kopię roboczą libc++.1.dylib- i musisz to zrobić również w 2 przebiegach. Możesz zobaczyć stronę libcxx projektu LLVM, aby uzyskać więcej szczegółów. Po skompilowaniu możesz go włożyć /usr/lib. Musisz skompilować i zainstalować jądro Xnu ( w Internecie jest kilka samouczków, jak to zrobić), a następnie zainstalować KEXT. Nawet jeśli wszystkie wymagane KEXT są dostępne, nadal musisz ręcznie umieścić je w pakiecie .kext. Znów są tutoriale dotyczące ręcznego tworzenia KEXT w wierszu poleceń.

Ostatnim bitem jest uruchomienie systemu. Aby to zrobić, uruchom następujące polecenie:

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

W rzeczywistości miejsce, w którym można pobłogosławić, tak naprawdę nie robi różnicy. Ten folder jest po prostu standardem Apple.

W każdym razie, zakładając, że jądro i KEXTs były we właściwych miejscach, trzeba było odpowiednie kopie dyld, launchditp na miejscu i boot.efidziała poprawnie, system powinien pracować i startowy!

Uwaga: jeśli naprawdę chciałeś, możesz uruchomić fałszywkę - launchdto tylko skrypt uruchamiający monit bash - to właśnie robi PureDarwin Nano .

Ponownie, oczywiście, jeśli chcesz, sam napisz KEXT i pliki binarne - jest to technicznie możliwe. Zadzwoń, kiedy skończysz.


Z kodami binarnymi: Prawdopodobnie, ale także nielegalne (nieprzetestowane)

Dlaczego więc nie możesz po prostu zgrać plików binarnych, plików KEXT i wymaganych plików z Mountain Lion, pobłogosław głośność i gotowe? Cóż, prawdopodobnie możesz. Ale potrzebujesz również licencji, aby to zrobić. Ponadto, jeśli to zrobisz, po prostu zrobiłeś kopię Mountain Lion. Czy to nie ma sensu?

Z kodami binarnymi dla ogólnego sprzętu: jak wyżej (nieprzetestowane)

To dość dużo jest projekt OSx86. Znów od razu masz problemy prawne. Nie ma wątpliwości, że te dwie ostatnie metody są zdecydowanie możliwe - fakt, że możesz uruchomić Mountain Lion na ogólnym sprzęcie, jest tego dowodem - ale chodziło o to, aby móc legalnie skompilować własny system operacyjny Darwin ze źródła.


Dygresja

Być może zauważyłeś, że celowo unikałem czegoś 32-bitowego. W świecie, w którym każdy większy system operacyjny jest dostępny w wersji 64-bitowej, nie ma sensu kompilować wersji 32-bitowej. Jabłko rzeczywiście dostarczają obrazy dysków Darwina (Darwin aż 9) tutaj . Działały idealnie na moim pudełku Windows.

Uwagi końcowe

Myślę, że pod koniec dnia ludzie nie kupują Maca dla Darwina, oni kupują Maca dla Aqua. W rezultacie wsparcie dla Darwina jako samodzielnego produktu typu open source stopniowo spadło do tego stopnia, że ​​tak naprawdę jest to tylko symboliczny gest dla społeczności open source. Innym nieco ironicznym faktem jest to, że aby dowiedzieć się o tym dużo, musisz przejść od razu do projektu OSx86, który nie jest dokładnie usankcjonowany (mówiąc wprost). Nawet wtedy nie ma zbyt wielu informacji. PureDarwin to doskonałe miejsce na początek, a książka Jonathana Levina jest nieocenionym odniesieniem do wszystkich rzeczy xnu.

To był niezwykle edukacyjny rok pracy i jestem prawie tak szczęśliwy, wiedząc, jak to zrobić, jak bym to zrobił. Na pewnym etapie będę musiał przerwać pracę nad tym i teraz jest ten czas. Jako ostatni bezowocny okrzyk do Apple, czy byłoby zbyt wiele, aby poprosić o jeszcze jedną wersję Darwina po wydaniu Mavericks?


1

Oczywiście, zrozumiałeś, że LFS jest przeznaczony dla Linuksa, a Darwin bardzo różni się od stosowanego LFS w Linuksie, więc nie jest możliwe, abyś spróbował zastosować LFS w systemach Darwin.

Istnieje wiele prób wymiany / ulepszenia systemów Darwin przez społeczność. podczas gdy projekt OpenDarwin nie odnosi wielkiego sukcesu, zgadnij, że kod Apple jest zbyt trudny, podczas gdy pozostaje jeszcze jeden projekt PureDarwin:
PureDarwin SourceForge
PureDarwin HomePage

Najpierw załóż konto programisty, chwyć ich narzędzia do budowania, a następnie możesz wykonać kroki w celu stworzenia własnego niestandardowego jądra.

Jądro Darwina nie ma tej samej architektury co jądro Linuksa, więc nie można go zastąpić jądrem Linux, dlatego należy je skompilować.

Właściwie wszystko, co musisz zrobić, to trzymać się 100% projektu PureDarwin, a następnie wywołać następujący skrypt: Google Code - Jądro przełączania Pure Darwin z niestandardowymi obrazami jądra, które stworzyłeś, będą w porządku.

Ale jeśli chodzi o to, jak zbudować dobrze działające jądro Darwina, byłoby to nowe pytanie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.