GNU/Linux >> Belajar Linux >  >> Linux

Apakah mungkin untuk mengkompilasi Distro Darwin dari sumber, seperti Anda dapat membuat Distro Linux?

Pembaruan 19 Apr 2015:

Setelah dua tahun tampaknya masih ada sedikit minat di bidang ini. Namun, komunitas Hackintosh masih sangat aktif, artinya salah satu dari beberapa 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 di dalam QEMU. Selain itu, terima kasih kepada pengembang (sekarang bekerja di Apple) yang menggunakan pegangan winocm , kami memiliki port ARM dari kernel xnu. Dia telah menjadi developer paling aktif yang saya tahu di area ini.

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

Saya telah berhasil membangun toolchain pengembangan Apple (host-sendiri, namun "Darwin SDK" juga telah di-porting ke Linux). Saya yakin bahwa Darwin OS mungkin masih dapat dibangun dari awal – yang mungkin kita lewatkan hanyalah beberapa Kexts open-source. Perhatikan ruang ini, dan jika Anda tahu cara membangkitkan minat, beri tahu saya! :)

Jawaban singkat untuk pertanyaan ini:

Secara teknis: Ya

Praktis: Tidak*

Dengan Curang Biner: Mungkin, tapi juga tidak legal (belum teruji)

Dengan Cheat Biner untuk perangkat keras generik: Seperti di atas (belum diuji)

*kecuali Anda bekerja di Apple (*berdeham di arah umum California*)

Jawaban yang lebih panjang:

Ini akan menjadi agak lama. Saya menyarankan kopi. Jika Anda tidak punya waktu/keinginan untuk membaca semuanya, Anda dapat melompat ke "Keterangan Penutup".

Hampir Bisa (Tidak):

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

Tidak mengherankan, titik kritis utamanya adalah rilis Darwin 10, yang membawa xnu ke x86_64-land. Sebagian besar sumber yang diperlukan ada sebelum itu, tetapi hanya x86. Seiring berjalannya waktu, arti dari "Sumber Terbuka" Apple tampaknya telah bergeser menjadi "Sumber Terbuka hanya pada perangkat keras Apple" karena KEXT Apple sekarang pada umumnya khusus untuk perangkat keras, jadi bahkan jika Anda dapat menyiapkan semuanya dan berjalan (lihat di bawah), Anda masih terbatas pada perangkat keras Apple.

Secara Teknis Mungkin (Ya):

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

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

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

    Jenis Partisi:Apple_HFS

    OS Dapat Diinstal:Ya

    Media Hanya Baca:Tidak

    Volume Hanya Baca:Tidak

  • Sekarang untuk mengikuti panduan LFS (dengan adaptasi).

  • Masukkan DFS=/Volumes/DarwinOS (menggunakan mount point sebenarnya) ke .bashrc dan .bash_profile

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

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

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

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Buat direktori tools dan buat symlink ke sana sehingga kita dapat menambahkannya dengan mudah ke $PATH nanti (masih di root ngomong-ngomong):

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

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

  • Buat pengguna 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 baru akses 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 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
    
  • /configure GCC cukup fleksibel. Coba ambil *- pola, atau jalankan saja gcc -v untuk melihat bagaimana mesin host Anda dikonfigurasi dan salin itu.

  • Sekarang logout dari pengguna lfs dan login kembali. Anda sekarang harus memiliki lingkungan yang bersih.
  • Semuanya dari sekarang terjadi di dalam pengguna lfs. Anda akan melihat saya sedikit malas hanya mengubah setengah simbol 'LFS' menjadi simbol 'DFS'. Maaf tentang itu, tetapi Anda mengerti.

Oke sekarang ke bagian hipotetis.

Dari sini keluar itu akan menjadi prosedur LFS standar:Ekstrak sumber, bangun, instal, uji, hapus sumber. Perhatikan bahwa 2 lintasan binutils, GCC dan Glibc masih diperlukan TETAPI Anda JUGA harus memiliki salinan libc++.1.dylib yang berfungsi – dan Anda juga harus melakukannya dalam 2 lintasan. Anda dapat melihat halaman libcxx proyek LLVM untuk beberapa detail lebih lanjut. Setelah dikompilasi, Anda dapat memasukkannya ke dalam /usr/lib . Anda harus mengkompilasi dan menginstal kernel xnu (ada beberapa tutorial di web tentang cara melakukannya) dan kemudian menginstal KEXTs. Bahkan jika semua KEXT yang diperlukan tersedia, Anda masih perlu memasukkannya ke dalam paket .kext secara manual. Sekali lagi ada tutorial tentang cara membuat KEXT dengan tangan di baris perintah.

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

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

Sebenarnya lokasi untuk memberkati tidak terlalu berpengaruh. Folder itu hanya standar Apple.

Bagaimanapun, dengan asumsi kernel dan KEXT berada di tempat yang tepat, Anda memiliki salinan yang tepat dari dyld , launchd , dll di tempat dan boot.efi berfungsi dengan benar, sistem seharusnya berfungsi dan dapat di-boot!

Perhatikan jika Anda benar-benar ingin, Anda dapat menjalankan faux-launchd itu hanya skrip untuk menjalankan prompt bash – itulah yang dilakukan PureDarwin Nano.

Sekali lagi, tentu saja, tulis sendiri KEXT dan binari jika Anda suka – ini adalah secara teknis mungkin. Hubungi saja saya setelah selesai.

Dengan Cheat Biner:Mungkin, tetapi juga tidak legal (belum diuji)

Jadi, mengapa Anda tidak merobek binari, KEXT, dan file yang diperlukan dari Mountain Lion, memberkati volumenya, dan pergi? Nah, Anda mungkin bisa. Tetapi Anda juga memerlukan lisensi untuk melakukan ini. Juga, jika Anda melakukan ini, pada dasarnya Anda baru saja membuat salinan Mountain Lion. Bukankah itu tidak penting?

Dengan Cheat Biner untuk perangkat keras umum:Seperti di atas (belum diuji)

Ini adalah proyek OSx86. Sekali lagi Anda langsung mengalami masalah hukum. Tidak diragukan lagi bahwa dua metode terakhir ini pasti memungkinkan – fakta bahwa Anda dapat menjalankan Mountain Lion pada perangkat keras umum adalah buktinya – tetapi inti dari semua ini adalah untuk dapat mengkompilasi OS Darwin Anda sendiri secara sah dari sumber.

Catatan Samping

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

Penutup

Saya kira pada akhirnya, orang tidak membeli Mac untuk Darwin, mereka membeli Mac untuk Aqua. Akibatnya, dukungan untuk Darwin sebagai produk open-source yang berdiri sendiri secara bertahap menurun ke titik di mana itu benar-benar hanya isyarat tanda untuk komunitas open-source. Fakta lain yang agak ironis adalah bahwa untuk mempelajari banyak hal tentang ini, Anda harus terjun langsung ke proyek OSx86, yang tidak benar-benar disetujui (dengan kata lain). Meski begitu, tidak ada banyak informasi di sekitar. PureDarwin adalah tempat yang sangat baik 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 bagaimana melakukannya karena saya akan benar-benar melakukannya. Saya harus berhenti mengerjakannya pada tahap tertentu dan sekaranglah waktunya. Sebagai seruan terakhir yang sia-sia kepada Apple, apakah terlalu berlebihan untuk meminta hanya satu build Darwin lagi saat Anda merilis Mavericks?


Linux
  1. Bagaimana cara mengkompilasi pustaka standar glibc C saya sendiri dari sumber dan menggunakannya?

  2. Bisakah saya mem-boot Linux dari VHD?

  3. Apakah mungkin membangun distro Linux yang mendukung paket RPM dan .deb?

  1. Dapatkah Anda membuatnya? Kompilasi Program C di Linux Menggunakan Make Command

  2. Cara Mengkompilasi dan Menginstal Perangkat Lunak dari Kode Sumber di Linux

  3. Bisakah Anda Menjalankan Xcode di Linux?

  1. Instal Apache 2 dari Sumber di Linux

  2. Bisakah saya membangun distro linux dengan libc, bukan glibc

  3. Belajar mengkompilasi sesuatu dari sumber (di Unix/Linux/OSX)