giovedì 18 dicembre 2014

Come avviare il proprio OS linux direttamente dal firmware efi

Dopo aver sperimentato in prima persona questa follia, sono pronto a insegnarvi la sacra arte dello sminchiare il pc, ma con classe
Innanzitutto cosa è necessario: avremo bisogno di un kernel linux > 3.3 e le seguenti opzioni attive nella sua config: Kernel options needed (in archlinux esse sono attive di default, come penso in tutte le distro più recenti)
L'unica motivazione plausibile per provare a farlo è quella di voler eliminare il bisogno di un bootloader (tipo grub) per avviare il proprio OS, sfruttando appieno UEFI.
In teora (non ho potuto testare perché il mio laptop è linux-only) non si dovrebbero avere problemi con eventuali multiboot con windows o altri sistemi che già utilizzino UEFI.
La prima cosa di cui si ha bisogno è una tabella delle partizioni del disco di tipo GPT. Essa offre molti vantaggi rispetto al vecchio MBR, per informazioni vi rimando qua: Advantages of GPT.
Vediamo quindi subito che tipo di partizionamento stiamo usando. Installate il tool gdisk e lanciate da root
gdisk /dev/sdX
(dove X è la lettera del disco che ci interessa).
Un risultato del genere ci dirà che siamo su MBR:
MBR: MBR only
GPT: not present
Altrimenti, per GPT, riceveremmo
MBR: protective
GPT: present
Nel caso fossimo su MBR, ora ci appresteremo a convertire a GPT il nostro disco. Nessuna perdita di dati ovviamente. 
DISCLAIMER: non ritenetemi colpevole di qualsivoglia perdita di dati. Fate comunque un backup se non vi fidate (NON FIDATEVI!)
Ci sarà bisogno di una live, io per tutta la prima parte (cioè la conversione a GPT e la creazione della partizione EFI + impostazione di fstab per montare la partizione EFI in /boot) ho usato una live grafica (archbang nello specifico) e gparted; per l'ultimissima parte ho dovuto usare una live di archlinux (l'ultima disponibile), poiché non riuscivo ad avviare archbang da UEFI.
Innanzitutto controllate che l'ultima partizione sul disco non termini alla fine dello stesso (cioè che lasci un po' di spazio libero). Se così non fosse, tramite gparted ridimensionate l'ultima partizione lasciando 500Kb (in linea teorica bastano 20Kb) a fine disco.
Aprite gdisk e uscite con l'opzione “w” che convertirà il disco in GPT. State attenti all'output; se non vi dà errori, siete pronti a proseguire.
Adesso, se non è già presente (ad esempio se avevate windows 8 installato sul pc, probabilmente ci sarà già) bisognerà creare una partizione EFI (tramite gparted sempre), da 512Mb, formattata in FAT32; assegnategli il flag boot (attenzione, non legacy_boot). Io ho ridimensionato la mia root per crearla.
Ora montate la root del vostro OS e la partizione EFI, e modificate /etc/fstab per far montare la partizione EFI in /boot, ossia aggiungete una linea del genere, modificando sdXY con la vostra partizione EFI:
/dev/sdXY /boot vfat defaults,noatime 0 1
Siamo quasi pronti; adesso copiate il contenuto di /boot (sempre dalla directory in cui avete montato la vostra root) nella partizione EFI (di modo che al primo avvio, quando verrà montata come /boot, non ci siano problemi).
Bene; dopo aver smontato la root e la partizione EFI, possiamo riavviare.

Nell'ultima parte utilizzeremo la live di archlinux poiché abbiamo bisogno di un sistema che booti su uefi. Prima di tutto, disabilitate il secure boot dal bios (o meglio, io l'ho disabilitato per comodità, altrimenti seguite questo: Boot archlinux live media with secure boot enabled ).
Attiviamo ovviamente la modalità UEFI dal bios, e procediamo al boot della live di arch.
Ci manca solo da dare un comando:
efibootmgr -d /dev/sdX -p Y -c -L "Arch Linux" -l /vmlinuz-linux \
-u "root=/dev/sdXZ rw initrd=/initramfs-linux.img"
dove X è la lettera del disco su cui c'è la partizione EFI, e Y è il numero della partizione EFI. Z invece è il numero della partizione root (attenzione è un comando unico, anche se qua è spezzato su due righe). Nel caso aveste opzioni che passavate alla command line del kernel, aggiungetele alla fine del comando precedente, prima delle virgolette alte conclusive.
Ora diamo un:
efibootmgr -v 
e controlliamo che sia tutto in ordine. Fatto ciò, possiamo riavviare rimuovendo la chiavetta. Godetevi il vostro boot da UEFI! E disinstallate pure grub/syslinux ;)

Ps: ringrazio il fantastico wiki di archlinux che è colmo di informazioni e su cui si appoggia la guida.

Nessun commento:

Posta un commento