Pages

Friday, July 13, 2012

Macbook pro 2012 (8.1) e Ubuntu

Apple: un passo avanti, 10 indietro (come al solito).
All'arrivo dei nuovi macbook aziendali (perchè usare un mac in azienda, poi?) mi sono meravigliato di un notevole miglioramento del sistema operativo più antipatico e chiuso del mondo: una volta ripartizionare la partizione di sistema di OSX era veramente complicato. Oggi invece è possibile farlo anche dallo stesso sistema operativo: innovazione non da poco, credo che su linux si possa fare solo con btrfs.

Ma veniamo alle rogne: provo la "solita" procedura di installazione, usando Refit perchè ok, grub "dovrebbe" supportare il boot efi nativo, ma si sa, io non mi fido mai molto...

Occhio a selezionare il "partizionamento manuale".
Come layout del disco scelgo il seguente:
  • sda1: partizione EFI di osx (già esistente).
  • sda2: partizione di sistema osx (già esistente).
  • sda3: partizione di recovery di osx (già esistente).
  • sda4: swap linux, dimensioni pari alla ram del sistema (nel mio caso, 4GB)
  • sda5: partizione root linux (non mi andava di creare mille partizioni, ed ho messo tutto sulla root, potrò sempre cambiare in seguito).
Accorgimento importante: in una delle schermate di installazione viene chiesto dove installare il boot loader (grub2). Io ho scelto la partizione root linux (quindi /dev/sda5), e a parte le rogne di OSX che descriverò in seguito la cosa è andata liscia. Un'alternativa (da testare) potrebbe essere sda1.

Il primo boot è andato senza problemi. Una cosa che però mi ha stranizzato quasi subito è stata la scomparsa di refit.
Dopo un paio di riavvii decido di riavviare osx per verificare il funzionamento di alcune periferiche. E qui iniziano i problemi.
Anzitutto, grub2 non riesce ad avviare osx. Probabile qualche incompatibilità con lion.
Cercando su google la soluzione migliore sembra essere di avviare il mac tenendo premuto il tasto "option" (che è evidentemente il modo fighetto dei mac-isti di chiamare il tasto "ALT").

Ok, osx si avvia... problema: ha sovrascritto senza pietà grub, infatti al riavvio successivo è impossibile avviare ubuntu.
Ri-ok, pazienza, proviamo a installare refit: risultato, refit NON viene mostrato (mi sa che viene sovrascritto anche lui) e in più non si avvia più neanche osx.
Ri-ri-ok: una soluzione che riesco a trovare è di installare refit su un cdrom. Questo riesce a far avviare sia osx sia linux.
Ma ovviamente bisogna metterci una pezza.
Ecco come sono riuscito a rimediare:

Al primissimo avvio di Ubuntu, in /etc/grub.d/ creare un nuovo file per inserire una entry "custom" in grado di avviare OSX.
Nel mio caso, /etc/grub.d/42_osx_chainloader
Ricordarsi di marcarlo come eseguibile (chmod a+x /etc/grub.d/42_osx_chainloader).
Il contenuto è il seguente:

#!/bin/sh
cat <<EOF
# Chainloading OSX EFI Bootloader
menuentry "OSX-Chainloader" {
        insmod part_gpt
        insmod hfsplus
        set root='(hd0,gpt2)'
        search --no-floppy --fs-uuid --set=root $( grub-probe -d /dev/sda2 -t fs_uuid)
        load_video
        set do_resume=0
        chainloader /usr/standalone/i386/boot.efi
}120
EOF

Ovviamente se OSX non fosse su /dev/sda2 bisogna modificare inserendo il dispositivo giusto (ma su una installazione di default dovrebbe andar bene).

Eseguire "sudo update-grub"
Al prossimo boot, troverete la nuova entry "OSX-Chainloader". Sceglierla per avviare osx.
Adesso il problema è evitare di far sovrascrivere grub da osx.
Io ho risolto scrivendo un file che reimposta grub come bootloader di default.
Posizione: /usr/sbin/bless_grub.sh
#!/bin/bash
mkdir -p /Volumes/efi
mount -t msdos /dev/disk0s1 /Volumes/efi

bless --folder=/Volumes/efi --file=/Volumes/efi/EFI/ubuntu/grubx64.efi --setBoot
bless --mount=/Volumes/efi --file=/Volumes/efi/EFI/ubuntu/grubx64.efi --setBoot



Anche questo file deve essere marcato come eseguibile (chmod a+x /usr/sbin/bless_grub.sh ).
Ora bisogna fare in modo di far eseguire questo file ad osx come root ad ogni avvio.
La soluzione "pulita" è usare plist, l'init di apple. Essendo abbastanza complesso da usare, ho optato per la soluzione "quick&dirty", ovvero aggiungere la riga
 /usr/sbin/bless_grub.sh
Alla fine del file /etc/rc.common.
Abbiamo finito: adesso grub2 è in grado di avviare osx, ed osx ad ogni avvio reimposta grub2 come bootloader predefinito.
Unico problema ancora aperto: nel mio caso grub2 ci mette ben 20 secondi ad avviarsi.
Idee?
Update: aggiornando a Ubuntu 12.10 beta (e quindi presumibilmente anche grub) il problema sembra sparito...
Update-bis: ho notato che a risolvere non è stato l'aggiornamento, infatti il problema si è ripresentato.   Pensandoci meglio però ho trovato la soluzione effettiva: rieseguire "grub-install", senza parametri.

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.