Repository 32bit  Forum
Repository 64bit  Wiki

Dual Boot UEFI: Slackware 14.0 e Windows 7

Da Slacky.eu.

Indice

Introduzione

Lo scopo di questa guida è quello di descrivere una procedura che permetta di installare Slackware 14.0 su un computer con OS Windows 7 installato su partizioni GPT e UEFI Boot.

In rete si trovano altre guide di questo tipo, ma la maggior parte richiede di ricreare l'immagine di boot del kernerl di installazione usando una versione diversa dalla 3.2.29 di default; cosa che presume l'accesso ad un'altro computer con GNU/Linux. Qui invece vedremo come ovviare alle mancanze del kernerl di default ed ottenere comunque un sistema avviabile.

Disclaimer

Questo articolo è basato sulla mia esperienza personale e non è detto che funzioni in tutti i casi; se non sapete cosa vogliano dire le parole MBR, UEFI, Bootloader e/o non conoscete la procedura per compilare un kernel personalizzato, vi invito a leggere le relative documentazioni prima di seguire questa guida.

Inoltre, vi consiglio di fare un backup dei dati personali (e di creare i DVD di ripristino di Windows7) prima di fare una qualunque delle operazioni qui riportate: la perdita di tali dati non è da escludere.
Questa guida coprirà solo la procedura per Slackware64, in quanto tutti i sistemi UEFI sono ormai equipaggiati con processori con architettura a 64bit.

Preparare gli strumenti

Cosa serve:

  • L'immagine .iso del DVD di installazione di Slackware 14.0 o una copia locale del relativo albero del repository;
  • I sorgenti di una versione del Kernel Linux superiore alla 3.3;
  • Un pendrive USB di dimensioni adeguate a contenere la directory Slackware64 del DVD di installazione ed un'ulteriore partizione di 200MB;
  • eLILO;
  • rEFInd;
  • Un software capace di creare una tabella delle partizioni di tipo GPT sulla pendrive e di creare partizioni di tipo vfat (FAT32). (Io ho usato gparted da una live che avevo sottomano, ma va bene anche lo strumento "Gestione Disco" di Windows)

Preparare il supporto per l'installazione

Purtroppo, non è possibile installare Slackware direttamente dal DVD, perché finiremmo con l'ottenere un sistema non avviabile, ammesso che il nostro BIOS UEFI riconosca ed avvii l'immagine del kernerl d'installazione in legacy mode (MBR).

Cosa fare dunque?

Bisogna formattare una pendrive USB, usando un partition table di tipo GPT, creando due partizioni vfat: una di 200MB ed un'altra che occupa il restante spazio libero.

Nella prima partizione, che da qui in poi chiamerò sdb1 per comodità, creamo l'albero delle directory /EFI/BOOT/ che ci servirà per come "sede" per il nostro bootloader.

Una volta scaricato elilo-3.14-all.tar.gz estraiamo il contenuto dell'archivio e copiamo in /EFI/BOOT/ il file elilo-3.14-x86_64.efi col nome di BOOTX64.EFI.

Nella stessa directory creeremo il file elilo.conf :

 prompt
timeout=50
default=install

image=bzImage
  label=install
  initrd=initrd.img
  append="load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 SLACK_KERNEL=huge.s"

Inoltre, apriamo l'immagine del DVD di installazione

#mount -o loop slackware64-14.0.iso /mnt/cdrom

E copiamo in /EFI/BOOT/ i file:

/mnt/cdrom/kernels/huge.s/bzImage
/mnt/cdrom/isolinux/initrd.img

Per comodità, scarichiamo anche refind-bin-0.4.7.zip e copiamo il contenuto dell'archivio in /BOOT/.

Nella seconda partizione, sdb2, copiamo la directory

/mnt/cdrom/Slackware64

e l'archivio con i sorgenti del kernel.

Installazione

A questo punto abbiamo tutto quello che ci serve per installare Slackware, riavviamo quindi il computer con la pendrive inserita.

All'avvio dell'ambiente di installazione, facciamo il login come root e prepariamo le nostre partizioni usando gdisk o gfdisk.

Per i fini di questo esempio, supporremo che l'hdd sia così partizionato:

 Number  Size        Type        Name
   1     200.0 MiB   vfat        EFI system partition
   2     128.0 MiB   ?           Microsoft reserved part (Windows Bootloader)
   3     120.0 GiB   NTFS        Basic data partition (Windows System)
   4     2.0   GiB   Linux/Swap  swap
   5     80.0  GiB   Linux       /
   6     729.0 GiB   Linux       /home

Sono tutte partizioni principali: GPT permette di superare il limite di 4 partizioni imposto da MBR.

Procediamo quindi con l'installare il sistema normalmente in sda5, e montiamo, per motivi che saranno chiari più tardi, la partizione ESP sda1 in /boot/efi .

Saltiamo la configurazione di LILO in quanto non lo useremo e complicherebbe le cose.

Al termine della procedura di condigurazione, usciamo dal setup ma non riavviamo il computer: abbiamo ancora qualche passo per rendere avviabile la nostra installazione.

Post Installazione

Facciamo un chroot nel sistema appena installato

#chroot /mnt

e montiamo nuovamente la partizione della pendrive contenente elilo

  1. mount /dev/sdb1 /mnt/tmp

a questo punto, dobbiamo copiare il kernel appena installato in una sottodirectory della ESP assieme con il .efi di elilo ed un apposito file elilo .conf:

# mkdir /boot/efi.d/EFI/Linux/
# cp /boot/vmlinuz-huge-3.2.29 /boot/efi/EFI/Linux
# cp /mnt/tmp/EFI/BOOT/BOOTX64.EFI /boot/efi/EFI/Linux

Volendo, possiamo anche usare l'immagine generic e creando un apposito initrd.gz da copiare anch'esso nella directory precedente:

# cp /boot/vmlinuz-generic-3.2.29 /boot/efi/EFI/Linux
# cp /boot/initrd.gz /boot/efi/EFI/Linux

a questo punto non ci resta che creare un elilo.conf adeguato nella stessa directory. Le opzioni di configurazione di eLILO sono molto simili a quelle di LILO, quindi non dovrebbe essere difficile da gestire, in ogni caso, questo è un elilo.conf funzionante (il mio):

prompt
timeout=50
default=generic

image=vmlinuz-generic-3.2.29
  label=generic
  initrd=initrd.gz
  read-only
  root=/dev/sda5

image=vmlinug-huge-3.2.29
  label=huge
  read-only
  root=/dev/sda5

A questo punto avremmo finito. Non occorre lanciare altri comandi: elilo non deve essere aggiornato come lilo ad ogni modifica, basta copiare immagine del kernel e initrd nella direcotry, editare il file elilo.conf e riavviare.

Facile no?

Invece no: alcuni BIOS UEFI (come il mio) hanno dei bootloader a dir poco scadenti che rendono l'aggiunta manuale di nuove opzioni a dir poco difficile (io ancora non so come fare, e ci ho provato per un intero pomeriggio).

Per risolvere questo problema, possiamo usare l'ottimo rEFInd, il cui script di installazione crea automaticamente una nuova voce UEFI nel BIOS.

Quindi, andiamo dentro la directory /mnt/tmp/refind/ ed eseguiamo lo script

# ./install.sh

A questo punto, riavviando il sistema, ci ritroveremo davanti ad un menu grafico contenente almeno due opzioni: Windows e Linux (con tanto di icone).

rEFInd, infatti, ad ogni avvio effettua una scansione della ESP alla ricerca di file terminanti con l'estensione .efi e le presenta come opzioni di boot.

Tuttavia, possiamo fare di più ed evitare di passare da eLILO: dalla versione 3.3 in poi, il kernel Linux possiede la capacità di "autoavviarsi" una volta invocato da un bootmanager come rEFInd.

Possiamo quindi compilare i sorgenti che abbiamo scaricato in precedenza, direttamente in ambiente chroot o dopo il primo avvio, con l'accortezza di attivare l'opzione efi_stub

Processor Type and Features -> EFI Runtime Service Support -> EFI Stub Support
CONFIG_EFI_STUB=yes
CONFIG_CMDLINE_BOOL=yes
CONFIG_CMDLINE=yes

Una volta compilato il kernel, create una sottodirectory apposita nell'ESP, ad esempio:

# mkdir /boot/efi/EFI/Slackware

e copiateci dentro l'immagine del kernel con eventuali initrd:

# cp arch/x86_64/boot/bzImage /boot/efi/EFI/Slackware/vmlinuz-$VERSION.efi
# cp /boot/initrd.gz /boot/efi/EFI/Slackware/initrd-$VERSION.gz
Importante da sapere è che, nel caso si voglia creare un initrd, occorre includervi il modulo vfat, o il bootloader del kernel non sarà in grado di leggere l'immaggine nell'ESP.
rEFInd scansiona la ESP alla ricerca di files che corrispondano al pattern *.efi e, se uno di questi files contiene anche "vmlinuz" allora cerca l'initrd con una parte $VERSION corrispondente. Tutto in automatico.

Ancora una volta, per aggiungere altre opzioni al boot, basta copiare immagini del kernel e initrd con i criteri sopra riportati nella stessa subdirectory dell'ESP o in una nuova: rEFInd la troverà automaticamente.

Se vogliamo passare dei parametri aggiuntivi al kernel (quelli che di solito mettevamo della riga append= di lilo.conf), ci basterà creare un file linux.conf nella stessa directory in cui si trova la relativa immagine vmlinuz.efi e queste verranno rilevate dall'efi_stub in fase di avvio.

linux.conf deve essere composto da una sola riga con le varie opzioni separate da spazi.

Spero che questa guida vi sia stata utile.

Fonti Esterne

Rodsbooks eLILO

Rodsbooks rEFInd

SlackDocs: Installing on UEFI hardware

Strumenti personali
Namespace

Varianti