Avviare una LIVE.iso da GRUB2 (UUID, LABEL).

Avviare una LIVE.iso da GRUB2 (UUID, LABEL).

1) Cose da sapere prima di procedere.
La seguente guida, spiega come e perché modificare il menù di GRUB2 della distribuzione di Linux che governa il menù del bootloader per consentire l’avvio di una LIVE.iso di Linux Ubuntu prendendo i parametri nei files contenuti nella LIVE.iso corrispondente, collocata in una cartella denominata /iso/ a sua volta collocata all’interno di una partizione del disco fisso oppure di una partizione di una memoria USB di cui sia noto il codice UUID del file-system o la corrispondente etichetta LABEL.

La procedura qui descritta, è stata verificata avviando la live Xubuntu 22.04 su un PC che aveva come S.O. principale Ubuntu MATE 22.04, ma -previo adattamento dei parametri che identificano univocamente la partizione e/o la cartella in cui è stata salvata la LIVE.iso- è utilizzabile anche per molte altre distribuzioni di Linux diverse da quella da me trattata in questo esempio. Alcune distribuzioni di Linux necessitano di parametri aggiuntivi, ovvero sono avviabili solo se “esplose”, quindi, se questa guida non dovesse funzionare, prima di darsi per vinti, si consiglia di fare una ricerca su internet per conoscere i parametri specifici della distribuzione che si vuole avviare dal grub-menù.
Ai fini dell’avvio della LIVE.iso, nome è un parametro generico, quindi possiamo modificarlo a piacimento, purché si modifichi di conseguenza il nome utilizzato nelle istruzioni.
Esistono vari metodi per indicare univocamente la partizione in cui abbiamo collocato la LIVE.iso che si desidera avviare; alcuni sono più univoci di altri.
Il codice UUID individua univocamente una partizione indipendentemente che sia nel disco fisso principale o in una memoria USB, e non può essere cambiato.
Anche l’etichetta LABEL individua univocamente una partizione indipendentemente che sia nel disco fisso principale o in una memoria USB, ma può essere facilmente modificata (anche involontariamente) dall’utente e/o in fase di formattazione, e può essere attribuita a memorie esterne differenti, causando ambiguità; tuttavia il risultato finale è facilmente predeterminabile dall’utente, che così può sfruttare la cosa a proprio vantaggio.
Il numero identificativo del disco e della partizione sono univoci finché l’hardware comprende ad una sola memoria di massa; nel caso un computer, all’avvio, sia dotato di più memorie di massa (anche USB), il numero identificativo del disco viene assegnato in ordine di riconoscimento, e il riconoscimento non sempre avviene nel medesimo ordine, quindi la medesima memoria di massa a volte è riconosciuta all’avvio come disco 0, altre volte è il disco 1; per questo motivo, si consiglia di non usare questo metodo su computer che utilizzano più di una memoria di massa.
Su alcuni computer, è possibile avviare una LIVE.iso contenuta in una memoria di massa USB solo se la stessa è connessa ad una porta USB connessa direttamente alla scheda madre.

2) Mettere nella cartella prescelta la LIVE.iso da avviare.
Per l’esempio, utilizzo la LIVE.iso di Xubuntu chiamata
xubuntu-22.04.3-desktop-amd64.iso
scaricata dal sito
https://www.ubuntu-it.org/download/derivate
e depositata nella cartella il cui percorso completo è [/mnt/Dati/iso/Ubuntu/]
avente punto di mount [/mnt/Dati]
Siccome i punti di mount dipendono dal Sistema Operativo attivo, in fase di avvio non c’è alcun punto di mount, di conseguenza:
all’avvio, il nome completo del percorso sarà [/iso/Ubuntu/xubuntu-22.04.3-desktop-amd64.iso]

3) Verifica percorso completo della LIVE.iso ed UUID della partizione contenente la LIVE.iso
Per prima cosa, è opportuno verificare punto di mount e UUID (o LABEL) relativi alla partizione in cui riteniamo di aver collocato la LIVE.iso, nonché il “percorso” che porta alla LIVE.iso stessa.
3A) Verifica percorso completo.
Per verificare velocemente punto di mount e cartella in cui si trova xubuntu-22.04.3-desktop-amd64.iso, occorre impartire il comando
find /percorso/completo -name xubuntu-22.04.3-desktop-amd64.iso # Verifica il percorso della LIVE.iso collocata nella cartella /percorso/completo

Se non ricordiamo il nome esatto della LIVE.iso, possiamo impartire il comando
find /percorso/completo -name *.iso # Fornisce il percorso di tutte le .iso collocate nella cartella /percorso/completo
e prendere in considerazione solo la riga di output che ci interessa.

Se non ricordiamo il percorso esatto, possiamo omettere le cartelle finali e/o usare asterisco [*]; per esempio:
find /mnt/D* -name xubuntu-22.04.3-desktop-amd64.iso # Fornisce il percorso della LIVE.iso collocata contenuta in una cartella il cui percorso completo comincia con [/mnt/D]
Ovviamente più il comando è dettagliato, più la ricerca è veloce.

3B) Conoscere partizione, UUID e/o LABEL corrispondenti al punto di mount
Conoscendo il punto di mount “/mnt/Dati”, possiamo individuare nome, UUID e LABEL della partizione impartendo il comando
lsblk -o PATH,UUID,LABEL,mountpoint |grep "/mnt/Dati" # Fornisce nome, UUID e LABEL della partizione corrispondente al punto di mount noto

3C) Analisi dell’output corrispondente
Nel mio caso specifico, l’output corrispondente è il seguente:
:~$ find /mnt/D* -name xubuntu-22.04.3-desktop-amd64.iso # Fornisce il percorso della LIVE.iso collocata contenuta in una cartella il cui percorso completo comincia con [/mnt/D]
/mnt/Dati/iso/Ubuntu/xubuntu-22.04.3-desktop-amd64.iso
:~$ lsblk -o PATH,UUID,LABEL,mountpoint |grep "/mnt/Dati" # Fornisce mome, UUID e LABEL della partizione corrispondente al punto di mount noto
/dev/sda12 1A4C4B77758AFF87 Dati /mnt/Dati
:~$

Ora abbiamo la conferma che la LIVE.iso xubuntu-22.04.3-desktop-amd64.iso si trova nella cartella
[/mnt/Dati/iso/Ubuntu] a cui corrisponde la partizione [/dev/sda12] avente UUID=[1A4C4B77758AFF87], LABEL=[Dati] e punto di mount=[/mnt/Dati]

Si noti che il percorso completo della LIVE.iso è suddiviso in tre parti: il punto di mount (in questo esempio: [/mnt/Dati]), la cartella (in questo esempio: [/iso/Ubuntu], ed il nome della LIVE.iso (in questo esempio: [xubuntu-22.04.3-desktop-amd64.iso] e che, ai fini del risultato che vogliamo ottenere, il nome completo del percorso sarà /cartella/nome.iso (in questo esempio: [/iso/Ubuntu/xubuntu-22.04.3-desktop-amd64.iso]).

4) Individuare i files di configurazione contenenti i parametri per avviare la LIVE.iso
A questo punto, apriamo il File-Manager, andiamo nella cartella in cui si trova xubuntu-22.04.3-desktop-amd64.iso.
Le istruzioni di cui ai punti 4A, 4B e 4C sono fra loro alternative.

4A1) Cercare tutti i files .cfg contenuti in qualunque .iso
Aprire un terminale nella cartella in cui si trova la .iso che ci interessa, creare la cartella iSo, usare la cartella iSo come punto di mount della .iso che ci interessa, ed elencare tutti i files .cfg contenuti nella cartella .iSo.
$ sudo mkdir iSo; sudo mount -o loop -t iso9660 xubuntu-22.04.3-desktop-amd64.iso iSo; find ./iSo/ -name *.cfg
[sudo] password di ubuntustudio22k04:
mkdir: impossibile creare la directory "iSo": File già esistente
mount: iSo: /mnt/Dati1/iso/Ubuntu/xubuntu-22.04.3-desktop-amd64.iso is already mounted.
./iSo/boot/grub/grub.cfg
./iSo/boot/grub/loopback.cfg

4A2) Visualizzare le istruzioni per configurare il montaggio di xubuntu-22.04.3-desktop-amd64.iso
Attenzione: a differenza dei comandi BASH della riga precedente, questi sono comandi specifici per .iso di Linux Ubuntu; per distribuzioni di Linux diverse, potrebbe essere necessario fornire all’istruzione grep un parametro diverso da Try.

$ A1="cat $(find ./iSo/ -name *.cfg)"; eval $A1|grep 'menuentry "Try' -A4
menuentry "Try or Install Xubuntu" {
        set gfxpayload=keep
        linux   /casper/vmlinuz file=/cdrom/preseed/xubuntu.seed maybe-ubiquity quiet splash --- 
        initrd  /casper/initrd
}
--
menuentry "Try or Install Xubuntu" {
        set gfxpayload=keep
        linux   /casper/vmlinuz file=/cdrom/preseed/xubuntu.seed maybe-ubiquity quiet splash iso-scan/filename=${iso_path} --- 
        initrd  /casper/initrd
}

4A3) Smontare la cartella iSo e rimuovere il punto di mount iSo
sudo umount iSo; sudo rm -r iSo

4A4) Riunire le 3 righe di comandi BASH suddette in un’unica riga
Volendo riunire le 3 righe di comandi BASH suddette in un’unica riga, in questo caso specifico l’unica riga di comandi BASH conterrà quanto segue:
sudo mkdir iSo; sudo mount -o loop -t iso9660 xubuntu-22.04.3-desktop-amd64.iso iSo; A1="cat $(find ./iSo/ -name *.cfg)"; eval $A1|grep 'menuentry "Try' -A4; sudo umount iSo; sudo rm -r iSo

Infatti

$ sudo mkdir iSo; sudo mount -o loop -t iso9660 xubuntu-22.04.3-desktop-amd64.iso iSo; A1="cat $(find ./iSo/ -name *.cfg)"; eval $A1|grep 'menuentry "Try' -A4; sudo umount iSo; sudo rm -r iSo
[sudo] password di ubuntustudio22k04:
mount: /mnt/Dati1/iso/Ubuntu/iSo: WARNING: source write-protected, mounted read-only.
menuentry "Try or Install Xubuntu" {
        set gfxpayload=keep
        linux   /casper/vmlinuz file=/cdrom/preseed/xubuntu.seed maybe-ubiquity quiet splash ---
        initrd  /casper/initrd
}
--
menuentry "Try or Install Xubuntu" {
        set gfxpayload=keep
        linux   /casper/vmlinuz file=/cdrom/preseed/xubuntu.seed maybe-ubiquity quiet splash iso-scan/filename=${iso_path} ---
        initrd  /casper/initrd
}
$

4B1) Aprire un terminale nella cartella in cui si trova la .iso che ci interessa, creiamo la cartella iSo, usiamo la cartella iSo come punto di mount di della .iso che ci interessa, e cerchiamo tutti i files .cfg contenuti nella cartella .iSo, dopo di che smontiamo la cartella iSo e rimuoviamo il punto di mount iSo. Per fare tutto questo, è sufficiente aprire un terminale nella cartella in cui si trova la .iso che ci interessa ed impartire il comando:
sudo mkdir iSo; sudo mount -o loop -t iso9660 nomeiso.iso iSo; find ./iSo/ -name *.cfg; grep ./iSo --include=\*.{txt,cfg} -rnw -e 'menuentry "Try' -A 4; sudo umount iSo; sudo rm -r iSo
#
che, in questo caso specifico, diventa:
#
sudo mkdir iSo; sudo mount -o loop -t iso9660 xubuntu-22.04.3-desktop-amd64.iso iSo; find ./iSo/ -name *.cfg; grep ./iSo --include=\*.{txt,cfg} -rnw -e 'menuentry "Try' -A 4; sudo umount iSo; sudo rm -r iSo
[sudo] password di ubuntustudio22k04:
mount: /mnt/Dati1/iso/Ubuntu/iSo: WARNING: source write-protected, mounted read-only.
./iSo/boot/grub/grub.cfg
./iSo/boot/grub/loopback.cfg
./iSo/boot/grub/grub.cfg:8:menuentry "Try or Install Xubuntu" {
./iSo/boot/grub/grub.cfg-9- set gfxpayload=keep
./iSo/boot/grub/grub.cfg-10- linux /casper/vmlinuz file=/cdrom/preseed/xubuntu.seed maybe-ubiquity quiet splash ---
./iSo/boot/grub/grub.cfg-11- initrd /casper/initrd
./iSo/boot/grub/grub.cfg-12-}
--
./iSo/boot/grub/loopback.cfg:2:menuentry "Try or Install Xubuntu" {
./iSo/boot/grub/loopback.cfg-3- set gfxpayload=keep
./iSo/boot/grub/loopback.cfg-4- linux /casper/vmlinuz file=/cdrom/preseed/xubuntu.seed maybe-ubiquity quiet splash iso-scan/filename=${iso_path} ---
./iSo/boot/grub/loopback.cfg-5- initrd /casper/initrd
./iSo/boot/grub/loopback.cfg-6-}

4C1) Doppio click sulla xubuntu-22.04.3-desktop-amd64.iso per vederne il contenuto.
Ora cominciamo a navigare all’interno della .iso alla ricerca di informazioni utili al nostro scopo.
N.B.: Le operazioni descritte al punto 4A non sono alla portata dei File-manager di tutte le distribuzioni di Linux; in alcune, potrebbe essere necessario aprire la LIVE.iso usando il Gestore di Archivi.

4C2) (.iso)/boot/grub/loopback.cfg
La principale fonte di informazioni da ricercare è il file loopback.cfg contenuto nella cartella /boot/grub contenuto nella .iso di Xubuntu.

menuentry "Try or Install Xubuntu" {
	set gfxpayload=keep
	linux	/casper/vmlinuz file=/cdrom/preseed/xubuntu.seed maybe-ubiquity quiet splash iso-scan/filename=${iso_path} ---
	initrd	/casper/initrd
}

4C3) (.iso)/boot/grub/grub.cfg
Nella stessa cartella possiamo trovare il file grub.cfg.
Fra le varie istruzioni ivi contenute, a noi interessa il blocco di istruzioni

menuentry "Try or Install Xubuntu" {
	set gfxpayload=keep
	linux	/casper/vmlinuz file=/cdrom/preseed/xubuntu.seed maybe-ubiquity quiet splash ---
	initrd	/casper/initrd
}

4C4) (.iso)/isolinux/isolinux.config
Altre distribuzioni di Linux potrebbero avere analoghi blocchi di istruzioni in altri files di configurazione.

5) Inserimento istruzioni utili per avviare LIVE.iso
I blocchi di istruzioni descritti al punto 4, quando eseguiti, assolvono la funzione di avviare la corrispondente distribuzione di Linux, a condizione che la distribuzione di Linux non sia né “esplosa” in una sotto-cartella, né “compattata” in una .iso

5A) Indicare univocamente la partizione cui si trova la LIVE.iso
L’istruzione per indicare al computer la partizione in cui si trova la cartella in cui si trova la LIVE.iso, varia a seconda del metodo che si vuole utilizzare per individuare univocamente la partizione stessa.

5A1) Indicare, mediante UUID, la partizione cui si trova la LIVE.iso
Per indicare al computer il codice UUID della partizione in cui cercare (tralasciando eventuali floppy disk) la LIVE.iso, occorre usare l’istruzione:
search --no-floppy --set=root --fs-uuid 1A4C4B77758AFF87

5A2) Indicare, mediante LABEL, la partizione cui si trova la LIVE.iso
Per indicare al computer l’etichetta LABEL della partizione in cui cercare (tralasciando eventuali floppy disk) la LIVE.iso, occorre usare l’istruzione:
search --no-floppy --set=root --label Dati

5A3) Indicare, mediante numero di disco e numero di partizione (hd0,12), la partizione cui si trova la LIVE.iso
Per indicare al computer che la partizione in cui cercare la LIVE.iso è la dodicesima del primo disco fisso, occorre usare l’istruzione:
loopback loop (hd0,12)$isofile

5B) Indicare la LIVE.iso da avviare
Per indicare al computer quale file avviare, occorre fornire al bootloader il nome della LIVE.iso completo del percorso (senza punto di mount perché, all’avvio, il punto di mount non esiste)
5B1) Indicare la LIVE.iso da avviare mettendo il percorso completo nella variabile isofile
Per indicare al computer il nome completo della LIVE.iso e la cartella in cui si trova, occorre mettere nella variabile “isofile” il valore del nome della LIVE.iso completo del percorso all’avvio (quindi senza punto di mount)
quindi, nel caso in esame, occorre fornire le istruzioni:
set isofile="/iso/Ubuntu/xubuntu-22.04.3-desktop-amd64.iso"
loopback loop $isofile

5B2) Indicare la LIVE.iso da avviare senza usare variabili
Nel caso in cui si utilizzi una distribuzione di Linux che non consente l’impostazione di variabili in fase di avvio, occorre sostituire la variabile $isofile con il suo contenuto; la sostituzione deve essere effettuata in ogni riga di istruzione contenente la variabile da sostituire. Nel caso in esame, le istruzioni descritte al punto precedente diventano:
loopback loop "/iso/Ubuntu/xubuntu-22.04.3-desktop-amd64.iso"

5C) Integrare i rimanenti parametri
Per migliorare la fruibilità della LIVE.iso, si consiglia di integrare il blocco di istruzioni inserendo i parametri di configurazione della lingua e della tastiera o quant’altro si possa configurare. A seguito di una ricerca in rete, mi sento di consigliare di integrare la riga “linux” inserendo i parametri seguenti:
boot=casper iso-scan/filename=$isofile debian-installer/language=it keyboard-configuration/layoutcode?=it

5D) Adattare il contenuto di grub.cfg all’utilizzo da LIVE.iso
I parametri trovati al punto 5 sono relativi ad una .iso “esplosa” nella cartella principale, quindi devono essere adattati ad una .iso “inesplosa” (loop); avremo quindi:
linux (loop)/casper/vmlinuz file=(loop)/preseed/xubuntu.seed maybe-ubiquity quiet splash ---
initrd (loop)/casper/initrd

6) Avviare Xubuntu.iso salvata in cartella predefinita contenuta in partizione avente UUID “1A4C4B77758AFF87”
A conti fatti, il blocco di istruzioni contenente i parametri per avviare Xubuntu.iso salvata in cartella predefinita è il seguente:

menuentry "xubuntu-22.04.3-desktop-amd64 LIVE [Ita](--fs-uuid 1A4C4B77758AFF87)" {
      search --no-floppy --set=root --fs-uuid 1A4C4B77758AFF87
      set isofile="/iso/Ubuntu/xubuntu-22.04.3-desktop-amd64.iso"
      loopback loop $isofile
      linux (loop)/casper/vmlinuz file=(loop)/preseed/xubuntu.seed maybe-ubiquity quiet splash boot=casper iso-scan/filename=$isofile  ---  debian-installer/language=it keyboard-configuration/layoutcode?=it
      initrd (loop)/casper/initrd
}

7) Avviare Xubuntu.iso salvata in cartella predefinita contenuta in partizione avente etichetta “Dati”
A conti fatti, il blocco di istruzioni contenente i parametri per avviare Xubuntu.iso salvata in cartella predefinita è il seguente:

menuentry "xubuntu-22.04.3-desktop-amd64 LIVE [Ita](--label Dati)" {
      search --no-floppy --set=root --label Dati
      set isofile="/iso/Ubuntu/xubuntu-22.04.3-desktop-amd64.iso"
      loopback loop $isofile
      linux (loop)/casper/vmlinuz file=(loop)/preseed/xubuntu.seed maybe-ubiquity quiet splash boot=casper iso-scan/filename=$isofile  ---  debian-installer/language=it keyboard-configuration/layoutcode?=it
      initrd (loop)/casper/initrd
}

8) Avviare Xubuntu.iso salvata in cartella predefinita contenuta in partizione identificata come n_Disco,n_Partizione
A conti fatti, il blocco di istruzioni contenente i parametri per avviare Xubuntu.iso salvata in cartella predefinita è il seguente:

menuentry "xubuntu-22.04.3-desktop-amd64 LIVE [Ita](hd0,12)" {
      set isofile="/iso/Ubuntu/xubuntu-22.04.3-desktop-amd64.iso"
      loopback loop (hd0,12)$isofile
      linux (loop)/casper/vmlinuz file=(loop)/preseed/xubuntu.seed maybe-ubiquity quiet splash boot=casper iso-scan/filename=$isofile  ---  debian-installer/language=it keyboard-configuration/layoutcode?=it
      initrd (loop)/casper/initrd
}

9) Come rendere efficace ogni blocco di istruzioni di 7 righe che comincia con “menuentry” e terminano con “}” descritto ai punti 6, 7, ed 8.
A questo punto, apriamo, come SuperUtente, il file /etc/grub.d/40_custom, aggiungiamo in coda le righe spiegate ai punti 7 e/o 8 e/o 9, e salviamo il file 40_custom così modificato.

10) Incorporare nel menù di avvio la voce per avviare la LIVE.iso
10A) Se abbiamo a che fare con un PC che fa uso del Secure Boot o Boot UEFI che dir si voglia (quindi installa GRUB2 nell’apposita partizione /boot/efi del disco fisso),occorre aprire un terminale in modalità SuperUtente ed impartire i seguenti comandi:
grub-install # Installa il bootloader sotto UEFI
update-grub # Aggiorna il bootloader sotto UEFI
reboot # Spegne e riaccende il PC

10B) Se abbiamo a che fare con un PC che installa GRUB2 nel MBR del disco fisso (quindi non fa uso del Secure Boot o Boot UEFI che dir si voglia), occorre aprire un terminale in modalità SuperUtente ed impartire i seguenti comandi:
grub-install /dev/sda # Installa il BootLoader nell'MBR del disco fisso sda
update-grub2 # Aggiorna il menù del bootloader
reboot # Spegne e riaccende il PC

11) Verificare che la nuova voce del menù sia efficace
All’accensione del computer, selezionare la nuova voce e verificare che sia efficace.

12) Per installare la LIVE.iso di Linux così avviata
Se si desidera installare in una partizione del disco fisso la distribuzione avviata dal medesimo disco fisso, è possibile farlo senza doverla avviare da LIVE-USB nè doverla masterizzare su CD o DVD, a condizione che, prima di avviare l’installazione, si apra un terminale in modalità SuperUtente e si impartisca il comando:
rm /etc/mtab # Rimuove /etc/mtab

L’eliminazione del file mtab inganna l’installer consentendo di installare sullo stesso disco fisso in cui è la LIVE.iso.
Alla domanda se il sistema deve smontare la partizione dove risiede la LIVE.iso, cliccare su NO

Per vedere altri esempi di utilizzo del metodo qui descritto, si veda:
https://help.ubuntu.com/community/Grub2/ISOBoot/Examples

Avviare da GRUB2 una LIVE.iso in una partizione USB avente UUID noto
http://sargonsei.altervista.org/607-2/

Avviare una .iso di una distribuzione di Linux direttamente da GRUB2
http://sargonsei.altervista.org/avviare-una-iso-di-una-distribuzione-di-linux-direttamente-da-grub2/

UBUNTU > Amministrazione Sistema > GRUB
https://wiki.ubuntu-it.org/AmministrazioneSistema/Grub

UBUNTU > Amministrazione Sistema > GRUB > Aggiungere e/o Togliere Voci
https://wiki.ubuntu-it.org/AmministrazioneSistema/Grub/AggiungereTogliereVoci
e
UBUNTU > Amministrazione Sistema > GRUB Customizer
https://wiki.ubuntu-it.org/AmministrazioneSistema/GrubCustomizer