Установка Fedora 16 на MacBook Pro Late 2011

Купил я себе MacBook Pro Late 2011 (MD322, он же MacBookPro8,2).
И ну ставить на него Fedora. Конечно же, почти сразу оказался в глухом пролете.
И так, спустя почти месяц сидения на гугле и многих экспериментов, решение есть.

UPDATE 2013 01 19
Fedora 18 отлично работает на этом макбуке.
Только livecd надо делать через dd.

LiveCD Fedora 16 (и более ранних) не будет грузиться ни с диска, ни с флешки. С флешки он пытается загрузиться с radeon-драйвером и ему не хватает BIOS’а от него (который в EFI режиме системой не предоставляется) и мешает какой-то баг, который «вешает» картинку (ноут продолжает грузиться) намертво.
А с диска мешает уже исправленный баг в dracut, но это можно исправить — собрав собственный LiveCD посвежее, например вот по этой инструкции. Или используя RFRemix 16.1 (если он уже вышел 😉 )
Сразу оговорюсь, запустить Fedora с Radeon мне пока так и не удалось.

Что нам понадобится?

  • флешка в 2 Гб, на случай, если ты, друг, таки усахатишь Mac OS X
  • место для установки, либо на диске в ноуте, либо на внешнем — это не важно
  • свежий LiveCD x86_64 Fedora/RFRemix 16 на CD/DVD болванке! (это важно, поскольку с флешки мы не загрузимся)
  • понимание того, как грузит маковский загрузчик диски, точнее — почему он их может не грузить
  • свежее ядро с патчами, перечисленными ниже
  • ТЕРПЕНИЕ!

Делаем мосты несгораемыми

Зачем нам нужна флешка в 2Гб или больше? Да все просто флешка нам нужна, поскольку очень легко можно ненароком убить Mac OS X и раздел восстановления от нее. Потом будет крайне не приятно. Лучше уж сделать копию раздела восстановления на флешке.
Инструкция, как это сделать находится тут.
Пройди, не поленись и локти останутся не покусанными 😉

Место

Если предполагается использовать место на диске ноута, то надо слегка уменьшить размер раздела с макосью. Делается это до примитивного просто и инструкций на эту тему море и маленький океан. Вот, например, одна из них.
Наша задача — уменьшить раздел «Macintosh HD» на то количество гигабайт, которое мы захотим отдать под Fedora + 201 Mb (почему именно столько? я объясню это чуточку позже, когда будем ставить Fedora).
Ну а если внешний диск, да еще и чистый, то тут вообще никаких проблем. Но ты же и сам знаешь, чего там у тебя с внешними дисками, потому сам и разберешься, правда? 😉
И так, место куда будем ставить Fedora у нас есть. Едем дальше.

Источник установки

LiveCD нам нужен для всяких хитростей с EFI, на самом деле ставить саму Fedora можно хоть с netinstall, хоть с установочного диска — это по барабану по желанию. Важно! чтобы это был именно CD/DVD диск!!!

Друг! Я надеюсь ты знаешь как выбирать на маках с чего ему загружаться 😉 Если не знаешь, то выключи мак, включи и тут же нажми кнопку «Alt» (или еще ее называют Option), нажми и держи, пока не появится 2 диска (МакОсь и раздел восстановления) и CD/DVD диск. Потом хватайся за мышку/тачпад и выбери диск (который — болванка).

Установка

Установка проста, но есть хитрости.
Во-первых, если диск встроенный или разбит под GPT, то anaconda Fedora сама предложит нам создать какой-то BIOS-раздел, я не знаю зачем он, без него все прекрасно работает, но ни фига не установится ничего без этого раздела.
Во-вторых, нам обязательно надо создать дополнительный раздел, форматированный под VFAT (FAT32/FAT16) размером 200 Mb, anaconda такое позволяет сделать, и ВАЖНО! — раздел должен монтироваться по пути /boot/grub2-efi/ — это тоже важно, потому что всё шаманство будет крутится именно вокруг этого раздела.
Теперь ясно, куда делся 201 Mb? 😉
Будем считать, что установили Fedora, это же в сущности, проще, чем установить «вантуз». 🙂

Магия Linux с заклинанием EFI

Вот он самый прикольный момент, вот для чего мы жгли болванку с LiveCD Fedora. Вот оно!
Ставим болванку с livecd в привод, загружаемся с нее (если ты взял для этого RFRemix, то можешь при загрузке в пункте Troubleshoot выбрать Boot into RAM — будет реально быстрее, а значит мы меньше потратим терпения и нервов).
Нам нужно заchrootиться, т.е. войти в установленную нами систему и выполнить там кое-какие действия.
Потому открываем терминал, меняем пользователя на root’а и сперва создадим наш путь монтирования, например так(ой):

mkdir /mnt/myfedora

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

mount /dev/sdXN /mnt/myfedora/boot

В даном случае, я очень сильно надеюсь, что ты умеешь находить свои разделы и правильно и вдумчиво их монтировать для chroot’а. Если не умеешь — почитай, например Gentoo Handbook, там про это очень подробно написано.

И так мы смонтировали все имеющиеся у нас разделы. Не спеши!!! Нам надо еще смонтировать системные разделы, без них многое может не сработать. Дословно:

mount -t proc none /mnt/myfedora/proc
mount -o bind /dev /mnt/myfedora/dev
mount -o bind /sys /mnt/myfedora/sys

Сделал? Отлично. chroot’имся:

chroot /mnt/myfedora /bin/bash

Итак мы в нашей новенькой Fedora, но пока еще не рабочей. Сделаем же её рабочей.

ВАЖНО! В данный момент на ноутбуке должен быть интернет, без него многое не выйдет, в любом виде.

GRUB2-EFI

Первое у нас по плану grub2-efi.
Удаляем grub-efi, который мог «приплыть» из LiveCD или еще откуда-то и будет сильно мешать:

yum remove grub-efi

Устанавливаем вместо него grub2-efi:

yum install grub2-efi

Готовим образ загрузки:
Предварительно создаем структуру для образа загрузки EFI:

mkdir -p /boot/grub2-efi/EFI/BOOT

Создаем образ EFI для загрузчика:

grub2-mkimage -d /usr/lib/grub2-efi/x86_64-efi/ \
-o /boot/grub2-efi/EFI/BOOT/BOOTX64.EFI -O x86_64-efi \
--prefix /EFI/BOOT part_gpt part_msdos lvm fat ext2 \
chain boot configfile normal minicmd linux reboot halt \
search gfxterm gfxmenu efi_gop efi_uga video loadbios \
gzio video_bochs video_cirrus echo true loadenv

Особое внимание! на то, как называется файл и каталог:
EFI/BOOT/BOOTX64.EFI — все только большими буквами, иначе мак не поймет 🙂

Теперь копируем в нашу структуру файлы из каталог /usr/lib/grub2-efi/x86_64-efi/ в каталог /boot/grub2-efi/EFI/BOOT:

cp /usr/lib/grub2-efi/x86_64-efi/* /boot/grub2-efi/EFI/BOOT

Там не очень много файлов и операция пройдет быстро.

Нам очень нужны дополнительные параметры в конфигурационном файле grub.cfg, и чтобы не дописывать их туда вручную каждый раз, пропишем один раз и навсегда.
Открываем любимым редактором (emacs/vim/vi/nano/mcedit/gedit) файл /etc/grub.d/10_linux ищем в нем строку:

1
message="$(gettext_printf "Loading Linux %s ..." ${version})"

и перед этой строкой вставляем:

1
2
3
4
5
6
7
8
cat << EOF
# Switch gmux to IGD
outb 0x728 1
outb 0x710 2
outb 0x740 2
# Powers down ATIa
outb 0x750 0
EOF

Комментарии можно пропустить — они лишь для понимания того, что делают эти странные магические параметры 🙂
А делают они поистине волшебное действие — выключают нафиг ATI Radeon и переключают отображение на встроенный графический контроллер Intel (забегая вперед предупрежу — не пугайтесь, переключение происходит около 20 секунд, из-за EFI опять же).

Так, магию вставили, теперь нам надо сразу прописать параметры ядра Linux, которые нам понадобятся, открываем файл /etc/default/grub и в строке GRUB_CMDLINE_LINUX в конце (между кавычек) через пробел вписываем следующее:

1
i915.lvds_channels=2 i915.lvds_use_ssc=0 i915.i915_enable_rc6=1 i915.i915_enable_fbc=1 acpi_backlight=vendor apple_bl.use_gmux=1
  • i915.lvds_channels=2 — включить режим двухканального LVDS (да, у нас крутая видюшка, двухканальная 😉 );
  • i915.lvds_use_ssc=0 — по желанию или по глюкам, эта и нижеследующие 2 опции i915 что-то делают с энергосбережением и рекомендованы в большинстве англоязычных инструкций, потому не будем отрываться от братьев наших меньших;
  • i915.i915_enable_rc6=1
  • i915.i915_enable_fbc=1
  • acpi_backlight=vendor — указывает «ведру» в выборе вариаций работы с яркостью — руководствоваться инструкциями производителя
  • apple_bl.use_gmux=1 — включает более корректную регулировку яркости.

Записали, сохранили, вышли.

Сгенерируем grub.cfg для загрузки:

grub2-efi-mkcofnig -o /boot/grub2-efi/EFI/BOOT/grub.cfg

И на всякий случай установим grub2-efi на раздел с EFI (это который отформатирован в (v)FAT[16/32] и имеет размер — 200 Mb), например так:

grub2-efi-install /dev/sda5

Замени /dev/sda5 на правильный раздел в твоей системе!

Всё. Ура! Теперь Fedora сможет загружаться, но пока еще не будет 🙂

kernel со «специями»

Как я говорил ранее, надо нужно ядро, которое будет особым образом приготовлено, а точнее содержать очень нужные (на момент kernel-3.2.3) патчи.
Тут есть два варианта: 1) можешь сам собрать ядро, используя патчи внизу этой статьи и 2) можешь воспользоваться мною собранным ядром по адресу: http://repo.elemc.name/repos/macbook/repo.
Выбор за тобой. Но в случае первого варианта, лучше всего сделать так, чтобы релиз в части версии пакета сильно отличался от «родных» ядер Fedora, чтобы вдруг не заменить ядро новым из обновлений. Я в этом случае добавляю к номеру релиза +100.
Но собранное ядро надо установить, через yum install /путь/к/пакету/с/ядром.rpm или rpm -ivh /путь/к/пакету/с/ядром.rpm — тут опять же выбор за тобой.
Как установишь, надо обновить наш grub.cfg:

grub2-efi-mkcofnig -o /boot/grub2-efi/EFI/BOOT/grub.cfg

Если все прошло без ошибок, то мы увидели как grub2-efi — «посчитал» наше ядро, а значит внес его в grub.cfg.
Важно! Грузимся только с патченного ядра, с «родного» ядра Fedora мы не сможем загрузиться.

Зачищаем следы

Все, что было нужно мы сделали, выходим из chroot командой exit.
Отмантируем все, что примантировали ранее.
Перегружаемся.

После звукового сигнала нажимаем клавишу Alt (он же Option) и видим, что в выборе добавился новый диск «EFI drive».
С него и пытаемся загрузиться, должны мы увидеть приглашение grub, выбираем наше ядро и…
Ну тут три варианта.
Все правильно сделал и Fedora загружается!
Где-то накосячил и Fedora не загружается.
Или вдруг я что-то не описал, с чем мне не пришлось столкнуться. Тогда пиши в комментариях, стучись в jabber, заходи в конференцию fedora@conference.jabber.ru. Вместе попробуем разобраться.

Патчи к ядру

apple_bl-gmux.patch
Добавляет возможность регулировки яркости дисплея.
Понадобиться опция ядра apple_bl.gmux=1

apple_gmux.patch
Патч для добавления MacBookPro8,2 в vga_switcheroo, для динамического переключения, честно не проверял, хотя бы потому, что без жесткого выключения radeon у меня ничего и не видно.

change-default-console-loglevel.patch
Это простенький патчик, который уменьшает тонны «воды» в логе ядра.

efifb-hi-res.patch
Данный патч включает большое разрешение для efifb. Это важно для использования внешнего монитора.

i915_reverse.patch
Это пожалуй один из самых важных патчей, исправляет работу i915 с нашими видюшками, без него мы увидим — черный экран бесконечности.

lvds_dual_channel.patch
А это второй важный патч, который добавляет в i915 возможность работы двухканальной intel-видеокарты.
Потребуется параметр ядра: i915.lvds_channels=2

radeon-read_bios_from_firmware.patch
Это самый бесполезный патч, он добавляет radeon’у возможность загрузить прошивку.
Прошивку можно сделать самому, загрузившись с CD/DVD (в BIOS-режиме) и выполнив:

dd if=/dev/mem of=vbios.bin bs=65536 skip=12 count=1

и полученный файлик положить в /lib/firmware/radeon.

Все патчи можно взять тут: http://repo.elemc.name/repos/macbook/patches/

Предтечи или из чего сложилось такое руководство

Дополнения приветствуются!

Добавить комментарий