Macbook 2006 e Ubuntu 16.04 con EFI

In famiglia avevamo un vecchio Macbook 2006 che se ne stava in un cassetto già da molto tempo. Perchè non riportarlo a nuova vita?

Oltre OS X Lion 10.7.5 non era possibile andare e realisticamente con 1gb di ram e un hard-disk da 5400rpm eravamo già ai limiti.

Grazie ad un precedente “upgrade” del mio mediacenter avevo un disco SSD da 64gb che mi avanzava, un vecchio portatile con lo schermo rotto e mai riparato (antieconomico) avrebbe fornito la ram per espandere il Macbook al massimo di 3gb.

Ho deciso di passare ad Ubuntu 16.04.1 LTS.  Ho scelto la versione a 64bit, visto che il portatile ha una cpu Intel Core 2 Duo.

Anche in questo caso (vedi il mio post su Lenovo Ideapad Flex 10) mi sono trovato con un problema di sistemi EFI a 32bit con sistemi potenzialmente a 64bit.
Neanche l’immagine di sistema più recente (con Ubuntu 16.04.1) supporta questa situazione ibrida. Ho dovuto quindi cercare delle soluzioni per generare un’immagine da scrivere sulla mia chiavetta usb che potesse essere eseguita dal bios EFI a 32bit del Macbook.

I comandi successivi sono da eseguire con diritti di root (sono stati provati su una Ubuntu 16.04). Li ho in parte modificati rispetto alle istruzioni dedicate ad un ASUS EeeBook. Iniziamo a scaricare l’ISO di Ubuntu, e nel caso non l’avessimo, 7Zip:

apt install p7zip-full
wget http://releases.ubuntu.com/16.04/ubuntu-16.04.1-desktop-amd64.iso

Quindi andiamo a preparare la chiavetta USB, supponendo che la chiavetta stia sul device /dev/sdb e che non sia montata su nessuna directory locale. Attenzione! Questi comandi cancelleranno tutto quello che sta su /dev/sdb:

sgdisk --zap-all /dev/sdb
sgdisk --new=1:0:0 --typecode=1:ef00 /dev/sdb
mkfs.vfat -F32 /dev/sdb1

Monto la chiavetta sulla directory /mnt e ci copio il file ISO:

mount -t vfat /dev/sdb1 /mnt
7z x ubuntu-16.04.1-desktop-amd64.iso -o/mnt/

Crea il bootloader a 32bit e lo scrive sulla chiavetta:

apt install git bison libopts25 libselinux1-dev autogen m4 autoconf help2man libopts25-dev
apt install flex libfont-freetype-perl automake autotools-dev libfreetype6-dev texinfo
git clone git://git.savannah.gnu.org/grub.git
cd grub
./autogen.sh
./configure --with-platform=efi --target=i386 --program-prefix=''
make
cd grub-core
../grub-mkimage -d . -o bootia32.efi -O i386-efi -p /boot/grub \
ntfs hfs appleldr boot cat efi_gop efi_uga elf fat hfsplus iso9660 linux keylayouts \
memdisk minicmd part_apple ext2 extcmd xfs xnu part_bsd part_gpt search search_fs_file \
chain btrfs loadbios loadenv lvm minix minix2 reiserfs memrw mmap msdospart scsi loopback \
normal configfile gzio all_video efi_gop efi_uga gfxterm gettext echo boot chain eval
cp bootia32.efi /mnt/EFI/BOOT/
umount /mnt

Ricordandosi che è necessario premere il tasto “Option” in fase di boot, altrimenti non potremo scegliere il boot dalla partizione EFI della chiavetta.

Finalmente,  potremo installare una bella Ubuntu sul nostro Macbook, con tabella delle partizioni GPT e pronta per il boot da EFI.

Ma il lavoro, purtroppo, non è ancora finito.. Alla fine dell’installazione, ci accorgeremo che il boot da disco non funziona e che il solo modo per eseguire Ubuntu è affidarsi alla partizione di boot dalla nostra fidata chiavetta.

Qualcosa ancora non va. Finalmente, grazie ad un ottimo articolo ho trovato la spiegazione e la soluzione del mio problema: la partizione EFI deve essere formattata con il filesystem Mac HFS+ (e non Fat32) e devono essere presenti alcuni specifici files.

Nell’articolo appena menzionato, viene spiegato come installare Ubuntu su Mac recenti (dal 2012 in poi) che ovviamente non hanno i problemi che ho affrontato per creare il disco di installazione (sono sistemi full 64bit).

Dobbiamo aggiungere un repository con utilities per Intel Mac (fan control, HFS bless, bootloader icon, etc..).

Supponendo che la partizione EFI sia la numero 1, riporto di seguito le istruzioni leggermente modificate per un EFI a 32 bit :

add-apt-repository ppa:detly/mactel-utils
apt update
apt install mactel-boot hfsprogs gdisk grub-efi-ia32
umount /dev/sda1 

Modifica la partizione EFI su /dev/sda1, questi sono i comandi da eseguire con gdisk:

gdisk /dev/sda
Command (? for help): d
Partition number (1-3): 1

Command (? for help): n
Partition number (1-128, default 1): 1
«accept defaults»

Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): AF00
Changed type of partition to 'Apple HFS/HFS+'

Command (? for help): w

Formatta la partizione EFI e Aggiorna fstab:

mkfs.hfsplus /dev/sda1 -v Ubuntu
bash -c 'echo $(blkid -o export -s UUID /dev/sda1) /boot/efi auto defaults 0 0 >> /etc/fstab'
mount /boot/efi

Installa Grub:

mkdir -p "/boot/efi/EFI/$(lsb_release -ds)/"
bash -c 'echo "This file is required for booting" > "/boot/efi/EFI/$(lsb_release -ds)/mach_kernel"'
bash -c 'echo "This file is required for booting" > /boot/efi/mach_kernel'
grub-install --target i386-efi --boot-directory=/boot --efi-directory=/boot/efi --bootloader-id="$(lsb_release -ds)"
hfs-bless "/boot/efi/EFI/$(lsb_release -ds)/System/Library/CoreServices/boot.efi"
Condividi:
Subscribe
Notificami
10 Commenti
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Simone
Simone
10 Ottobre 2020 14:18

Salve mi chiamo Simone e stò cercando di instaòòare Ubuntu su un iMac del 2006 con EFI a 32 bit.

Io ho seguito tutta la guida fino a che non arriva il momento di modificare la partizione EFI

come ho detto seguo la guida..ma quando eseguo questo comando “mount /boot/efi” mi viene dato il seguente errore…come lo risolvo?

“mount: /etc/fstab: parse error: ignore entry at line 3.”
“mount: can’t find /boot/efi in /etc/fstab”

Grazie a tutti

Luca
Luca
15 Giugno 2020 12:17

Grazie per la guida, ma non per Ubuntu 18.04 ricevo errore: Errore:14 http://ppa.launchpad.net/detly/mactel-utils/ubuntu bionic Release
404 Not Found [IP: 91.189.95.83 80]
Si può risolvere in qualche modo?
Grazie mille

webadmin
Admin
webadmin
15 Giugno 2020 15:29
Reply to  Luca

Lo sviluppatore non ha più aggiornato il PPA per Ubuntu 18.04 e successivi, si è fermato a 16.04.
Dovrebbe bastare scaricare e installare il semplice mactel-boot_0.9-1~xenial_amd64.deb (versione Ubuntu Xenial 16.04):

    dpkg -i mactel-boot_0.9-1~xenial_amd64.deb

francesca
francesca
12 Novembre 2017 19:00

Il comando ../grub-mkimage -d . -o bootia32.efi -O i386-efi -p /boot/grub \ mi dà il seguente errore:
../grub-mkimage: errore: impossibile aprire “./moddep.lst”: File o directory non esistente.

Suggerimenti? Grazie

webadmin
Admin
webadmin
13 Novembre 2017 8:08
Reply to  francesca

Il comando (che è molto lungo e suddiviso su più linee) deve essere eseguito con diritti root

Emanuele
Emanuele
2 Ottobre 2016 0:11

Grazie per la guida!
Il penultimo comando, “grub-install –target x86_32-efi….”, non dovrebbe essere invece “grub-install –target i386-efi…” ?

Emanuele
Emanuele
1 Ottobre 2016 20:06

Grazie delle istruzioni! Sto installando il vecchio macbook proprio ora. Una nota che può essere utile anche ad altri: una volta preparata la chiavetta USB, per fare il boot da questa non ha funzionato premere “c” all’avvio. Non so perché. Invece ha funzionato premere il tasto “option” all’avvio e poi scegliere dal menu grafico cosa avviare.

webadmin
Admin
webadmin
2 Ottobre 2016 9:40
Reply to  Emanuele

Si. E’ vero, è necessario premere “Option” in fase di boot, mi ero scordato di aggiungere questo suggerimento.

Pietro De Nicolao
19 Settembre 2016 19:56

Grazie mille! È una cosa che cercavo di fare da anni, ma non ci ero mai riuscito. Ho adattato il tuo procedimento per avviare la live di Arch Linux per poi installarlo, cosa che ha funzionato. Non ho avuto poi particolari problemi per il boot del sistema installato, il punto critico sono proprio i live USB che generalmente non hanno mai gli EFI a 32 bit. :)