Ставим Ubuntu на MacBook pro 11,3 (2013) или хакинтош наоборот

в 17:27, , рубрики: EFI, linux, macbook retina, Ubuntu, Убунтариум, метки: , ,

Пришло время мне менять ноутбук, и с крайнем неудовольствием для себя, я обнаружил, что ноутбуков с экраном 16х10, кроме продукции одной фруктовой компании(с), на рынке просто нет. Надо сказать, что по железу новая прошка весьма не дурна, и не смотря на конский ценник, жаба была задавлена, а ноутбук приобретен.
В этой статье не будет никаких новых методов борьбы с яблочной самостийностью — все рецепты почерпнуты в интернете. Надеюсь, что мой опыт будет кому-нибудь полезен, но сразу оговорюсь, все, что Вы сделаете, руководствуясь данной статьей — Вы делаете на свой страх и риск, так что…

Перерыв интернет, пришел к выводу, что есть три принципиальных возможности установки и использования Linux на маках:

  • С помощью специального дистрибутива с суфиксом mac. Тайным образом взаимодействует с BootCamp, для того, чтобы отключить загрузку EFI
  • С помощью rEFIt (или его развития rEFInd)
  • С помощью родного яблочного загрузчика (далее по тексту — яблогрузчик)

Подход со специальным дистрибутивом с суффиксом mac имхо, не применим к прошке 2013 года — для того, что-бы заставить работать linux после инсталляции, многие источники предлагают различные ключи для ядра — от nolapic до nosmp, что, как Вы понимаете, не годится абсолютно. Вычеркиваем.
Из оставшихся двух — мне роднее применение нативного загрузчика — меньше сущностей, да и вообще, хотя загрузка с помощью rEFInd вполне имеет право на жизнь. Остановимся на яблогрузчике.
Надо заметить, что современные прошки имеют вполне себе uefi загрузчик, но, как это водится, не совсем обычный — все что не поподя, грузить не будет. Есть еще некоторые нюансы, но сейчас мы их разбирать не будем.
Для того, чтобы яблогрузчик загрузил милый нашему сердцу Linux, последний должен прикинуться osx, точнее не сам Linux, а efi grub. Для этого должны быть выполнены следующие условия:

  • Должен быть партишен типа Apple HFS, соответственно, с файловой системой hfs
  • На этом партишине должна быть дирректория System/Library/CoreServices с файлами boot.efi и SystemVersion.plist, в специальном формате описывающий содержимое партишена
  • в корне партишена должен быть файл mach_kernel

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

Итак, начинаем.

  1. готовим инсталляционную флешку с помощью Unetbootin из mirror.yandex.ru/ubuntu-releases/13.10/ubuntu-13.10-desktop-amd64.iso (обратите внимание, не mac версия!!!)
  2. загружаемся в osx, ресайзим партишен (я оставил под osx 160GB, хотя этот метод позволяет вообще обойтись без osx, но по мне — пусть будет)
  3. перезагружаемся, удерживая при загрузке Alt для выбора источника загрузки. Наша флешка видится в двух вариантах — надо выбрать efi вариант загрузки.
  4. в меню grub выбираем try ubuntu. При загрузке с флешки имеет смысл отредактировать строку параметров загрузки ядра, добавив в нее libata.force=noncq — в инете есть жалобы на периодические 20 -30 секундные замирания системы при обращении к диску.
  5. подключаемся к инету -для этого ставим проперитарные драйвера WiFi System Settings->Software&Updates->Additional Drivers, где включаем драйвер Broadcom 802.11 и подключаемся к соседскому WiFi
  6. ставим gdisk
    sudo apt-get install gdisk
  7. с помощью gdisk создаем партишен размером мегабайт 10 (далее, этот партишен будет именоваться как 10MB партишен). Надо отступить 128 мегабайт от партишена с osx — иначе последний будет сильно переживать. Удобно использовать +128M и +10M в качестве параметров размещения партишена.
  8. на этом этапе имеет смысл перезагрузиться в osx и проверить диск. Там-же его можно и отформатировать в Mac OS Extended (не журнализированный вариант, иначе будут сложности из-под Linux) и переименовать в Ubuntu, хотя в этой инструкции мы будем делать все из-под linux, так как может захотеться снести osx целиком.
  9. опять перезагружаемся по alt с флешки и заходим в try ubuntu (не забываем добавлять libata.force=noncq)
  10. запускаем инсталятор (Install Ubuntu 13.10)
  11. размечаем партишены для установки по вкусу — я сделал root 20G и все остальное — home. Swap не делал — всегда можно создать файл.
  12. далее ставим ubuntu с одним замечанием — не перезагружаемся в конце инсталляции. (Обратите внимание, что имя компьютера содержит жалобную надпись о том, что не удалось корректно прочитать DMI. Это лучше поправить, иначе в терминале приглашение будет занимать половину экрана)
  13. после завершения инсталляции, не перезагружаясь (хотя, если перезагрузитесь — ничего страшного, но надо будет опять грузиться с флешки, так как наш Linux еще не прикидывается osx) монтируем нашу только что полученную инсталляцию
    mkdir /tmp/u
    sudo mount /dev/sda4 /tmp/u
    sudo cp /etc/resolv.conf /tmp/u/etc/resolv.conf
    sudo mount --bind /dev /tmp/u/dev
    sudo mount --bind /proc /tmp/u/proc
    sudo mount --bind /sys  /tmp/u/sys

    • мы скопировали resolv.conf — это требуется для того, чтобы в окружении chroot нормально работало разрешение имен. При старте нашей проинсталированной ubuntu этот файл пересоздастся Network Manager`ом.
    • можно еще замонтировать /dev/pts

  14. собственно, переходим в chroot:
    sudo chroot /tmp/u/ 
  15. ставим поддержку hfs и gdisk
    sudo apt-get install hfsprogs icnsutils gdisk 

    (так как мы делаем это из chroot, эти пакеты поставятся в нашу новую инсталляцию)

  16. форматируем созданный 10MB партишен (в моем случае /dev/sda3)
    sudo mkfs.hfsplus /dev/sda3 -v Ubuntu
  17. выясняем UUID 10MB партишена с помощью blkid
  18. правим /etc/fstab — меняем монтирование /boot/efi на UUID, который определили в предыдущем шаге и файловую систему с vfat на auto
  19. перемонтируем /boot/efi
    umount /boot/efi
    mount boot/efi
  20. правим файл /usr/sbin/grub-install, комментируя проверку типа файловой системы — что-то вроде
    #   if test -n "$efidir"; then
    #       efi_fs=`"$grub_probe" --target=fs "--device-map=${device_map}" "${e$
    #       if test "x$efi_fs" = xfat; then :; else
    #           gettext_printf "%s doesn't look like an EFI partition.n" "${ef$
    #           efidir=
    #       fi
    #   fi
    

  21. выполняем grub-install
  22. создаем фейковую инсталяцию osx:
    • touch /boot/efi/mach_kernel
    • mkdir -p /boot/efi/System/Library/CoreServices
    • создаем файл /boot/efi/System/Library/CoreServices/SystemVersion.plist со следующим содержанием:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList- 1.0.dtd">
      <plist version="1.0">
      <dict>
             <key>ProductBuildVersion</key>
             <string></string>
             <key>ProductName</key>
             <string>Ubuntu</string>
             <key>ProductVersion</key>
             <string>13.10</string>
      </dict>
      </plist>
      

    • создаем линк на grubx64.efi
      ln /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/System/Library/CoreServices/boot.efi
  23. правим /etc/default/grub, приводя строку к виду:
    GRUB_CMDLINE_LINUX_DEFAULT=«libata.force=noncq»
  24. выполняем
    update-grub
  25. перегружаемся.

На этом этапе мы уже имеем работоспособную систему, в которую мы можем загрузиться по alt и которую мы вполне можем выбрать из под osx (boot disk) в качестве основной.

Некоторые замечания:

  • после перезагрузки у меня изменился UUID 10MB партишена — пришлось еще раз поправить fstab
  • причину появления и исчезновения третьего пункта под названием «Windows» в яблогрузчике мне установить пока не удалось, да вобщем и не мешает особо.
  • имеет смысл поставить ядро 3.12, например, отсюда.
  • закрытые драйвера от NVidia встают тривиально, правда ломается управление подсветкой экрана. Немного улучшается ситуация добавлением в параметры grub acpi_backlight=vendor
  • после установки Ubuntu, яблозагрузчик иногда бывает задумчив — лечится сбросом NVRAM — при старте одновременно нажать и подержать alt+cmd+P+R и дождаться второго па-па!
  • звука нет, но это легко лечится вот этим патчем (этот патч подходит и к родному модулю от ядра 3.11)
  • можно переназначить поведение клавиш F1..F12 на привычное, т.е. без Fn
    echo options hid_apple fnmode=2 | sudo tee -a /etc/modprobe.d/hid_apple.conf
    sudo update-initramfs -u -k all
  • из украшательства — можно положить картинку с симпатичным котиком с именем .VolumeIcon.icns в /boot/efi — она будет отображаться в меню яблогрузчика для нашей Ubuntu

В следующих сериях:

  • приведение в юзабельный, на высоком разрешении, вид темы ubuntu — пока можно переключить разрешение на более низкое. (Корни сложностей уходят в сурсы гнома, в котором какие-то пихорошие люди впилили намертво 96DPI, причем правка этого дефайна приводит к неоднозначным последствиям.)
  • запиливание переключения на интегрированную графику и обратно, на дискретную. здесь большие надежды на ядро 3.13 — много хороших изменений по интегрированной графике от intel.

Удачного хака!

Автор: Uint32

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js