40

Я прочитал и начал использовать Linux From Scratch (и BLFS), и мне было интересно, могу ли я следовать этому руководству, чтобы создать Darwin Distro, заменив ядро xnu ? Будет ли процесс сильно отличаться от описанного в LFS?

В настоящее время я понимаю, что все, что потребуется для того, чтобы система "Дарвин", а не "Linux", было заменой ядра. Это правильно?


РЕДАКТИРОВАТЬ:

В ответ на комментарий убийцы я уточню этот вопрос. В то время как я ищу информацию по этой теме в целом, я ищу что-то вроде « Руководства по созданию дистрибутива Darwin », так же как LFS - это « Руководство по созданию дистрибутива Linux ».

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

2 ответа2

32

Обновление 19 апреля 2015 г .:

Спустя два года интерес к этой сфере все еще остается очень низким. Тем не менее, сообщество Hackintosh по-прежнему очень активно, а это означает, что один из немногих загрузчиков с открытым исходным кодом, не поддерживающих Apple, способных загружать xnu (Chameleon и вилки), по-прежнему поддерживается и может загружать Yosemite. Есть также истории успеха загрузки OS X Yosemite в QEMU. Кроме того, благодаря (в настоящее время работающему в Apple) разработчику, который использует дескриптор winocm, у нас есть порт ARM ядра xnu. Она была самым активным разработчиком, которого я знаю в этой области.

Существует также продолжение Mac OS X Internals от Amit Singh, которое скоро появится. Я обычно не люблю упоминать личные страницы людей, однако сервер блогов со всей информацией кажется немного ненадежным, поэтому смотрите информационное окно на странице Twitter ameaijou .

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


Краткие ответы на этот вопрос:

Технически: да

Практически: нет *

С двоичными кодами: возможно, но не законно (не проверено)

С двоичными кодами для общего оборудования: как указано выше (не проверено)

* если вы не работаете в Apple (* прочищает горло в общем направлении Калифорнии *)


Более длинный ответ:

Это будет довольно долго. Я предлагаю кофе. Если у вас нет времени / желания читать все это, вы можете перейти к "Заключительным замечаниям".

Практически возможно (нет):

К сожалению, Apple отозвала исходный код слишком многих необходимых KEXT и двоичных файлов Дарвина, чтобы сделать компиляцию Darwin OS исключительно из исходного кода. Это все еще технически возможно (вы могли бы написать источник самостоятельно, чтобы исправить это должным образом), но у меня просто нет времени, навыков или желания сделать это (и я сомневаюсь, что сообщество краудфандинга было бы очень заинтересовано).

Неудивительно, что ключевым переломным моментом стал выпуск Darwin 10, который привел xnu в мир x86_64. Большинство необходимых источников было до этого, но были только x86. С течением времени значение "открытого исходного кода" Apple, по-видимому, сместилось на "открытый исходный код только на оборудовании Apple", так как KEXT от Apple теперь в целом зависят от аппаратного обеспечения, так что даже если бы вы могли все поднять и работает (см. ниже), вы все равно будете ограничены аппаратным обеспечением Apple.

Технически возможно (да):

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

Если вам интересно, вот полный обзор того, что вам нужно будет сделать:

  • Сотрите раздел (желательно 8 ГБ или больше) на диске (внутренний или внешний не имеет значения) и отформатируйте его как Mac OS Extended (Journaled) (HFS+).
  • Убедитесь, что у него есть таблица разделов GUID (GPT), и что когда вы это делаете, у нее есть раздел EFI. Самый простой способ сделать это - воспользоваться дисковой утилитой 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 # Убедитесь, что у вас все еще определен $ DFS, если нет, переопределите его.

    chmod -v a+wt $ DFS/sources

  • Создайте каталог tools и создайте символическую ссылку на него, чтобы мы могли легко добавить его в $ PATH позже (кстати, в root каталоге):

    mkdir -v $ DFS/tools

    ln -sv $ DFS/tools /

    Выйти # Оставить root

  • Загрузите источник всех пакетов, которые вы хотите. Это, конечно, где вы застряли. Все необходимые не там. (Кстати, я предпочитаю GNU's binutils любом случае.)

Предполагая, что вы действительно можете загрузить все, что вам нужно, давайте продолжим.

  • Сделайте непривилегированного пользователя специально для DFS (предложено LFS):

    sudo dscl. -создать / Пользователи / lfs

    sudo dscl. -create / Users / lfs UserShell / bin / bash

    sudo dscl. -create / Users / lfs RealName "LFS DFS"

    sudo dscl. -create / Users / lfs UniqueID "2070" # что угодно

    sudo dscl. -create / Users / lfs PrimaryGroupID 20 # По умолчанию 'staff'

    sudo dscl. -create / Users / lfs NFSHomeDirectory / Users / lfs

    sudo dscl. -passwd / Users / lfs dfs # Снова по вкусу.

  • Обратите внимание, что вы должны сделать homedir нового пользователя вручную на Mac:

    sudo mkdir / Пользователи / lfs

    sudo chown -R lfs: персонал / пользователи / lfs /

  • Теперь предоставьте новому пользователю доступ к источникам и инструментам.

    sudo chown -v lfs $ DFS / tools

    sudo chown -v lfs $ DFS / sources

  • Авторизоваться:

    su - lfs

    Пароль: DFS

  • Выполните следующую команду, чтобы очистить среду (из LFS):

    cat> ~ / .bash_profile << "EOF"

    эхо "Вход в чистую среду ..."

    exec env -i HOME = $ HOME TERM = $ TERM PS1 = '\u:\w\$' / bin / bash

    EOF

  • Теперь выполните следующую команду (посмотрите, что она делает в LFS, если вы не уверены):

    cat> ~ / .bashrc << "EOF"

    установить + ч

    Umask 022

    DFS = / Volumes / DarwinOS # Как ранее

    LC_ALL = POSIX

    LFS_TGT = $ (uname -m)-dfs-darwin1242 # Загляните в gcc / configure для возможностей!

    PATH = / tools / bin: / bin: / usr / bin # Обратите внимание на символическую ссылку ранее

    экспортировать LFS LC_ALL LFS_TGT PATH

    echo ".bashrc скрипт завершен. Окружающая среда готова. "

    EOF

  • GCC's /configure довольно гибок. Попробуйте воспользоваться шаблоном *- или просто запустите gcc -v чтобы посмотреть, как настроен ваш хост-компьютер, и скопируйте его.

  • Теперь выйдите из системы пользователя lfs и войдите снова. Теперь у вас должна быть чистая среда.
  • С этого момента все происходит внутри пользователя lfs. Вы заметите, что я немного ленив в преобразовании только половины символов "LFS" в символы "DFS". Извините, но вы поняли.

Хорошо, теперь в гипотетический раздел.

Начиная с этого момента, это будет довольно стандартная процедура LFS: извлечение исходных файлов, сборка, установка, тестирование, удаление исходных текстов. Обратите внимание, что 2 прохода binutils, GCC и Glibc по-прежнему необходимы, НО у вас также должна быть рабочая копия libc++.1.dylib - и вам нужно будет сделать это также за 2 прохода. Вы можете увидеть страницу libcxx проекта LLVM для более подробной информации. После компиляции вы можете поместить его в /usr/lib . Вам нужно будет скомпилировать и установить ядро xnu (в Интернете есть несколько учебных пособий о том, как это сделать), а затем установить KEXT. Даже если бы все необходимые KEXT были доступны, вам все равно нужно было бы поместить их в пакет .kext вручную. Снова есть учебники о том, как вручную создать KEXT в командной строке.

Последний бит делает систему загрузочной. Для этого вы должны выполнить следующую команду:

"$ DFS/usr/sbin/bless" --folder "$ MOUNT/ Система / Библиотека / CoreServices" --bootefi --verbose

На самом деле, место, чтобы благословлять, на самом деле не имеет значения. Эта папка просто стандартная для Apple.

В любом случае, если ядро и KEXT были в нужных местах, у вас были правильные копии dyld , launchd и т.д. И boot.efi работал правильно, система должна работать и загружаться!

Обратите внимание, что если вы действительно этого хотите, вы можете запустить faux- launchd который является просто скриптом для запуска приглашения bash - это то, что делает PureDarwin Nano .

Опять же , все средства, пишут кексты и двоичные файлы самого , если вам нравится - это технически возможно. Просто позвони мне, когда закончишь.


С двоичными кодами: возможно, но не законно (не проверено)

Итак, почему вы не можете просто скопировать двоичные файлы, KEXT и необходимые файлы из Mountain Lion, благословить том и уйти? Ну, вы, вероятно, можете. Но вам также нужна лицензия для этого. Кроме того, если вы сделаете это, вы просто сделали копию Mountain Lion. Разве это не относится к делу?

С двоичными кодами для общего оборудования: как указано выше (не проверено)

Это в значительной степени является проект OSx86. Опять же, вы сразу же столкнулись с юридическими проблемами. Нет никаких сомнений в том, что эти два последних метода определенно возможны - тот факт, что вы можете запускать Mountain Lion на обычном оборудовании, является доказательством этого - но весь смысл этого заключался в том, чтобы иметь возможность легитимно скомпилировать вашу собственную ОС Darwin из исходного кода.


Примечание

Возможно, вы заметили, что я сознательно избегал всего 32-битного. В мире, где каждая основная ОС доступна в 64-битной версии, нет смысла компилировать 32-битную. Apple действительно предоставила образы дисков Дарвина (вплоть до Darwin 9) здесь. Они отлично работали на моей Windows-коробке.

Заключительные замечания

Я думаю, в конце концов, люди не покупают Mac для Дарвина, они покупают Mac для Aqua. В результате поддержка Дарвина как отдельного продукта с открытым исходным кодом постепенно снизилась до такой степени, что это действительно просто символический жест для сообщества разработчиков программного обеспечения с открытым исходным кодом. Еще один немного ироничный факт: чтобы узнать о многом, вам нужно перейти прямо к проекту OSx86, который не является строго санкционированным (мягко говоря). Даже тогда вокруг не так много информации. PureDarwin - отличное место для начала, а книга Джонатана Левина - бесценный справочник по всем вещам xnu.

Это был чрезвычайно образовательный год работы, и я почти так же рад знать, как это сделать, как и на самом деле. Я собираюсь прекратить работу над этим на каком-то этапе, хотя сейчас самое время. В качестве окончательного бесполезного крика Apple, будет ли слишком много просить иметь еще одну сборку Darwin, когда вы выпустите Mavericks?

1

Очевидно, вы поняли, что LFS для Linux, и Darwin очень сильно отличается от применяемой LFS для Linux, так что это просто, помимо ваших усилий одного человека, применить LFS к системам Darwin.

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

Сначала получите учетную запись разработчика, соберите их инструменты для сборки, а затем вы сможете получить пошаговые инструкции по созданию собственного ядра.

Ядро Дарвина не имеет той же архитектуры, что и ядро Linux, поэтому его нельзя заменить на ядро Linux, поэтому вам нужно скомпилировать его.

На самом деле все, что вам нужно сделать, это на 100% придерживаться проекта PureDarwin, а затем вызвать следующий скрипт: Google Code - Pure Darwin Switch Ядро с пользовательскими изображениями ядра, которые вы сделали, будет в порядке.

Но относительно того, как построить хорошо работающее ядро Дарвина, это был бы новый вопрос.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .