Mac os или freebsd

Откуда Mac OS X?

Обсуждая с владельцами Mac, я получил несколько версий того, откуда Mac OS X. Известно, что в BSD есть какой-то корень, но сколько и где?

Некоторые говорят, что Mac OS X имеет ядро ​​FreeBSD, со всеми вышеперечисленными утилитами, что делает его специфичной для Mac. (Не говоря уже о пользовательских приложениях здесь, только все init , ls , cd и др. Binutils? )

Другие говорят, что Mac OS X — это ядро ​​Дарвина, то есть чистый Mac, и что утилиты ОС исходят из BSD.

История MacOS немного более запутанная. Я был очень заинтересован в этом в конце 90-х годов, когда Мах был представлен по всему миру как более быстрый способ построения системы Unix.

Происхождение ядра немного сложнее.

Все начинается с бесплатного распространения AT & T в некоторых университетах. Этот Unix был значительно улучшен в Беркли и стал основой для BSD-вариаций Unix и включил в себя несколько новых инноваций, таких как «Быстрая файловая система» (UFS), представил символические ссылки и API сокетов. AT & T пошла своим путем и в то же время создала System V.

Тем временем исследования продолжались, и некоторые люди приняли работу BSD в качестве основы. В CMU ядро ​​BSD использовалось в качестве основы для прототипирования нескольких новых идей: потоков, API-интерфейса для управления системой виртуальной памяти (через подключаемые «пейджеры» — пользовательский уровень mmap), системы удаленного вызова процедур на уровне ядра и большинства важна идея перемещения некоторых операций уровня ядра в пространство пользователя. Это стало ядром Маха.

Я не уверен на 100%, если mmap пришел от Mach, а позже был принят BSD, или Mach просто предложил идею, а BSD добавил свой собственный mmap, основанный на идеях Mach.

Хотя ядро ​​Mach было описано как микроядро, до версии 2.5 это была просто система, которая обеспечивала функции потока, mmap, передачи сообщений, но оставалась монолитным ядром, все службы работали в режиме ядра.

В это время Рик Рашид (сейчас в Microsoft) и Ави Теванян (сейчас в Apple) выдвинули новую идею, которая может ускорить Unix. Идея состояла в том, чтобы использовать системный вызов mmap для передачи данных, которые будут скопированы из пространства пользователя, на «серверы», реализующие файловую систему. Эта идея, по сути, была вариацией попытки избежать копирования одних и тех же данных, но она была представлена ​​как преимущество микроядер, даже если эту функцию можно было изолировать от микроядра.

Тесты этой более быстрой Unix-системы, поддерживаемой виртуальными машинами, заставили людей в NeXT и FSF выбрать Mach в качестве основы для своих ядер.

NeXT шел с ядром Mach 2.5 (который был основан на BSD 4.2 или 4.3), и GNU фактически не начинал работу годами. Это то, что использовали операционные системы NeXTSTEP.

Тем временем в CMU работа над Mach продолжилась, и они наконец-то осознали, что несколько серверов работают поверх микроядра с версией 3.0. Я не знаю никого в дикой природе, способного запустить Mach 3.0, поскольку все интересные серверы пользовательского уровня использовали код AT & T, поэтому их считали обремененными, поэтому он оставался продуктом исследований.

Примерно в это же время команда Jolitz сделала порт 4.3+ BSD для архитектуры 386 и опубликовала свои усилия по портированию на DrDobbs. 386BSD активно не поддерживалась, и появилась группа, которая поддерживает и продвигает 386BSD, команду NetBSD. Внутренние столкновения в группе NetBSD привели к первому расколу, и из этого был сформирован FreeBSD. В то время NetBSD хотела сосредоточиться на создании кроссплатформенной BSD, а FreeBSD хотела сосредоточиться на том, чтобы Unix отлично работал на платформах x86. Чуть позже NetBSD снова раскололась из-за некоторых других споров, что привело к созданию OpenBSD.

Разветвление BSD 4.3 для платформ x86 стало коммерческим с компанией BSDi, и различные члены первоначальной команды из Беркли работали там и поддерживали хорошие отношения с командой BSD в университете.

AT & T не был удивлен и начал иск AT & T против BSDi, который позже был расширен, чтобы подать в суд на Университет. Иск касался BSDi, использующего собственный код от AT & T, который не был переписан Беркли. Это отодвинуло BSD по сравнению с новой операционной системой Linux.

Хотя для ответчиков дела шли не очень хорошо, в какой-то момент кто-то понял, что SystemV включила большие куски кода BSD под лицензией BSD, а AT & T не выполнила свои обязательства в лицензии. Было достигнуто соглашение, в соответствии с которым AT & T не пришлось бы вытаскивать свой продукт с рынка, и Университет согласился изъять любой код, который все еще мог бы основываться на коде AT & T.

Затем университет выпустил две версии BSD 4.4 обремененных и 4.4 lite. Обремененная версия загружалась и работала, но содержала код AT & T. Облегченная версия не содержала никакого кода от AT & T, но не работала.

Различные усилия BSD сделали свою работу поверх новой версии 4.4 lite и имели систему загрузки в течение нескольких месяцев.

Между тем, микроядро Mach 3.0 оставалось не очень полезным без каких-либо пользовательских серверов.

Студент из скандинавского университета (я полагаю, я мог бы ошибаться) был первым, кто создал полную систему Mach 3.0 с полной ОС, основанной на облегченном выпуске 4.4, я думаю, это называлось «Lites». Система работала, но была медленной.

Читайте также:  Где лежит java mac os

В течение 1992-1996 и до настоящего времени BSD уже имел системный вызов mmap (), как и большинство других систем Unix. «Преимущества микроядра», которого не было, никогда не было реализовано. У NeXT все еще было монолитное ядро. FSF все еще пытался заставить Маха строить и не желал трогать код BSD или вносить вклад в какие-либо усилия BSD с открытым исходным кодом, они продолжали уклоняться от плохо определенного видения ядра и тонули в протоколах RPC для своих собственных ядро. Микроядро выглядело великолепно на бумаге, но оказалось слишком спроектированным и просто сделало все медленнее.

В этот момент у нас также состоялись дебаты между Линусом и Энди о микроядрах и монолитных ядрах, и мир начал понимать, что просто невозможно добавить все эти дополнительные циклы к микроядру и все же опередить хорошо спроектированное монолитное ядро. ,

Apple еще не приобрела NeXTSTEP, но также начала рассматривать Mach как потенциальное ядро ​​для своих будущих операционных систем. Они наняли Open Software Foundation для переноса Linux на ядро ​​Mach, и это было сделано из их офисов в Гренобле, я думаю, это называлось «mklinux».

Когда Apple приобрела NeXT, у них было относительно старое Unix-основание, Unix на базе 4.2 или 4.3, и к настоящему моменту даже бесплатное программное обеспечение не работало в таких системах. Они наняли Джордана Хаббарда из FreeBSD, чтобы обновить свой стек Unix. Его команда отвечала за обновление пользовательского пространства, и неудивительно, что пользовательское пространство MacOS было обновлено до последних версий, доступных на BSD.

Apple в какой-то момент переключила свой Mach с 2,5 на 3,0, но решила не использовать микроядерный подход и вместо этого оставила все в процессе. Я так и не смог подтвердить, использовал ли Apple Lites, нанял скандинавского хакера, или они приняли 4.4 lite в качестве своей ОС. Я подозреваю, что они сделали, но я уже перешел на Linux и прекратил отслеживать мир BSD / Mach.

В конце 90-х ходил слух, что Ави в Apple пытался нанять Линуса (который был уже знаменит) для работы над своим ребенком, но Линус решил продолжить работу над Linux.

Помимо истории, эта страница описывает пользовательский мир и ядро ​​Mach / Unix:

Я нашел этот график истории OSX:

Источник

FreeBSD на Mac

Публикуется от имени и по просьбе товарища mrTuborg

Год назад поднял я сервер на Mac mini под управлением Leopard’a (Mac OS X 10.5), как и все порядочные люди, обнаружив внутри — зачатки/огрызки от FreeBSD, скачал и поставил порты fink (finkproject.org). Год поигрался… выставил WiFi адаптер в режим Infrastructure… теперь он и Internet стал на ноутбук отдавать… Качает торренты в режиме 24/7, переправляет поток VNC из локалки во внешний инет (для доступа с того же ноутбука при нахождении далеко от своего дома)… предоставляет опять же для меня любимого дискетку по SFTP размером в 500Г, держит транспорт для джаббера…

И стало скучно…
А что вот если взять и поставить на него настоящий FreeBSD? Пацан сказал — пацан сделал. ан нет… вот тут и начинается самое интересное.

Прожёг образ FreeBSD 7.0 PowerPC. Мак стартанул с диска нормально. Начинаем установку… упс… а где fdisk?? Нету fdisk’a. Есть Label Editor. Но как начинает выясняться он ничего не может сделать с таблицей разделов… И понеслось. В результате 2х недельного копания родилcя небольшой ToDo «Как поставить FreeBSD на Mac»… Который я и собираюсь представить вашему вниманию.

Итак, проблемы с которыми я столкнулся:

1) FreeBSD Installation DVD не имеет fdisk. Только LabelEditor который впринципе ничем помочь с разделами не может.
И нигде не найдёте портированную версию fdisk под Mac (по крайней мере работающую версию). Проблема кроется в «особом» железе и особом
Open-Firmware(об этом чуть ниже) фирмы Apple.

2) «Особенный» Open-Firmware
Всё прогрессивное человечество уже отказалось от системы BIOS заменив их постепенно (я так понимаю пока в теории, а на маках уже и в практике) на Open Firmware. Аппаратный предзагрузчик с функциями самотестирования. В маках хоть и указано что это Open Firmware, но исходя из набора команд это всё таки свой Open Firmware. И этот Open Firmware понимает загрузку лишь с Маковских разделов HFS+. Собственно все дальнейшие танцы с бубном и происходят вокруг этого Open Firmware.
Что это такое написано здесь — en.wikipedia.org/wiki/Open_Firmware. Новомодная технология пришедшая на смену морально умершему BIOS. Набор команд для управления можно почитать здесь — www.firmworks.com/QuickRef.html. Но особенность Apple’вского OpenFirmware и заключается в том, что оно практически ни как не пересекается с описанными вещами. Здесь немного изменённый набор команд (большинство команд из указанного Reference — не работают) и поведение этих команд немного не предсказуемое. Очень часто одни и те же команды перестают работать или работать как то по другому. Выход один — перезагрузка.
Итак, вход в Mac’овский OpenFirmware — Alt + Cmd + O + F. После недолгой тренировки эта комбинация легко нажимается одной правой (левой не получится — пробовал =)).
Самые полезные, из обнаруженных команд:

mac-boot — продолжить загрузку
shut-down — выключить мак
reset-all — перезагрузить систему
eject cd — «выплюнуть» диск
boot — загрузить систему

Читайте также:  Как восстановить папки библиотеки windows

devalias — вывод списка всех назначенных символьных сокращений для устройств
(запишите алиас для hd и сd)

Вывод всего дерева устройств:
1) dev / — подмонтировать дерево устройств в корень
2) ls

printenv — вывод переменных окружения.
(самая для нас интересная переменная — boot-device)
setenv — Назначить переменную окружения

Чтобы сбросить все настройки в заводские — необходимо в выключенном состоянии подержать кнопку включения до появления характерного звука и реакции домашних а-ля «у тебя всё в порядке? 0_o» Вобщем сигнал узнаваемый.

Вроде всё кристально чисто понятно. Но! OpenFirmware не может загружаться ни с чего иного, кроме как HFS+, и при этом…

3) FreeBSD не видит маковские HFS+ разделы.
Впринципе этого и нетребуется. Всё что требуется — создать при помощи инструментов Mac OS подготовить раздел HFS+ и не трогать его уже из
FreeBSD, чтобы не испортить.

4) Mac OS при первой возможности «бросается улучшать» разделы на жёстком диске.
Проблема обратная описанной в п.3 Когда уже установим FreeBSD ни в коем случае не допустите загрузки Mac OS X (с установочного диска). Всю процедуру установки BSD придётся начинать заново.

Итак. Это была теоретическая часть. Теперь собственно приступим к практике — к препарированию пациента.

Инструменты:
1) Установочный диск FreeBSD.
2) Установочный диск Mac OS X (Тигр или Леопард).
3) Флэшка.

0. Определение оборудования.

Далее мы будем везде указывать символические имена устройств, но на всякий случай если они не сработают, надо выпытать полное название необходимых нам устройств на данном этапе.
Входим в Open Firmware(путём зажима клавиш Cmd+Alt+O+F)…

пишем следующие команды:

начнётся постраничный вывод дерева устройств построенного на начальном этапе загрузки Open Firmware. Здесь требуется внимательность.
Для имени нужна вся ветка… которая собственно там не указывается… а лишь обозначается отступами.

мой контроллер ATA (куда подключены жёсткий диск и cd-rom) выглядит так:

(через слэш разделены ветви дерева).

как узнать правильно ли определили ветку дерева?

Загружаемся дальше — в boot2/EFI (при условии что вставлен диск установки Free BSD). Там имеем более расширенный (но такой же глючный) набор команд от FreeBSD где можно проверить все наши догадки:

Как загрузить boot2/EFI. Находясь в OpenFirmware вводим команду (второй параметр опущен — ядро загружаться не будет)
boot cd:,\boot\loader

Итак мы в boot2/EFI.

все догадки вбиваем в переменную окружения «currdev»:
после имени контроллера ata-дисков(pci@f4000000/ata-6@d/disk) надо указать номер диска и номер раздела
set currdev=/pci@f4000000/ata-6@d/disk@1:0

в моём случае это cdrom. поскольку там всего один раздел, то номер раздела можно опустить, оставив так:
set currdev=/pci@f4000000/ata-6@d/disk@1

дальше проверяем нашу догадку коммандой ls.
Если получили листинг файлов и директорий диска — догадка оказалась верна.

Жёсткий диск в моём случае вышлядит как: /pci@f4000000/ata-6@d/disk@0

Если мы ошиблись то нахождение требуемых разделов решается путём простого перебора =).

1. Подготовка загрузчика (на соседнем компьютере)

Берём флэшку и копируем на неё loader и boot.tbxi (в любую папку, флэшка — как инструмент для переноски, не более)
Что за файлы… и где их взять? loader — находится на установочном диске FreeBSD (\boot\loader), boot.tbxi там же, но его надо поправить или создать заново если его не найдёте.
Это загрузочный скрипт на языке Forth для Open Firmware, выглядит следующим образом:

» screen» output
boot hd. \boot\loader hd.

Нас интересует команда boot. Разберёмся с её синтаксисом:
1й параметр — место расположения загрузчика (в данном случае boot2/EFI-загрузчик от FreeBSD). В данном примере укзана символическая подстановка, hd — hard disk (cd — compact disk), через двоеточие номер раздела (о номере раздела чуть ниже) и через забятую путь на этом разделе к файлу загрузчика. Файловая система HFS+.

2й параметр — место расположения ядра загружаемой системы. Здесь проще — просто номер раздела. Параметр передаётся на вход файла-загрузчика, поэтому требования к формату файловой системы не предъявляются.

Как выяснить нужные номера разделов мы выясним соответственно в момент когда эти разделы создадим. Поэтому редактирование скрипта на соседнем компьютере этим не заканчивается…

2. Подготовка жёсткого диска.

Установочный диск MAC OS X потрбуется один раз (см. проблему №4) поэтому с него и начнём.

После загрузки установочного диска MAC OS X вам доступны следующие необходимые нам инструменты: Disk Utilities и Terminal

2.1 Разбиваем диск при помощи Disk Utilities.

Почему бы не сделать один раздел и не поделить его на слайсы при помощи Label Editor’a? Не получится. Label Editor может только использовать созданные для него разделы, но никак не вмешиваться в таблицу разделов — не получится. Вот поэтому под каждый слайс лучше всё-таки сделать свой раздел…
Перед разбиением диска на разделы нужно выбрать тип таблицы разделов. GUID, Apple Partition Map или MBR. Выбрать нужно для PowerPC mac — APM, для Intel mac — GUID.

Я сделал следующие разделы:
под root — 4 Gb
под swap — 2 Gb
под var — 2 Gb
под usr — 8 Gb
под home — всё что осталось, а именно 22 Gb.

чтобы их было проще на следующем шаге идентифицировать в терминале зададим этим разделам метки типа root, swap… и пр.

Читайте также:  Ibm thinkpad t60 windows 10

Вообще на всяческих буржуйских форумах не советуют долго играться с Disk Utilities так как подозревается он в глючности. Не отрицаю сей факт, было такое, но я это списывал на свои кривые руки.
Пару слов о совместимости файловых систем Mac OS и BSD. В Disk Utilities есть 4 типа файловых систем для выбора — они все называются длинно и заумно Extended File System (Расширенная файловая система) с поддержкой (или без) журналирования и с поддержкой (или нет) различия заглавных и строчных букв в названиях файлов. На самом деле это ничто иное как Journaled или Non-Journaled Ext3 с опциями. Так что проблем с прочтением как в теории так и в практике этих разделов из под BSD не возникает (он их переконвертирует в UFS). Но закавыка всё таки есть. Надо загрузчик загрузить c HFS+, а ядро уже с партиции понимаемой в BSD.
Для дальнейшей успешной загрузки устанавливаемой BSD надо разделить загрузчик и собственно само ядро. Для этого на диске к уже описанным выше разделать создать раздел для bootloader’a. Я указал размер как 0.2Гб, Леопард тут же поправил до 1 Гб, но после процесса разбиения раздел оказался размером 0.86Гб. Ну не будем с ним спорить =). Далее BSD при установке сделает нечитаемыми для мака свои разделы, поэтому диск установки Leopard’a используем лишь один раз и только до установки BSD на жёсткий диск. Иначе, при следующей загрузке установочного диска Leopard’a, Mac OS все подготовленный разделы «улучшит» до степени непригодности так что процесс установки придётся начинать сначала.

Итак имеем следуюшую таблицу разделов:
bootloader (1G)
root (4G)
swap (2G)
var (2G)
usr (8G)
home (22G)

Закончив подготовку разделов, закрывем Disk Utilities и запускаем terminal (Всё с того же установочного диска Leopard или Tiger).
находяcь в терминале, необходимо разместить в разделе bootloader 2 файла c ранее подготовленной флешки- loader и boot.tbxi. Требований по размещению нет. Я, к примеру создал там директорию boot, и скопировал всё туда… а да нам надо закончить приготовление загрузочного скрипта.

2.2 Идентификация номера раздела

Способ 1: Находясь в терминале установочного диска leopard, выведите список подмонтированных разделов (всё подмонтировалось уже до нас)

пример работы команды mount, у меня:
/dev/disk0s3 on /bootloader
/dev/disk0s5 on /root
……

цифра стоящая после s и есть требуемые нам циферьки (см выше пример моего загрузочного скрипта)

Способ 2: Находясь в LabelEditor’е установочного диска FreeBSD.
пример моего случая:

Здесь уже приходится ориентироваться по порядку расположения и размерам разделов для выяснения — кто есть кто, так как заданных меток не видно. Немного неудобно.

Теперь добиваем загрузочный скрипт:

» screen» output
boot hd:3,\boot\loader hd:5

2.3 Подготовка bootloader

Находясь в Terminal копируем с флэшки на мак в раздел bootloader файлы loader и boot.tbxi

3. Установка FreeBSD.

Итак. Что имеем к этому моменту — разбитый (пока что только на разделы) диск, скопированные в bootloader-раздел файлы loader и boot.tbxi.
Перезапускаем Мак и загружаемся с установочного диска FreeBSD. Проводим установку. Перезапускаемся. Получаем мигающую папочку 😉

4. Загрузка установленного FreeBSD.

Пока всё хорошо. Заходим снова в OpenFirmware. Тестим установку ручной загрузкой:

0> eject cd — вытаскиваем загрузочный диск инсталлятора FreeBSD
ok
0> boot hd:3,\boot\loader hd:5 — загружаем подготовленный нами loader на 3ьей партиции и передаём ему на вход ядро с 5й партиции.
ok

Успешно? Если да переходим к пункту 4.2. Нет — читаем дальше.

4.1 Непосредственные имена устройств.

Если загрузка не пошла, значит не верно определены символические ссылки (devalias)
Значит будем использовать непосредственные имена устройств. Вспоминаем пункт 0. Загружаемся опять в EFI
Проверяем там ли у нас загрузчик и ядро:
set currdev=/pci@f4000000/ata-6@d/disk@0:3
ls — листинг файлов с раздела bootloader. Должны увидеть loader и boot.tbxi

set currdev=/pci@f4000000/ata-6@d/disk@0:5
ls — листинг файлов с раздела root.

Если неудачно, то меняем цифры a и b — disk@a:b путём перебора, пока не найдём.
Допустим нашли нужные цифры, тогда тестируем загрузку (предварительно перегрузившись в OpenFirmware)
0> boot /pci@f4000000/ata-6@d/disk@0:3,\boot\loader /pci@f4000000/ata-6@d/disk@0:5

соответственно придётся поправить загрузочный скрипт boot.tbxi на найденные параметры

4.2 Установленная FreeBSD загрузилась.

Можно работать… Вуаля!

На этом месте информация примерно на всех буржуинских форумах заканчивается… Для них всё ок. Они достигли нирваны…
Но как заметит наш внимательный пролетарский читатель — неужели теперь ручками надо это всё загружать? На многих форумах в этом месте рекоммендуют подготовить загрузочный диск (по типу инсталляционного) с правильным скриптом .tbxi который будет загружать ядро не с диска, а с винчестера.

5. Но это не выход!

Прошла не одна бессонная неделя и я натолкнулся в другом месте и совсем по другому поводу на команду setenv. Вот он выход, финальный аккорд, так сказать…

setenv boot-device hd:3,\boot\boot.tbxi

На моём маке сработал. Сработает ли у вас — гарантии никаких… поскольку всё это недокументированные возможности маковского Open Firmware.
В любом случае, как вернуть всё взад? Сбросить параметры nvram — при выключенном маке зажмите на 20 секунд кнопку питания.

Послесловие.
На моём маке загрузилась FreeBSD. Кулеры работают теперь постоянно… WiFi модуля не видно… Есть что продолжить. Если конечно это всё кому-нибудь надо.

Источник

Оцените статью