Existem vários maneiras, eu corri a mais arriscada, simplesmente “mandei embora” o MacOS, apagando as respectivas partições (com e excepção da partição de boot EFI), e quando fui instalar o Ubuntu, o sistema insistia em não reconhecer a nova partição com o Ubuntu instalado, procurei com insistência na net soluções, até que encontrei este artigo[^1]. E percebi que o problema tem a ver precisamente com a partição EFI, que no mac tem de ser HFS+, e não FAT, para que o sistema a reconheça como tal. De forma que como instalador do Ubuntu instala esta partição com o sistema FAT, ela tem de ser apagada e substituída por uma HFS+, como vamos ver de seguida.
TL; DR
Sumáriamente, para os impacientes, os passos são os seguintes:
- Instalar o ubuntu nornalmente
- Reiniciar no boot menu do Grub e através da linha de comandos deste, descobrir a partição raíz do Ubuntu que acabou de instalar
- Através de um comando Grub nessa linha de comandos, arrancar o Ubuntu
- Instalar software no Ubuntu para criar a partição HFS+ EFI
- Apagar a partição EFI FAT criada pelo instalador do Ubuntu substituí-la pela HFS+
- Instalar o bootloader do grub na partição EFI
- Reiniciar o sistema, e agora o boot menu Grub já deve aparecer com o Ubuntu…
Agora vamos aos passinhos todos, um a um…
O detalhe todo…
- Instale o Ubuntu normalmente no seu mac e espere que complete e o sistema peça para reiniciar, deixe ficar o disco de instalação que utilizou ligado no USB, porque vamos precisar dele de seguida
-
Após o início, mantenha a tecla Meta (Maçã) premida, da mesma que usou para arrancar a partir do disco USB, mas quando aparecer o boot menu do Grub prima c, isso vai fazer com que apareça uma linha de comandos:
grub>
nessa linha de comandos, digite:
grub> ls
e irá aparecer algo do género:
(memdisk) (hd0) (hd1) (hd1,gpt3) (hd1, gpt2) (hd1,gpt1) ...
Supondo que `hd1` é o disco onde instalou o Ubuntu, você pode descobrir qual das várias partições `gptX` é aquela onde está o Ubuntu instalado. Se digitar por exemplo (hd1,hpt1) e premir `<Tab>` depois o grub vai auto-completar com qualquer
grub> ls (hd1,hpt1)/boot/grub
e o sistema disser
error: file `/boot/grub' not found.
isso signfica que não é a partição que estamos á procura. Mas se tentar com a seguinte:
grub> ls (hd1,gpt2)/boot/grub
unicode.pf2 ...
Cá está. Esta é a partição onde está o sistema raíz do Ubuntu instalado. De seguida temos de dizer
ao sistema que é esta a partição raíz:
grub> set root=(hd1,gpt2)
De seguida temos de descobrir o UUID, identificador único da partição raíz:
grub> ls -l (hd1,gpt2)
Partition hd1,gpt2: Filesystem type ext* 〈...snip...〉 UUID e86c20b9-83e1-447d-a3be-d1ddaad6c4c6 - Partition start at [...]
Essa sequência de números hexadecimais não vai ser a mesma que vai aparecer a si, mas aponte o UUID que ele vai ser necessário no passo seuginte:
grub> linux /boot/vmlinuz〈...prima tab!..〉.efi.signed root=UUID= e86c20b9-83e1-447d-a3be-d1ddaad6c4c6[^1]
[^2]: Substitua pelo UUID que encontrou acima
Aqui estamos basicamente a dizer ao grub a localização da imagem do kernel do Linux
De seguida basta apontar a localização da imagem de arranque do sistema, para tal prima na CLI do Grub:
grub> initrd /boot/initrd〈...tab aqui!...〉
Então para completar este passo basta digitar:
grub> boot
E voilà! Vai ver as mensagens do Kernel aparecer dizendo que o Linux está a ser executado…
Nota: se por qualquer após o kernel ter acabado de ser executado, se for deixado num prompt de initrafms, significa isso que o sistema não conseguiu montar a partição raíz, provavelmente porque enganou-se ao escrever o UUID…
Criando a partição de boot EFI baseado em HFS+
Para o passo seguinte, já com o sistema do Linux a correr, vamos precisar de instalar alguns pacotes de software para poder criar a partição EFI. Para isso vamos precisar dum pacote. Na página[^1] sugere instalar um repositório PPA. Mas se estiver a correr Ubuntu 18 ou posterior, não vai conseguir instalar o software usando o apt. Em vez disso aceda à página do repositório directamente descarregue os pacotes mactel-boot e mactel-boot-logo. Instale ambos os pacotes .deb com `dpkg -i`.
Depois instale os pacotes:
hfsprogs gdisk grub-efi-amd64
De seguida execute o utilitário `gdisk` para listar as partições no disco `sda`:
$ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.1
Partition table scan:
MBR: hybrid
BSD: not present
APM: not present
GPT: present
Found valid GPT with hybrid MBR; using GPT.
Command (? for help):
prima `p` e `<Enter>` para listar as partições em `sda`:
Command (? for help): p
Disk /dev/sda: ...
[...]
Number Start (sector) End (sector) Size Code Name
1 2048 1050623 512.0 MiB EF00 EFI System Partition
[...]
Neste caso, e o seu pode ser um pouco diferente, a instalação do Ubuntu criou uma partição com 512 MB usando FAT (vfat).
O mac não reconhece esta partição neste sistema de ficheiros, portanto vamos apagá-la:
Command (? for help): d
Partition number (1-3): 1
E criamos una nova com HFS+:
Command (? for help): n
Partition number (1-128, default 1): 1
Prima `<Enter>` duas vezes para aceitar os valores propostos
First sector (34-121307102, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-1050623, default = 1050623) or {+-}size{KMGTP}:
Mas quando chegar a vez de especificar o sistema de ficheiros, introduza `AF00`:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): AF00
Changed type of partition to 'Apple HFS/HFS+'
Agora, basta fazer `<w>+<Enter>` seguido de `<Y>` para aceitar os valores introduzidos e escrevar a nova tabela de partições:
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdd.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
Temos que formatar a nova partição:
$ sudo mkfs.hfsplus /dev/sda1 -v Ubuntu
Initialized /dev/sda1 as a 512 MB HFS Plus volume
De seguida, temos de indicar ao sistema que apagámos uma partição, e para isso temos de editar o ficheiro `/etc/fstab`:
sudoedit /etc/fstab
Se o ficheiro tiver um conteúdo análogo a este:
# /boot/efi was on /dev/sda1 during installation
UUID=C59D-1B30 /boot/efi vfat defaults 0 1
Apague a linha começada por UUID que indica a partição EFI que havia sido criada pela instalação e que nós apagámos.
De seguida, confirmamos de que já não está nenhuma partição montada em /boot/efi
:
$ mount | grep /boot/efi
/dev/sda1 on /boot/efi ...
Se aparecer uma linha semelhante a esta, "desmontamos" a partição do sistema de ficheiros:
sudo umount /dev/sda1
De seguida vamos instruir o sistema de que queremos uma nova partição que vai ser montada nesta posição:
sudo bash -c 'echo UUID=$(blkid -o value -s UUID /dev/sda1) /boot/efi auto defaults 0 0 >> /etc/fstab'
E vamos montar a partição no /etc/fstab
:
sudo mount /dev/sda1
De modo que deva voltar a aparecer uma partição montada em /boot/efi
:
$ mount | grep /boot/efi
/dev/sda1 on /boot/efi ...
De seguida vamos reinstalar o GRUB na nova partição, a começar pela directoria dentro da partição EFI:
$ sudo mkdir -p "/boot/efi/EFI/$(lsb_release -ds)/"
a expressão $(lsb_release -ds)
produz um nome da pasta com a versão correcta do Ubuntu que estamos a usar.
De seguida temos de criar dois ficheiros para que o mac reconheça a partição EFI. Os ficheiros são inúteis do ponto de vista prático, mas são necessários para a que a partição seja reconhecida:
$ sudo bash -c 'echo "This file is required for booting" > "/boot/efi/EFI/$(lsb_release -ds)/mach_kernel"'
$ sudo bash -c 'echo "This file is required for booting" > /boot/efi/mach_kernel'
Vamos então reinstalar o GRUB na partição EFI:
$ sudo grub-install --target x86_64-efi --boot-directory=/boot --efi-directory=/boot/efi --bootloader-id="$(lsb_release -ds)"
Só nos falta marcar (bless) usando um dos programas que instalámos do repositório:
sudo hfs-bless "/boot/efi/EFI/$(lsb_release -ds)/System/Library/CoreServices/boot.efi"
E finalmente, temos a configuração do GRUB:
$ sudo sed -i 's/GRUB_HIDDEN/#GRUB_HIDDEN/g' /etc/default/grub
$ sudo sed -i 's/GRUB_TIMEOUT=10/GRUB_TIMEOUT=0.1/' /etc/default/grub
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
E pronto! Basta reinicar e irá aparecer o bootmenu do GRUB no arranque!