Можно ли скомпилировать дистрибутив Darwin из исходного кода, как вы можете собрать дистрибутив Linux?

42

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

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


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

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

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

однодневка
источник
3
Вероятно, стоит посмотреть на puredarwin, чтобы увидеть, что входит в создание основанного на darwin дистрибутива (и проблем, с которыми они и opendarwin столкнулись в этом)
Путешественник Geek
1
Для обычного пользовательского пространства оба ядра выглядят очень похоже, но программное обеспечение, используемое для управления ядром, и программное обеспечение, тесно связанное с ним (включая libc), сильно различаются. Документация по LFS не сильно поможет в этих важных первых шагах. Возможно, начиная с (или хотя бы изучая) ветки Debian kFreeBSD более уместно.
vonbrand
1
Подсказка: если вы действительно задаете вопрос о том, что вы пытаетесь сделать, вы оба увеличите свои шансы найти хит в уже существующих вопросах, но также увеличите вероятность того, что это привлечет больше людей с идеями о том, как ответить на вопрос , В отличие от того, чтобы быть смущенным, что вопрос на самом деле. Просто мысль.
убийца
1
Дарвин в некоторой степени основан на BSD, который отличается от Linux. Способ выполнения BSD отличается не только от ядра (предпочтения файловой системы, структуры каталогов, политика обновления и т. Д.).
Весперто
2
Боюсь, что совместимость с двоичными файлами - это не одно и то же. @Весперто прав, Дарвин более тесно связан с семейством BSD, чем с Linux; хотя и с совершенно другим ядром, чем у других BSD. Я думаю, вам больше повезло бы найти руководство по типу BFS, чем руководство по LFS. Справочник BSD будет еще одним хорошим справочным источником. Вам все равно придется использовать ваши ссылки Дарвина для получения соответствующей информации.
Джерри У Джексон

Ответы:

32

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

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

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

Мне удалось создать инструментарий разработки Apple (самодостаточный, однако «Darwin SDK» также был перенесен на Linux ). Я полагаю, что ОС Darwin, возможно, еще можно собрать с нуля - все, чего нам не хватает, - это некоторые 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     # Make sure you still have $DFS defined; if not, redefine it.
    chmod -v a+wt "$DFS"/sources
    
  • Создайте каталог tools и создайте символическую ссылку на него, чтобы мы могли легко добавить его в $ 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: извлечение исходных файлов, сборка, установка, тестирование, удаление исходных текстов. Обратите внимание, что 2 прохода binutils, 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.

В любом случае, предполагая , что ядро и кекстов были в правильных местах, вы имели правильные копии 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 - отличное место для начала, а книга Джонатана Левина - бесценный справочник по всем вещам.

Это был чрезвычайно образовательный год работы, и я почти так же рад знать, как это сделать, как и на самом деле. Я собираюсь прекратить работу над этим на каком-то этапе, хотя сейчас самое время. В качестве окончательного бесполезного крика 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 Ядро с пользовательскими изображениями ядра, которые вы сделали, будет в порядке.

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


источник