UEFI + BIOS avviabile live Debian allunga amd64 con persistenza


20

Tutte le informazioni che trovo attualmente su questo argomento sono insufficienti per i miei gusti. È obsoleto, fuorviante o addirittura sbagliato, sembra eccessivamente complicato o non copre questa domanda specifica.

obiettivi:

  • unità USB avviabile (sia UEFI che BIOS legacy supportati)
  • (basato su) live Debian 9 (tratto)
  • persistenza (per impostazione predefinita e per UEFI e BIOS legacy)
  • Tastiera tedesca per impostazione predefinita
  • adatto per la risoluzione di altri sistemi GNU / Linux

Motivi:

  • dover impostare il layout della tastiera ad ogni utilizzo è un vero mal di testa
  • cryptsetup ed efibootmgr mancano nelle immagini live di Debian predefinite
  • gnome-terminal ha questo fastidioso sfondo bianco per impostazione predefinita

Nessuna soluzione:

  • (ri) creazione di un'immagine live debian personalizzata (sembra noiosa, anche se non l'ho ancora provata)
  • unetbootin (chiede una password sconosciuta quando si avvia su debian stretch e penso che non supporti comunque UEFI)
  • qualche processo automatizzato straniero in cui non vedo cosa sta succedendo

Le immagini live e di installazione di Debian sono isoibride e possono essere comodamente scritte per bloccare i dispositivi usando dd. E funzionano da unità USB del genere, il che è molto bello! Tuttavia, non ci sarà persistenza e nessun modo di iniziare con un layout di tastiera non inglese per impostazione predefinita senza modificare il config di grub e isolinux, che è incluso nel filesystem ISO9660 di sola lettura dell'immagine ISO live. Quindi, anche dopo aver scritto l'ISO live su un'unità USB, questi parametri non possono ancora essere modificati.

Risposte:


30

Ecco un modo per creare un'unità USB live Debian con persistenza. Permetterà di installare i pacchetti mancanti che da quel momento in poi saranno disponibili su ogni avvio live usando la persistenza. Dato che ricreamo il contenuto del filesystem di immagine ISO live su un filesystem in grado di leggere e scrivere, possiamo modificare le configurazioni del bootloader per abilitare la persistenza e impostare il layout della tastiera all'avvio.

I passaggi qui descritti sono stati testati per lavorare su Debian stretch e buster per creare un'immagine live di Debian stretch.

Ci sono molti passaggi, ma sembra che questo metodo sia ancora abbastanza efficiente.

Dichiarazione di non responsabilità: si perderanno i dati sull'unità USB di destinazione e, se si confondono i comandi di seguito, potrebbero essere molto dispiaciuti in seguito. Non sono responsabile delle tue azioni.

Mi sento fortunato

Se ti senti particolarmente fortunato oggi, puoi provare uno script bash che automatizza il processo per te. Dagli il tuo percorso immagine ISO come primo parametro e il nome del dispositivo di blocco unità USB come secondo. Nota che questo script è follemente pericoloso e che non dovresti eseguirlo senza prima averlo letto e compreso.

TL; DR

Ottieni l'immagine ISO live di Debian, quindi procedi come segue:

umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

cp -ar /tmp/live-iso/* /tmp/usb-live

echo "/ union" > /tmp/usb-persistence/persistence.conf

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

Nel dettaglio e con qualche spiegazione

Dovrai eseguire la maggior parte dei seguenti comandi con privilegi elevati, cioè usando sudosulla maggior parte dei sistemi GNU / Linux.

Scarica

Scarica un'immagine ISO live di Debian con il window manager di tua scelta:

https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/

Faremo riferimento all'immagine ISO scaricata semplicemente come "live.iso".

Determinare l'unità di destinazione

Trova il dispositivo utilizzato dall'unità USB lsblk. Lo chiameremo così /dev/sdX.

Smonta

Smonta le partizioni esistenti sul tuo disco usando umount /dev/sdX*

Crea partizioni

Abbiamo bisogno di una partizione di avvio EFI per i PC UEFI per l'avvio dall'unità USB. Quindi abbiamo bisogno di una partizione sufficientemente grande per contenere il contenuto originale dell'immagine del filesystem ISO live. Quella partizione deve avere il legacy_bootflag impostato. Quindi aggiungiamo la partizione di persistenza, utilizzando tutto lo spazio rimanente dell'unità USB. Puoi farlo con qualsiasi strumento di partizionamento compatibile con GPT (attenzione alla legacy_bootbandiera). Ecco un esempio usando parted:

parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on

Ciò crea una tabella delle partizioni GPT e una tabella delle partizioni MBR protettiva.

Crea filesystem

Vogliamo FAT su EFI e partizione live e vogliamo ext4sulla partizione di persistenza e abbiamo bisogno dell'etichetta persistenceper il funzionamento della funzione di persistenza.

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

Montare le risorse

Dovremo montare l'ISO di origine e le partizioni di destinazione in punti di montaggio temporanei.

mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso

Installa il sistema live

Copia il contenuto del filesystem ISO live nella partizione LIVE.

cp -ar /tmp/live-iso/* /tmp/usb-live

persistence.conf

Preparare il filesystem di persistenza con il file di configurazione richiesto. La funzione di persistenza non funzionerà senza questo file.

echo "/ union" > /tmp/usb-persistence/persistence.conf

Grub per il supporto UEFI

Installa grub2 per il supporto all'avvio di UEFI (questo richiede il grub-efi-amd64-binpacchetto su Debian). Forziamo grub-installa non utilizzare l'avvio sicuro UEFI, che apparentemente non funziona con l' --removableopzione.

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

Syslinux per supporto BIOS legacy

Installa il gptmbr.binbootloader di syslinux sull'unità (scarica syslinux o installa il pacchetto syslinux-common). Quindi installare syslinux sulla partizione live.

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

Fixup Isolinux

Riutilizzare la configurazione isolinux dell'ISO live originale per lavorare con syslinux.

mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg

Parametri del kernel

Ora che abbiamo copiato i file di sistema live in un vero filesystem di lettura / scrittura, possiamo manipolare la configurazione di grub e syslinux.

Aggiungi il parametro del kernel di persistenza a menu.cfge grub.cfg. In entrambi i file, aggiungi la parola chiave persistencealla fine della rispettiva prima riga con boot=liveal suo interno.

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

Imposta il parametro del kernel del layout di tastiera. In entrambi i file, aggiungi le parole chiave alla fine della rispettiva prima riga con boot=liveal suo interno.

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

Grub splash

Correggi l'immagine splash di grub (opzionale; l'abbiamo spostata in un'altra directory).

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

Smontaggio e pulizia

umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso

Perché questo dovrebbe funzionare sia per UEFI che per BIOS

Quando si avvia in modalità UEFI, il PC eseguirà la scansione delle partizioni FAT definite nella tabella delle partizioni GPT. La prima partizione FAT porta il bootloader grub UEFI, che si trova perché si trova nel percorso specificato da UEFI per le unità rimovibili (lo --removableswitch ha grub-installfatto questo). Non è necessaria alcuna voce di avvio UEFI affinché funzioni, dobbiamo solo fare in modo che il PC tenti di avviarsi dall'unità USB. Quel grub è configurato per prenderlo da lì (carica grub.cfg, mostra il menu, ecc.).

Quando si avvia in modalità BIOS e si seleziona l'avvio dall'unità USB, il PC eseguirà il gptmbr.bincodice bootloader che abbiamo scritto sul MBR protettivo dell'unità USB. Quel bootloader cerca la partizione GPT contrassegnata con il legacy_bootflag e chainload syslinux da quella partizione. Quindi Syslinux prende il controllo (carica menu.cfg, mostra il menu, ecc.).

Persistenza criptata

Invece di usare semplicemente ext4 sulla partizione di persistenza, si potrebbe prima crittografare la partizione di persistenza con LUKS (usando cryptsetup), quindi formattarla con ext4 (usando l'etichetta appropriata). Tuttavia, come dice la documentazione , il sistema live deve includere il cryptsetuppacchetto. Altrimenti, la partizione crittografata non può essere decifrata dal sistema live. Questo significa che bisogna prima creare un ISO live personalizzato. Questo, tuttavia, non rientra nell'ambito di questa risposta.

Storia

In --no-uefi-secure-bootprecedenza l' opzione non faceva parte della chiamata a grub-install. Lo stick ha funzionato bene per me, ma questo si è fermato con Debian Buster, anche se l'avvio sicuro è ancora disabilitato sulla mia macchina.


1
Ho appena creato un account qui per ringraziarti di questo. Manuale eccellente. Piccolo suggerimento: sarebbe bello avere la partizione di persistenza crittografata.
Petr Havlicek,

1
@PetrHavlicek True. Penso che sia abbastanza facile da fare, ma ho trascorso il mio tempo libero dalla creazione di queste domande e risposte con altri problemi, quindi devo ancora rivedere questa idea (e grazie per il tuo apprezzamento :).
schlimmchen,

Funziona alla grande! Qualche spiegazione in più sarebbe carino, però. (sicuro che puoi cercare tutto nelle pagine man, ma ad esempio mktable, mentre lo stesso di mklable, non è realmente documentato come tale, ecc.)
mikuszefski,

È possibile avere solo un file sulla chiavetta USB formattata FAT, che contiene il volume di persistenza? Dovrebbe essere possibile montando il file in loop. Ma come dire a Debians initrd di prendere un file invece di una partizione?
ceving

Vedi debian-live.alioth.debian.org/live-manual/stable/manual/html/… per questo. In breve: creare un file di immagine (rado) nella radice di qualsiasi file system, denominare il file 'persistenza' e formattarlo, ad esempio, con ext4.
schlimmchen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.