Apakah mungkin untuk mengompilasi Darwin Distro dari sumber, seperti Anda dapat membangun Linux Distro?

42

Saya telah membaca dan menjalankan Linux From Scratch (dan BLFS) dan saya bertanya-tanya, dapatkah saya mengikuti panduan ini untuk membuat Distro Darwin dengan mengganti xnukernel? Apakah prosesnya akan sangat berbeda dengan yang diuraikan dalam LFS?

Pemahaman saya saat ini adalah bahwa semua yang diperlukan untuk membuat sistem "Darwin" daripada "Linux" akan menjadi substitusi kernel. Apakah ini benar?


EDIT:

Menanggapi komentar pembunuh, saya akan memperbaiki pertanyaan ini. Sementara saya mencari informasi tentang topik ini secara umum, apa yang saya cari secara khusus adalah sesuatu seperti " Panduan Penciptaan Distro Darwin " seperti halnya LFS adalah " Panduan Penciptaan Distro Linux ".

Saya menghargai bahwa informasi seperti itu mungkin hanya akan datang dari orang-orang dari Puredarwin , OpenDarwin atau GNU / Darwin jadi ini adalah sesuatu yang memanggil mereka untuk meminta bantuan. Panduan " Bagaimana-Kita-Membuat-PureDarwin-Nano-Start-To-Finish " seperti LFS akan sempurna, tetapi saya tahu itu banyak bertanya.

Sesuatu yg tdk kekal
sumber
3
Mungkin patut melihat puredarwin untuk melihat apa yang akan membangun distro berbasis darwin (dan masalah yang mereka dan opendarwin hadapi dalam hal ini)
Journeyman Geek
1
Untuk userland biasa kedua kernel terlihat sangat mirip, tetapi perangkat lunak yang digunakan untuk mengelola kernel dan perangkat lunak yang terlibat erat dengannya (termasuk libc) sangat berbeda. Dokumentasi LFS tidak akan banyak membantu dalam langkah pertama yang penting ini. Mungkin mulai dari (atau paling tidak belajar) cabang Debian kFreeBSD lebih relevan.
vonbrand
1
Petunjuk: Jika Anda benar-benar membuat pertanyaan tentang apa yang Anda coba lakukan, Anda berdua meningkatkan peluang Anda untuk menemukan hit di pertanyaan yang sudah ada, tetapi juga meningkatkan kemungkinan itu akan menarik lebih banyak orang dengan ide-ide untuk bagaimana menjawab pertanyaan itu. . Berbeda dengan bingung apa sebenarnya pertanyaannya. Hanya pemikiran saja.
killermist
1
Darwin agak didasarkan pada BSD, yang berbeda dari Linux. Cara BSD melakukan sesuatu berbeda dalam banyak hal lebih dari sekedar kernel (preferensi filesystem, struktur direktori, kebijakan pemutakhiran, dll).
vesperto
2
Menjadi biner kompatibel dengan bukan hal yang sama, saya khawatir. @Vesperto benar, Darwin lebih dekat hubungannya dengan keluarga BSD daripada ke Linux; walaupun dengan kernel yang jelas berbeda dari BSD lainnya. Saya pikir Anda akan lebih beruntung mencari panduan jenis BFS daripada yang berbasis LFS. Buku Pegangan BSD akan menjadi sumber referensi lain yang bagus. Anda masih perlu menggunakan referensi Darwin Anda untuk mendapatkan informasi yang relevan.
Jerry W Jackson

Jawaban:

32

Pembaruan 19 Apr 2015:

Setelah dua tahun tampaknya masih ada sedikit minat dalam bidang ini. Namun, komunitas Hackintosh masih sangat aktif, artinya salah satu dari sedikit bootloader non-Apple open source yang mampu mem-boot xnu (Chameleon dan fork) masih dipertahankan dan dapat mem-boot Yosemite. Ada juga kisah sukses mem-boot OS X Yosemite dalam QEMU. Selain itu, terima kasih kepada pengembang (sekarang dipekerjakan oleh Apple) yang menggunakan winocm handle , kami memiliki port ARM dari kernel xnu . Dia telah menjadi pengembang paling aktif yang saya tahu di bidang ini.

Ada juga sekuel dari Amit Singh untuk Mac OS X Internal yang akan segera hadir. Saya biasanya tidak suka menyebutkan halaman pribadi orang; namun, server blog dengan semua info tampaknya sedikit tidak bisa diandalkan, jadi lihat kotak info di halaman Twitter ameaijou .

Saya telah berhasil membangun toolchain pengembangan Apple (sebuah host sendiri, namun "Darwin SDK" juga telah diangkut ke Linux ). Saya percaya bahwa OS Darwin mungkin masih dapat dibangun dari awal - tentang semua yang mungkin kita lewatkan adalah beberapa Kexts open-source. Tonton ruang ini, dan jika Anda tahu cara menarik minat, beri tahu saya! :)


Jawaban singkat untuk pertanyaan ini:

Secara teknis: Ya

Praktis: Tidak *

Dengan Binary Cheats: Mungkin, tetapi juga tidak sah (tidak diuji)

Dengan Binary Cheats untuk perangkat keras umum: Seperti di atas (belum diuji)

* kecuali Anda bekerja di Apple (* membersihkan tenggorokan di arah umum California *)


Jawaban yang lebih panjang:

Ini akan menjadi agak lama. Saya sarankan kopi. Jika Anda tidak punya waktu / kecenderungan untuk membacanya semua, Anda dapat melompat ke "Keterangan Penutup".

Kemungkinan Praktis (Tidak):

Sayangnya, Apple telah menarik kode sumber untuk terlalu banyak KEXT dan binari Darwin yang diperlukan untuk membuat kompilasi dari Darwin OS murni dari sumber yang mungkin. Secara teknis masih mungkin (Anda bisa menulis sendiri sumbernya untuk menambalnya dengan benar), tetapi saya tidak punya waktu, keterampilan, atau kecenderungan untuk melakukan ini (dan saya ragu komunitas pendanaan kerumunan akan sangat tertarik).

Tidak mengherankan bahwa titik kritis utama adalah pelepasan Darwin 10, yang membawa xnu ke daratan x86_64. Sebagian besar sumber yang diperlukan ada sebelum itu, tetapi hanya x86. Seiring berjalannya waktu, makna "Open Source" Apple tampaknya telah bergeser ke "Open Source hanya pada perangkat keras Apple" karena KEXT Apple sekarang merupakan perangkat keras khusus, jadi bahkan jika Anda bisa mendapatkan semuanya dan menjalankan (lihat di bawah) Anda masih akan terbatas pada perangkat keras Apple.

Kemungkinan Secara Teknis (Ya):

Namun, semuanya tidak hilang. Panduan LFS memang berguna dan tentu saja semua pengaturan yang diperlukan dapat dilakukan tanpa benar-benar membangun OS Darwin. Lebih lanjut, langkah-langkah yang disajikan memberi Anda peta jalan yang hampir pasti dari jalan di depan, minus kernel, KEXTs dan bootloader. Saya berhasil menyelesaikan masalah bootloader (setidaknya untuk perangkat keras Apple).

Jika Anda tertarik, berikut ini ikhtisar lengkap tentang apa yang harus Anda lakukan:

  • Hapus partisi (8 GB atau lebih besar lebih disukai) pada drive (internal atau eksternal - tidak masalah) dan format itu sebagai Mac OS Extended (Journaled) (HFS +).
  • Pastikan ia memiliki Tabel Partisi GUID (GPT) dan ketika Anda melakukannya, ia memiliki partisi EFI. Cara termudah untuk melakukan ini adalah melalui Disk Utility Apple, tetapi Anda dapat melakukannya di baris perintah jika Anda mau (ada tutorial di tempat lain tentang cara melakukan ini). Poin penting adalah bahwa ketika Anda menjalankan distil list diskNsM, informasi berikut harus benar:

    Jenis Partisi: Apple_HFS

    OS Dapat Dipasang: Ya

    Media Hanya Baca: Tidak

    Volume Hanya Baca: Tidak

  • Sekarang untuk mengikuti panduan LFS (dengan adaptasi).

  • Masukkan (menggunakan titik mount sebenarnya, jelas) ke dalam danDFS=/Volumes/DarwinOS.bashrc.bash_profile

  • Buat direktori pengguna ( chownmenjadi 0: 0 di bagian paling akhir):

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

    sudo su -
    
  • Buat direktori sources dan atur bit sticky:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Buat direktori alat dan buat symlink untuk itu sehingga kita bisa menambahkannya dengan mudah ke $ PATH nanti (masih ada rootcara):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • Unduh sumber dari semua paket yang Anda inginkan. Ini, tentu saja, di mana Anda terjebak. Semua yang diperlukan tidak ada di sana. (Kebetulan, saya lebih suka GNU binutils.)

Dengan asumsi Anda sebenarnya bisa mengunduh semua yang Anda butuhkan, mari kita lanjutkan.

  • Buat pengguna yang kurang mampu khusus untuk DFS (disarankan oleh 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.
    
  • Catatan Anda harus membuat homedir pengguna baru secara manual di Mac:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • Sekarang beri pengguna akses baru ke sumber dan alat

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

    su - lfs
    Password: dfs
    
  • Jalankan perintah berikut untuk membersihkan lingkungan (dari LFS):

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • Sekarang jalankan perintah berikut (lihat LFS untuk apa fungsinya jika Anda tidak yakin):

    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 /configurecukup fleksibel. Coba ambil *-pola, atau jalankan gcc -vuntuk melihat bagaimana mesin host Anda dikonfigurasi dan salin itu.

  • Sekarang keluarlah dari pengguna lfs dan masuk kembali. Sekarang Anda harus memiliki lingkungan yang bersih.
  • Semuanya mulai sekarang terjadi di dalam pengguna lfs. Anda akan melihat bahwa saya sedikit malas hanya mengubah setengah simbol 'LFS' menjadi simbol 'DFS'. Maaf tentang itu tetapi Anda mendapatkan ide.

Oke sekarang ke bagian hipotetis.

Dari sini, cukup baik untuk menjadi prosedur LFS standar: Ekstrak sumber, bangun, pasang, uji, hapus sumber. Perhatikan 2 pass binutils, GCC dan Glibc masih diperlukan, TAPI JUGA Anda juga harus memiliki copy berfungsi libc++.1.dylib- dan Anda harus melakukannya dalam 2 pass juga. Anda dapat melihat halaman libcxx proyek LLVM untuk lebih jelasnya. Setelah dikompilasi, Anda dapat memasukkannya /usr/lib. Anda perlu mengkompilasi dan menginstal kernel xnu (ada beberapa tutorial di web untuk cara melakukannya) dan kemudian menginstal KEXTs. Bahkan jika semua KEXT yang diperlukan tersedia, Anda masih harus memasukkannya ke dalam paket .kext dengan tangan. Sekali lagi ada tutorial untuk bagaimana membuat kerajinan KEXT pada baris perintah.

Bit terakhir membuat sistem dapat di-boot. Untuk melakukan itu, Anda akan menjalankan perintah berikut:

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

Sebenarnya lokasi untuk memberkati tidak benar-benar membuat perbedaan. Folder itu hanya standar Apple.

Dalam kasus apapun, dengan asumsi kernel dan kexts berada di tempat yang tepat, Anda memiliki salinan tepat dari dyld, launchd, dll di tempat dan boot.efibekerja dengan benar, sistem harus bekerja dan bootable!

Catatan jika Anda benar-benar ingin Anda dapat menjalankan imitasi - launchditu hanya sebuah skrip untuk menjalankan bash prompt - itulah yang dilakukan PureDarwin Nano .

Sekali lagi, dengan segala cara, menulis kexts dan binari sendiri jika Anda suka - itu adalah teknis mungkin. Panggil saja saya setelah selesai.


Dengan Binary Cheats: Mungkin, tetapi juga tidak sah (tidak diuji)

Jadi, mengapa Anda tidak bisa hanya merobek binari, KEXT dan file yang diperlukan dari Mountain Lion, memberkati volume dan pergi? Yah, kamu mungkin bisa. Tetapi Anda juga perlu lisensi untuk melakukan ini. Juga, jika Anda melakukan ini, pada dasarnya Anda baru saja membuat salinan Mountain Lion. Bukankah itu intinya?

Dengan Binary Cheats untuk perangkat keras umum: Seperti di atas (belum teruji)

Ini cukup banyak adalah proyek OSx86. Sekali lagi Anda langsung mengalami masalah hukum. Tidak ada keraguan bahwa kedua metode terakhir ini benar-benar mungkin - fakta bahwa Anda dapat menjalankan Mountain Lion pada perangkat keras generik adalah buktinya - tetapi inti dari semua ini adalah untuk dapat mengkompilasi OS Darwin Anda dari sumber secara sah.


Catatan Samping

Anda mungkin memperhatikan bahwa saya sengaja menghindari sesuatu yang 32-bit. Di dunia di mana setiap OS utama tersedia dalam 64-bit, tidak ada gunanya mengkompilasi 32-bit. Apple memang menyediakan gambar disk Darwin (hingga Darwin 9) di sini . Mereka bekerja dengan sempurna di kotak Windows saya.

Keterangan Penutup

Saya kira pada akhirnya, orang tidak membeli Mac untuk Darwin, mereka membeli Mac untuk Aqua. Akibatnya, dukungan untuk Darwin sebagai produk open-source mandiri, secara bertahap menurun ke titik di mana itu benar-benar hanya isyarat token bagi komunitas open-source. Fakta lain yang agak ironis adalah bahwa untuk mempelajari banyak hal ini, Anda harus langsung masuk ke proyek OSx86, yang tidak sepenuhnya disetujui (untuk membuatnya dengan jelas). Meski begitu, tidak ada banyak informasi di sekitarnya. PureDarwin adalah tempat yang bagus untuk memulai, dan buku Jonathan Levin adalah referensi yang sangat berharga untuk semua hal xnu.

Ini merupakan tahun kerja yang sangat mendidik, dan saya hampir sama senangnya mengetahui cara melakukannya sama seperti saya akan benar-benar melakukannya. Saya harus berhenti bekerja pada tahap tertentu dan sekarang saatnya. Sebagai teriakan terakhir yang sia-sia bagi Apple, apakah terlalu berlebihan untuk meminta memiliki satu lagi bangunan Darwin ketika Anda melepaskan Mavericks?

Sesuatu yg tdk kekal
sumber
1

Jelas, Anda telah mengakui bahwa LFS adalah untuk Linux dan Darwin sangat jauh berbeda dari LFS Linux yang diterapkan, sehingga sangat sederhana di luar upaya satu orang Anda untuk menerapkan LFS ke sistem Darwin.

Ada banyak upaya masyarakat untuk mengganti / meningkatkan sistem Darwin. sementara proyek OpenDarwin tidak banyak berhasil, tebak kode oleh Apple terlalu sulit, sementara masih ada satu proyek yang tersisa
PureDarwin : PureDarwin SourceForge
PureDarwin HomePage

Dapatkan Akun Pengembang terlebih dahulu, Ambil alat build mereka, maka Anda bisa mendapatkan langkah-langkah membuat Kernel kustom Anda sendiri.

Kernel Darwin tidak memiliki arsitektur yang sama dengan Kernel Linux, jadi, tidak dapat diganti dengan Kernel Linux, jadi Anda perlu mengkompilasinya.

Sebenarnya yang perlu Anda lakukan adalah tetap menggunakan 100% proyek PureDarwin, lalu panggil skrip berikut: Google Code - Pure Darwin Switch Kernel dengan Gambar Kernel khusus yang telah Anda buat akan baik-baik saja.

Tetapi mengenai bagaimana membangun Kernel Darwin yang berfungsi dengan baik, itu akan menjadi pertanyaan baru.


sumber