Bir Darwin Distro'yu bir Linux Distro oluşturabileceğiniz gibi, kaynaktan derlemek mümkün mü?


42

Linux'u Scratch (ve BLFS) üzerinden okudum ve aldım ve merak ediyordum, xnuçekirdeği değiştirerek bir Darwin Distro oluşturmak için bu kılavuzu izleyebilir miyim ? İşlem LFS'de belirtilenlerden çok farklı mıydı?

Şu anki anlayışım, sistemi "Linux" yerine "Darwin" yapmak için gerekli olanın çekirdek ikamesi olacağıdır. Bu doğru mu?


DÜZENLE:

Katilistin yorumuna cevaben, bu soruyu düzelteceğim. Genel olarak bu konu hakkında bilgi ararken, özellikle de aradığım şey, LFS'ye benzeyen bir " Darwin Distro Oluşturma Kılavuzu " gibi bir şey , " Linux Distro Oluşturma Kılavuzu ".

Bu tür bilgilerin muhtemelen sadece Puredarwin , OpenDarwin veya GNU / Darwin’ten gelen insanlardan geleceğini takdir ediyorum, bu yüzden bu, onlara yardım için bir belirtme noktası. LFS gibi bir " Nasıl Yaptık-SafDarwin-Nano-Baştan-Sona " kılavuzu mükemmel olurdu, ama bunun çok şey istediğini biliyorum.


3
Darwin temelli bir dağıtım inşa etmenin ne olduğunu görmek için puredarwin'e bakmaya değer (ve bununla da opendarwin'in karşılaştığı sorunlar)
Journeyman Geek

1
Kullanıcıların düzenli kullanımı için her iki çekirdek de çok benzer görünüyor, ancak çekirdeği yönetmek için kullanılan yazılım ve bununla yakından ilgilenen yazılım (libc dahil) oldukça farklı. LFS dokümantasyonu bu kritik ilk adımlarda pek yardımcı olmayacaktır. Belki de Debian'ın kFreeBSD şubesinden başlayarak (ya da en azından ders çalışarak) daha ilgilidir.
vonbrand

1
İpucu: Gerçekten ne yapmaya çalıştığınızla ilgili bir soru yaparsanız, her ikisi de zaten var olan sorularda bir hit bulma şansınızı arttırır, ancak aynı zamanda soruyu nasıl cevaplayacağı konusunda fikirleri olan daha fazla insanı etkileyebilme olasılığını da artırırsınız. . Kafanın karışmasından ziyade sorunun gerçekte ne olduğu. Sadece bir düşünce.
katilist

1
Darwin, Linux'tan farklı olan BSD'ye dayanıyor. BSD'nin işleri yapması, çekirdekten (dosya sistemi tercihleri, dizin yapıları, yükseltme politikası vb.) Çok şeyden farklıdır.
vesperto

2
İkili ile uyumlu olmak aynı şey değil, korkarım. @Vesperto haklı, Darwin BSD ailesiyle Linux'la olduğundan daha yakından ilgilidir; diğer BSD'lerden tamamen farklı bir çekirdeğe rağmen. Bir BFS tipi rehber ararken LFS tabanlı bir rehbere göre daha iyi şansa sahip olacağınızı düşünüyorum. BSD El Kitabı başka bir iyi referans kaynağı olacaktır. Darwin referanslarınızı konuyla ilgili bilgiler için kullanmanız gerekir.
Jerry W Jackson,

Yanıtlar:


32

Güncelleme 19 Nis 2015:

İki yıl sonra hala bu alana çok az ilgi duyuyor gibi görünüyor. Bununla birlikte, Hackintosh topluluğu hala oldukça aktiftir, yani xnu (Chameleon and forks) önyükleyebilen Apple kaynaklı olmayan açık kaynaklı birkaç açıklayıcıdan birinin hala bakımı yapılmaktadır ve Yosemite'yi başlatabilir. QEMU'da OS X Yosemite'yi başlatan başarı hikayeleri de var. Dahası, kulp winocm'unu kullanan (şu anda Apple'ın çalıştığı) geliştiricisi sayesinde, xnu çekirdeğinin bir ARM portuna sahibiz . Bu alanda bildiğim en aktif geliştirici olmuştur.

Yakında Amit Singh'in Mac OS X Internals'ın bir devamı da var . Genelde insanların kişisel sayfalarından bahsetmekten hoşlanmam; Ancak, tüm bilgileri içeren blog sunucusu biraz güvenilmez görünüyor, bu yüzden ameaijou'nun Twitter sayfasındaki bilgi kutusuna bakın.

Apple'ın geliştirme araç zincirini (bir ev sahibi, ancak "Darwin SDK" da Linux'a taşınmıştır ) geliştirmeyi başardım . Darwin'in bir işletim sisteminin sıfırdan inşa edilebileceğine inanıyorum - eksik olabileceğimiz tek şey bazı açık kaynaklı Kexts. Bu boşluğu izleyin ve ilginizi nasıl artıracağınızı biliyorsanız, bana bildirin! :)


Bu sorunun kısa cevapları:

Teknik: evet

Pratik: Hayır *

İkili Hileler ile: Muhtemelen, ama aynı zamanda yasal değil (denenmemiş)

Genel donanım için İkili Hileler ile: Yukarıdaki gibi (denenmemiş)

* Apple'da çalışmadıkça (* genel Kaliforniya yönündeki boğazı temizler *)


Daha uzun cevap:

Bu oldukça uzun sürecek. Ben kahve öneririm. Hepsini okumak için zamanınız / eğriniz yoksa, "Sonuç Notları" na atlayabilirsiniz.

Pratikte Mümkün (Hayır):

Ne yazık ki, Apple, bir Darwin işletim sisteminin derlenmesini tamamen kaynaktan mümkün kılmak için Darwin’in birçok KEXT’si ve ikili kodunun kaynak kodunu geri çekti . Hala teknik olarak mümkün (kaynağını uygun şekilde düzeltmek için kendin yazabilirsin), ama bunu yapmak için zamanım, becerim veya eğilimim yok (ve kalabalık fon topluluğunun çok ilgileneceğinden şüpheliyim).

Şaşırtıcı olmayan bir şekilde, kilit devrilme noktası, xnu x86_64 ülkesine getiren Darwin 10'un serbest bırakılmasıydı. Gerekli kaynakların çoğu ondan önceydi, ancak yalnızca x86 idi. Zaman geçtikçe, Apple’ın "Açık Kaynak" ’ın anlamı, Apple’ın KEXT’leri artık her şeyden daha iyi anlaşabilseniz bile, her geçen gün donanıma özgü donanımlara özel olduğu için" Yalnızca Apple’ın donanımındaki Açık Kaynak "’ a geçti. çalışırken (aşağıya bakın), yine de Apple donanımıyla sınırlı kalacaksınız.

Teknik Olarak Mümkün (Evet):

Ancak, hepsi kayıp değil. LFS kılavuzu oldukça kullanışlı hale geldi ve Darwin kurulumunu kurmadan gerekli tüm kurulum işlemlerini gerçekleştirebiliyorlardı. Dahası, sunulan adımlar, çekirdeği, KEXT'leri ve önyükleyiciyi izleyerek önünüzdeki yolun neredeyse kesin bir yol haritasını verir. Yine de bootloader problemini çözmeyi başardım (en azından Apple donanımı için).

İlgileniyorsanız, yapmanız gerekenler hakkında genel bir bakış:

  • Bir sürücüdeki (tercihen 8 GB veya daha büyük) bir bölümü silin (dahili veya harici - önemli değil) ve Mac OS Extended (Journaled) (HFS +) olarak biçimlendirin.
  • Bir GUID Bölümleme Tablosunun (GPT) olduğundan ve bunu yaparken bir EFI bölümünün olduğundan emin olun. Bunu yapmanın en kolay yolu, Apple'ın Disk Yardımcı Programı'ndan geçer, ancak isterseniz komut satırından yapabilirsiniz (bunun nasıl yapılacağı hakkında başka yerlerde dersler vardır). Önemli olan nokta, çalıştırdığınızda distil list diskNsM, aşağıdaki bilgilerin doğru olması gerektiğidir:

    Bölüm Türü: Apple_HFS

    İşletim Sistemi Yüklenebilir: Evet

    Salt Okunur Medya: Hayır

    Salt Okunur Hacmi: Hayır

  • Şimdi LFS rehberini takip edin (uyarlamalar ile).

  • Takın içine (besbelli, gerçek bağlama noktası kullanılarak) veDFS=/Volumes/DarwinOS.bashrc.bash_profile

  • Kullanıcı dizinini yapın ( chownen sonunda 0: 0'a):

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

    sudo su -
    
  • Sources dizinini yapın ve yapışkan bit'i ayarlayın:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Tools dizinini oluşturun ve bir link oluşturun, böylece daha sonra $ PATH öğesine kolayca ekleyebiliriz ( rootbu arada hala ):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • İstediğiniz tüm paketlerin kaynağını indirin. Elbette, burada sıkışıp kaldığınız yer burasıdır. Gerekli olanların hepsi orada değil. (Bu arada, binutilszaten GNU'ları tercih ediyorum .)

Gerçekte ihtiyacınız olan her şeyi indirebileceğinizi varsayalım, hadi basalım.

  • Özellikle DFS için imtiyazlı bir kullanıcı olun (LFS tarafından önerilir):

    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.
    
  • Yeni kullanıcının ana sayfasını bir Mac'te elle yönlendirmeniz gerektiğini unutmayın:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • Şimdi yeni kullanıcıya kaynaklara ve araçlara erişim izni verin

    sudo chown -v lfs $DFS/tools
    sudo chown -v lfs $DFS/sources
    
  • Oturum aç:

    su - lfs
    Password: dfs
    
  • Ortamı temizlemek için aşağıdaki komutu çalıştırın (LFS'den):

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • Şimdi aşağıdaki komutu çalıştırın (emin değilseniz ne yaptığını görmek için LFS'ye bakın):

    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'ler /configureoldukça esnektir. Deseni çizmeyi deneyin *-veya yalnızca gcc -vana makinenizin nasıl yapılandırıldığını görmek için çalıştırın ve kopyalayın.

  • Şimdi lfs kullanıcısının oturumunu kapatıp tekrar giriş yapın. Şimdi temiz bir ortama sahip olmalısınız.
  • Bundan sonra her şey lfs kullanıcısının içinde gerçekleşiyor. 'LFS' sembollerinin sadece yarısını 'DFS' sembollerine dönüştürürken biraz tembel olduğumu fark edeceksiniz. Bunun için üzgünüm ama sen anladın.

Tamam, şimdi varsayımsal bölüme.

Buradan itibaren standart LFS prosedürü olacak: Kaynakları ayıkla, inşa et, kur, test et, kaynakları sil. Binutils, GCC ve Glibc'in 2 geçişinin hala gerekli olduğunu unutmayın, ancak bununla birlikte çalışan bir kopyasına sahip libc++.1.dylibolmalısınız - ve bunu 2 seferde de yapmanız gerekir. LLVM projesinin libcxx sayfasını birkaç detay için görebilirsiniz. Bir kez derlendiğinde, içine koyabilirsiniz /usr/lib. Xnu çekirdeğini derlemeniz ve kurmanız gerekir (bunun nasıl yapılacağı hakkında web'de birkaç ders vardır) ve sonra KEXT'leri kurmanız gerekir. Gerekli tüm KEXT'ler mevcut olsa bile, bunları elle .kext paketine koymanız gerekir. Yine komut satırında bir KEXT'yi nasıl elde edeceğinize dair öğreticiler var .

Son bit sistemi önyüklenebilir hale getiriyor. Bunu yapmak için aşağıdaki komutu çalıştırın:

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

Aslında korusun yer gerçekten bir fark yaratmaz. Bu klasör sadece Apple standardında.

Her durumda, çekirdek varsayarak ve kexts doğru yerlerde, biliyor doğru kopyalarını vardı dyld, launchdyerinde, vs ve boot.efisistem çalışıyor ve önyüklenebilir olmalıdır düzgün çalışıyordu!

Not: Gerçekten size bir hata launchdverebilecekseniz, bu sadece bir bash istemini çalıştırmak için yazılmış bir betiktir - PureDarwin Nano'nun yaptığı şeydir .

Gibi Yine, elbette, kexts ve ikilileri kendiniz yazmak - bu olduğunu teknik olarak mümkün. İşin bitince beni ara.


İkili Hileler ile: Muhtemelen, fakat aynı zamanda yasal değil (denenmemiş)

Öyleyse neden sadece ikili dosyaları, KEXT'leri ve gerekli dosyaları Mountain Lion'dan sökemiyorsun, haberi kutsa ve git. Muhtemelen yapabilirsin. Ancak, bunun için bir lisansa ihtiyacınız var. Ayrıca, bunu yaparsanız, temel olarak Mountain Lion'un bir kopyasını yaptınız. Mesele bu değil mi?

Genel donanım için İkili Hileler ile: Yukarıdaki gibi (denenmemiş)

Bu hemen hemen bir OSx86 projesi. Yine hemen hemen yasal meselelere maruz kalıyorsunuz. Bu son iki yöntemin kesinlikle mümkün olduğu konusunda hiçbir şüphe yoktur - Mountain Lion'ı genel donanımda çalıştırabileceğiniz gerçeği bunun kanıtıdır - ancak bunun amacı, kendi Darwin işletim sisteminizi yasal olarak kaynaklardan derleyebilmekti.


Kenar notu

Kasten 32-bit bir şeyden kaçındığımı fark etmiş olabilirsin. Her büyük işletim sisteminin 64-bit'de mevcut olduğu bir dünyada, 32-bit'i derlemede fazla bir nokta yoktur. Apple, burada Darwin'in disk görüntülerini (Darwin 9'a kadar) verdi . Windows kutumda mükemmel çalışıyorlardı.

Son sözler

Sanırım günün sonunda insanlar Darwin için Mac almıyorlar, Aqua için Mac alıyorlar. Sonuç olarak, Darwin'e bağımsız bir destek olarak açık kaynaklı ürün, açık kaynak topluluğuna gerçekten sadece belirteçli bir jest olduğu noktasında giderek azaldı. Hafifçe ironik olan bir başka gerçek ise, bunun hakkında bir çok şey öğrenmek için, tam olarak onaylanmayan (sıkıntıya sokmak için) doğrudan OSx86 projesine atlamanız gerektiğidir. O zaman bile, etrafta pek fazla bilgi yok. PureDarwin başlamak için mükemmel bir yer ve Jonathan Levin'in kitabı xnu'daki her şey için paha biçilmez bir referans.

Bu oldukça eğitici bir çalışma yılı oldu ve neredeyse nasıl yapacağımı bildiğim kadar mutluyum. Yine de bir aşamada çalışmayı bırakmam gerekecek ve şimdi o zaman. Son bir boşuna Apple'a bağırırken, Mavericks'i serbest bıraktığınızda yalnızca bir tane daha Darwin binası olmasını istemek çok mu fazla olurdu?


1

Belli ki, LFS'nin Linux için olduğunu ve Darwin'in uygulanan Linux LFS'den çok farklı olduğunu kabul ettiniz, bu nedenle LFS'yi Darwin sistemlerine uygulamak için tek kişiliğinizle uğraşmanızın ötesinde basittir.

Darwin sistemlerini değiştirmek / geliştirmek için birçok topluluk girişimi vardır. OpenDarwin projesi pek başarılı olmasa da, Apple'ın kodunun çok zor olduğunu tahmin ederken, yine de PureDarwin'den kalan bir proje var:
PureDarwin SourceForge
PureDarwin Ana Sayfa

Önce bir Geliştirici Hesabı edinin, Oluşturma araçlarını alın, sonra kendi Kernel'inizi oluşturma konusunda adımlar atabilirsiniz.

Darwin Çekirdeği, Linux Çekirdeği ile aynı mimariye sahip değildir, bu nedenle Linux Çekirdeği ile değiştirilemez, bu yüzden onu derlemeniz gerekir.

Aslında yapmanız gereken tek şey PureDarwin projesine% 100 bağlı kalmak, ardından aşağıdaki betiği çağırmak: Google Code - Özel Darwin Çekirdeği özel Çekirdeğinizle yaptığınız Çekirdek Görüntüler iyi olacak.

Ancak iyi çalışan bir Darwin Çekirdeği'nin nasıl inşa edileceği ile ilgili olarak, bu yeni bir soru olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.