Софт FreeBSD на Mac

Тема в разделе "Mac OS X", создана пользователем Markus Lang, 17 янв 2009.

Статус темы:
Закрыта.
Модераторы: Archiby
  1. Markus Lang

    Markus Lang

    Регистр.:
    8 июл 2008
    Сообщения:
    265
    Симпатии:
    170
    Год назад поднял я сервер на 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 <загрузчик> <ядро> — загрузить систему

    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)…

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

    0> dev /
    0> ls

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

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

    /pci@f4000000/ata-6@d/disk

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

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

    Загружаемся дальше — в 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, выглядит следующим образом:

    <boot-script>
    " screen" output
    boot hd:???,\boot\loader hd:???
    </boot-script>

    Нас интересует команда 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… и пр.

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

    ad0s3
    ad0s5



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

    Теперь добиваем загрузочный скрипт:
    <boot-script>
    " screen" output
    boot hd:3,\boot\loader hd:5
    </boot-script>

    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 секунд кнопку питания.
     
    Simpson нравится это.
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    По мойму надо быть последним дурнем (не принимайте на свой счёт, это образно), чтоб ставить FreeBSD на Mac - для этого есть более дешёвый PC.
     
  3. we_are_hakers

    we_are_hakers

    Регистр.:
    10 апр 2008
    Сообщения:
    650
    Симпатии:
    178
    а смысл ставить фряху на мак, если у нее и так бсд подсистема... :nezn:
     
  4. Markus Lang

    Markus Lang

    Регистр.:
    8 июл 2008
    Сообщения:
    265
    Симпатии:
    170
    Ну люди и макбуки покупают, чтобы в винде сидеть. :)
    Все это эксперимент не более...
     
  5. Simpson

    Simpson

    Регистр.:
    22 июл 2007
    Сообщения:
    373
    Симпатии:
    36
    А мне понравилось! Красиво и понятно расписано. Хотя вот вопрос - эпл вроде ж на интелы перешел, откуда там паверПЦ? Или это был какой-то древний макмини?
     
  6. Markus Lang

    Markus Lang

    Регистр.:
    8 июл 2008
    Сообщения:
    265
    Симпатии:
    170
    В статье речь идет про Mac Mini G4
     
  7. we_are_hakers

    we_are_hakers

    Регистр.:
    10 апр 2008
    Сообщения:
    650
    Симпатии:
    178
    до версии 10,5,5 кажись, маки ставятся и на интел и на поуер пц, то со следующих верий кажись ток на интел
     
  8. Markus Lang

    Markus Lang

    Регистр.:
    8 июл 2008
    Сообщения:
    265
    Симпатии:
    170
    Leopard то есть 10.5, ставится на Power PC и на Intel. Поддержку Power PC собираются убрать в Snow Leopard это которая 10.6
     
  9. AccessForbidden

    AccessForbidden

    Регистр.:
    5 янв 2009
    Сообщения:
    324
    Симпатии:
    57
    Прикольно. Но непонятно зачем такую железку переводить на фриbsd...
    Продайте лучше мне её. На вырученные деньги купите нормальный сервак :)
     
  10. Markus Lang

    Markus Lang

    Регистр.:
    8 июл 2008
    Сообщения:
    265
    Симпатии:
    170
    Да ему цена сейчас от силы 200$ :)
     
Статус темы:
Закрыта.