Чи можливо скомпонувати Darwin Distro з джерела, як ви можете створити Linux Distro?


42

Я читав і брався за Linux від Scratch (і BLFS), і мені було цікаво, чи можу я дотримуватися цього посібника, щоб створити Darwin Distro, замінивши xnuядро? Чи буде процес сильно відрізнятися від описаного в LFS?

Моє теперішнє розуміння полягає в тому, що все, що потрібно для створення системи «Дарвін», а не «Linux», буде заміною ядра. Це правильно?


Редагувати:

У відповідь на коментар убивці я уточнив це питання. Хоча я взагалі шукаю інформацію про цю тему, те, що я спеціально шукаю, - це щось на кшталт " Посібника зі створення дистрофії Дарвіна ", як LFS - " Посібник зі створення дистрибутивів Linux ".

Я вдячний, що така інформація, ймовірно, буде надходити лише від людей з Puredarwin , OpenDarwin або GNU / Darwin, тому це щось із прохання до них про допомогу. Посібник " Як ми зробили-PureDarwin-Nano-Start-To-Finish ", як LFS, був би ідеальним, але я знаю, що просити багато.


3
Напевно, варто поглянути на puredarwin, щоб побачити, що входить у створення дистрибутива, заснованого на Дарвіні (та проблеми, які вони і опердарвін стикаються в цьому)
Journeyman Geek

1
Для регулярної користувальницької роботи обидва ядра виглядають дуже схоже, але програмне забезпечення, яке використовується для керування ядром, і програмне забезпечення, яке тісно пов'язане з ним (включаючи libc), зовсім різні. Документація LFS не допоможе нам у цьому критичному першому кроці. Можливо, починаючи з (або принаймні вивчаючи) гілки kFreeBSD Debian є більш актуальним.
фонбранд

1
Підказка: Якщо ви насправді ставите питання про те, що ви намагаєтеся зробити, ви обидва збільшуєте свої шанси на те, щоб знайти хіт у вже існуючих питаннях, але також збільшуєте ймовірність того, що це залучить більше людей із ідеями, як відповісти на запитання. . На відміну від плутанини, що питання є насправді. Просто думка.
вбивця

1
Дарвін дещо базується на BSD, який відрізняється від Linux. Спосіб виконання BSD відрізняється більш ніж речами, ніж просто ядром (налаштування файлової системи, структури каталогів, політика оновлення тощо).
vesperto

2
Боюся, що бінарний файл сумісний - це не одне і те ж. @Vesperto має рацію, Дарвін тісніше пов'язаний із сімейством BSD, ніж з Linux; хоч з явно різним ядром, ніж інші BSD. Думаю, вам пощастить шукати посібник типу BFS, ніж такий, який заснований на LFS. Посібник з BSD був би ще одним хорошим довідковим джерелом. Вам все одно доведеться використовувати свої посилання на Дарвіна, щоб отримати відповідну інформацію.
Джеррі W Джексон

Відповіді:


32

Оновлення 19 квітня 2015 року:

Через два роки, як і раніше, виявляється дуже мало інтересу до цієї сфери. Однак спільнота Hackintosh все ще дуже активна, це означає, що один з небагатьох завантажувачів з відкритим кодом, що не включає Apple, здатний завантажувати xnu (Хамелеон і вилки), як і раніше, підтримується і може завантажувати Yosemite. Існують також історії успіху, що завантажують ОС X Yosemite в рамках QEMU. Крім того, завдяки розробнику (який зараз працює в Apple), який проходить за ручкою winocm , у нас є порт ARM ядра xnu . Вона була найактивнішим розробником, якого я знаю в цій галузі.

Також найближчим часом буде продовження Mac OS X Internal Amit Singh . Я зазвичай не люблю згадувати особисті сторінки людей; однак сервер блогу з усією інформацією здається трохи недостовірним, тому дивіться інформаційне поле на сторінці ameaijou у Twitter.

Мені вдалося створити ланцюжок інструментів для розробки Apple (власний хост, проте "Darwin SDK" також був перенесений в Linux ). Я вважаю, що Darwin OS ще можливо побудувати з нуля - про все, що ми можемо бракувати, є деякі Kexts з відкритим кодом. Слідкуйте за цим простором, і якщо ви знаєте, як збільшити інтерес, дайте мені знати! :)


Короткі відповіді на це питання:

Технічно: Так

Практично: Ні *

З Бінарними чітами: Напевно, але також не законно (не перевірено)

З бінарними кодами для загального обладнання: Як зазначено вище (неперевірене)

* якщо ви не працюєте в Apple (* очищає горло в загальному напрямку Каліфорнії *)


Більш довга відповідь:

Це буде досить довгим. Я пропоную каву. Якщо у вас немає часу / схильності прочитати все, ви можете перейти до "Заключні зауваження".

Практично можливо (ні):

На жаль, Apple вилучила вихідний код для занадто багато необхідних KEXT і бінарних файлів Дарвіна, щоб зробити компіляцію Дарвінської ОС чисто з джерела можливою. Це технічно все-таки можливо (ви можете написати джерело самостійно, щоб зафіксувати його належним чином), але у мене просто немає часу, навичок чи схильності для цього (і я сумніваюся, що громада фінансування натовпу була б дуже зацікавлена).

Не дивно, що ключовим моментом став випуск Darwin 10, який привіз xnu в x86_64-land. Більшість необхідних джерел були раніше, але були лише x86. З часом ідеться, що сенс "Open Source" від Apple перейшов до "Open Source лише для апаратних засобів Apple", оскільки KEXTs Apple зараз є загальновиробничим, тому навіть якщо ви зможете все покращити і працює (див. нижче), ви все ще обмежилися обладнанням Apple.

Технічно можливо (Так):

Однак все не втрачено. Посібник з LFS дуже корисний, і, безумовно, всі необхідні налаштування можна проводити без фактичної побудови ОС Дарвіна. Крім того, представлені кроки дають вам майже точну дорожню карту шляху вперед, за вирахуванням ядра, KEXT та завантажувача. Мені все ж вдалося вирішити проблему завантажувача (принаймні, для апаратних засобів Apple).

Якщо вас цікавить, ось повний огляд того, що вам доведеться зробити:

  • Видаліть розділ (бажано 8 Гб або більше) на диску (внутрішній чи зовнішній - не має значення) та відформатуйте його як Mac OS Extended (Journaled) (HFS +).
  • Переконайтесь, що у нього є таблиця розділів GUID (GPT), і що при цьому у вас є розділ EFI. Найпростіший спосіб зробити це через Disk Utility Apple, але ви можете це зробити в командному рядку, якщо хочете (в інших місцях є підручники, як це зробити). Важливим моментом є те, що під час запуску distil list diskNsMнаступна інформація повинна бути правильною:

    Тип розділу: Apple_HFS

    ОС може бути встановлена: Так

    Медіа лише для читання: Ні

    Том лише для читання: Ні

  • Тепер дотримуйтесь посібника LFS (з адаптаціями).

  • Вставте (очевидно, використовуючи фактичну точку кріплення) у таDFS=/Volumes/DarwinOS.bashrc.bash_profile

  • Складіть каталог користувачів ( chownце до 0: 0 в самому кінці):

    sudo mkdir -v "$DFS"/usr
    
  • Введіть root:

    sudo su -
    
  • Створіть каталог джерел і встановіть клейкий біт:

    mkdir -v "$DFS"/sources     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Створіть каталог інструментів і зробіть до нього символьне посилання, щоб ми змогли пізніше його легко додати до $ PATH (все ще rootдо речі):

    mkdir -v "$DFS"/tools
    ln -sv "$DFS"/tools /
    logout          # Leave root
    
  • Завантажте джерело всіх необхідних пакетів. Це, звичайно, там, де ти застряєш. Усього необхідного немає. (До речі, я все binutilsодно віддаю перевагу GNU .)

Якщо припустити, що ви можете фактично завантажити всі необхідні, натисніть на.

  • Створіть непривілейованого користувача спеціально для DFS (запропонованого 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.
    
  • Зауважте, що ви повинні зробити homedir нового користувача вручну на Mac:

    sudo mkdir /Users/lfs
    sudo chown -R lfs:staff /Users/lfs/
    
  • Тепер надайте новому користувачеві доступ до джерел та інструментів

    sudo chown -v lfs $DFS/tools
    sudo chown -v lfs $DFS/sources
    
  • Увійти:

    su - lfs
    Password: dfs
    
  • Виконайте таку команду для очищення середовища (від LFS):

    cat > ~/.bash_profile << "EOF"
    echo "Entering clean environment…"
    exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
    EOF
    
  • Тепер запустіть таку команду (див. 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
    
  • GCC /configureдосить гнучкі. Спробуйте зв'язати *-шаблон або просто запустіть, gcc -vщоб побачити, як налаштована ваша хост-машина, і скопіюйте це.

  • Тепер вийдіть із системи lfs та увійдіть назад. Тепер у вас повинно бути чисте середовище.
  • Відтепер усе відбувається всередині користувача lfs. Ви помітите, що я трохи лінувався перетворювати лише половину символів "LFS" в символи "DFS". Вибачте з цього приводу, але ви отримаєте ідею.

Гаразд до гіпотетичного розділу.

Звідси вже досить добре буде стандартна процедура LFS: Витягайте джерела, будуйте, встановлюйте, тестуйте, видаляйте джерела. Зверніть увагу, що два пропуски бінутилів, GCC та Glibc все ще необхідні, Але ВАМ У вас також є робоча копія libc++.1.dylib- і вам потрібно буде зробити це також через 2 проходи. Щоб дізнатися більше, ви можете ознайомитися на сторінці libcxx проекту LLVM . Після компіляції ви можете розмістити його /usr/lib. Вам потрібно буде скласти та встановити ядро ​​xnu ( для того, як це зробити, є декілька навчальних посібників у Інтернеті), а потім встановити KEXT. Навіть якщо всі необхідні KEXT були доступні, вам все одно потрібно буде вкласти їх в .kext пакет вручну. Знову є навчальні посібники щодо того, як вручну виготовити KEXT у командному рядку.

Останній біт робить систему завантажувальною. Для цього слід виконати таку команду:

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

Насправді місце для благословення насправді не має значення. Ця папка просто стандарт Apple.

У будь-якому випадку, якщо припустити, що ядро ​​та KEXT знаходилися в потрібних місцях, у вас були належні копії dyld, launchdі т. Д. І boot.efiпрацювали правильно, система повинна працювати і завантажуватися!

Зверніть увагу, якщо ви дійсно хотіли, щоб ви могли запустити фальшивку launchd- це лише сценарій для запуску баш-підказки - ось що робить PureDarwin Nano .

Знову ж , всі засоби, напишіть кексти і бінарники себе , якщо вам подобається - це це технічно можливо. Просто зателефонуйте мені, коли закінчите.


З Бінарними чітами: Напевно, але також не законно (не перевірено)

Отже, чому ви не можете просто зірвати бінарні файли, KEXT та потрібні файли з Mountain Lion, не благословивши гучність і піти? Ну, напевно, можна. Але для цього вам також потрібна ліцензія. Крім того, якщо ви це зробите, ви в основному зробили копію Гірського Лева. Хіба це не поруч із пунктом?

З бінарними кодами для загального обладнання: Як зазначено вище (неперевірене)

Це в значній мірі є проект OSx86. Знову ж таки, ви майже зараз стикаєтеся з юридичними питаннями. Немає сумніву, що ці два останні методи безумовно можливі - факт того, що ви можете запустити Mountain Lion на універсальному апаратному забезпеченні, є доказом цього - але вся суть у цьому полягала в тому, щоб мати можливість законно скласти вашу власну ОС Дарвін з джерела.


Бічна примітка

Можливо, ви помітили, що я навмисно уникав нічого 32-розрядного. У світі, де кожна основна ОС доступна у 64-розрядному варіанті, збирати 32-бітну не багато. Apple насправді надала дискові зображення Дарвіна (аж до Дарвіна 9) тут . Вони прекрасно працювали на моєму вікні Windows.

Заключні зауваження

Я думаю, наприкінці дня люди не купують Mac для Дарвіна, вони купують Mac для Aqua. Як результат, підтримка Дарвіна як окремого продукту з відкритим кодом поступово зменшувалася до того, що це насправді лише жест жесту до спільноти з відкритим кодом. Інший злегка іронічний факт полягає в тому, що для того, щоб дізнатися про багато з цього, вам доведеться перейти прямо до проекту OSx86, який не є точно санкціонованим (якщо сказати це сміливо). Навіть тоді навколо не так багато інформації. PureDarwin - відмінне місце для початку, а книга Джонатана Левіна - неоціненна довідка для всіх речей xnu.

Це був надзвичайно навчальний рік роботи, і я майже такий же щасливий, що знаю, як це зробити, як і справді це роблю. Мені доведеться припинити роботу над ним на якомусь етапі, хоча зараз є час. Як остаточний безрезультатний вигук на Apple, чи було б надто багато просити мати ще одну складову Дарвіна, коли ви випустите Mavericks?


1

Очевидно, ви визнали, що LFS призначений для Linux, і Дарвін дуже сильно відрізняється від застосованих LFS для Linux, тому просто, крім ваших зусиль однієї особи, застосувати LFS до систем Дарвіна.

Є багато спроб спільноти замінити / вдосконалити системи Дарвіна. в той час як проект OpenDarwin не має великого успіху, здогадайтеся, що код Apple надто важкий, поки залишається один проект PureDarwin:
PureDarwin SourceForge
PureDarwin HomePage

Спершу отримайте обліковий запис розробника, захопіть інструменти для збирання, а потім ви зможете отримати кроки щодо створення власного ядра.

Darwin Kernel не має однакової архітектури з Linux Kernel, тому його не можна замінити Linux Kernel, тому вам потрібно скомпілювати його.

Насправді все, що вам потрібно зробити, це на 100% дотримуватися проекту PureDarwin, а потім зателефонувати за наступним сценарієм: Код Google - Чистий Darwin Switch Kernel зі створеними вами власними зображеннями ядра буде добре.

Але щодо того, як побудувати хорошого робочого Дарвіна Кернела, це було б новим питанням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.