Come faccio a creare un ISO avviabile EFI di una versione personalizzata di Ubuntu?


16

Ho creato una propria distribuzione Ubuntu che voglio avviare (da una USB) sul mio MAC.

Quando si utilizza Ubuntu-iso standard a 64 bit dal sito Web di Ubuntu, si avvia. Tuttavia, quando fa esattamente la stessa cosa con il file iso contenente la mia distribuzione, non funziona e sembra supportare solo l'avvio legacy. Tuttavia, il sistema operativo ha la cartella / sys / firmware / efi, quindi so che supporta EFI. Ho realizzato l'iso usando Relinux.

Ho esaminato le differenze tra i due file ISO e ho visto che Ubuntu standard ha una cartella EFI / BOOT contenente grubx64.efi e BOOTx64.EFI e ha anche una cartella di avvio che non esiste nell'altra. Ho provato a copiare queste due directory, EFI e la cartella di avvio nell'altra mia USB, ma non funziona.

La mia domanda è:

  • Come posso ottenere queste due cartelle nel mio file ISO attuale?
  • E come posso creare un iso della mia distribuzione in modo che supporti l'avvio EFI?

Risposte:


18

È necessario creare un ISO di catalogo a doppio avvio in modo che avvii EFI e MBR. Il file ISO standard Ubuntu 14.04 x64 funziona in questo modo ma non sono disponibili istruzioni per creare un nuovo ISO avviabile 14.04 per i sistemi EFI. Sono stato in grado di mettere insieme i passi giusti per creare un ISO come questo.

Queste istruzioni ti permetteranno di creare un server ISO Ubuntu 14.04 personalizzato in grado di avviare EFI e MBR. Quando si avvia EFI su un sistema con un disco vuoto, non inizializzato (ad esempio su una nuova VM di seconda generazione in Hyper-V), l'installazione si avvia automaticamente, quindi cancella automaticamente il disco e installa i pacchetti ubuntu-server di base e OpenSSH. Questo è progettato per il provisioning automatico di nuovi sistemi con Ubuntu 14.04 utilizzando LVM e il partizionamento automatico. Se si utilizza questa ISO su un sistema Linux esistente, il programma di installazione si interromperà quando rileva i dischi esistenti e attende l'input. Se si utilizza questo ISO su un sistema non EFI (ad esempio una VM Hyper-V di prima generazione), attenderà alla schermata di avvio dell'installer grafico e richiederà input prima di continuare con l'installazione automatica.

Il risultato è un'installazione base di Ubuntu Server con ubuntu-server e openssh-server.

Ecco i passaggi per creare un ISO avviabile EFI:

Ottieni l'ISO 14.04:

wget http://releases.ubuntu.com/14.04/ubuntu-14.04-server-amd64.iso

Montalo ed estrai il suo contenuto in una nuova cartella:

sudo mkdir -p ~/iso
sudo mount -o loop ubuntu-14.04-server-amd64.iso.iso ~/iso
sudo mkdir ~/ubuntu
sudo cp -rT ~/iso ~/ubuntu

Passa alla directory in cui eseguiremo il nostro lavoro:

cd ~/ubuntu

Imposta la lingua sull'inglese:

sudo -i
echo en >/home/user/ubuntu/isolinux/lang
exit

Creare un file preconfigurato che utilizzerà LVM per partizionare automaticamente il disco usando tutto lo spazio disponibile:

sudo nano ~/ubuntu/ks.preseed

Sostituisci il contenuto del file con questo:

d-i partman-auto/method string lvm
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/confirm_write_new_label     boolean true
d-i partman/choose_partition            select  finish
d-i partman/confirm_nooverwrite         boolean true
d-i partman/confirm                     boolean true
d-i partman-auto/purge_lvm_from_device  boolean true
d-i partman-lvm/device_remove_lvm       boolean true
d-i partman-lvm/confirm                 boolean true
d-i partman-lvm/confirm_nooverwrite     boolean true
d-i partman-auto/init_automatically_partition       select      Guided - use entire disk and set up LVM
d-i partman/choose_partition                select      Finish partitioning and write changes to disk
d-i partman-auto-lvm/no_boot            boolean true
d-i partman-md/device_remove_md         boolean true
d-i partman-md/confirm                  boolean true
d-i partman-md/confirm_nooverwrite      boolean true

Crea un file kickstart che configurerà Ubuntu durante l'installazione: (assicurati di cambiare la parte del nome utente e dovresti usare password crittografate)

sudo nano ~/ubuntu/ks.cfg

Sostituisci il contenuto del file con questo:

lang en_US
langsupport en_US
keyboard us
mouse
timezone America/Los_Angeles
rootpw --disabled
user USERNAME --fullname "USERNAME" --password "PASSWORD"
reboot
text
install
cdrom
auth  --useshadow  --enablemd5 
network --bootproto=dhcp --device=eth0
firewall --disabled 
skipx
%packages
@ ubuntu-server
openssh-server

Modifica il file di configurazione di grub in modo che quando ISO esegue un avvio EFI il bootloader utilizza le giuste opzioni per utilizzare i nostri file preconfigurati e di configurazione:

sudo nano ~/ubuntu/boot/grub/grub.cfg

Sostituisci il contenuto del file con questo:

if loadfont /boot/grub/font.pf2 ; then
    set gfxmode=auto
    insmod efi_gop
    insmod efi_uga
    insmod gfxterm
    terminal_output gfxterm
fi

set menu_color_normal=white/light-blue
set menu_color_highlight=light-blue/light-gray
set timeout=10
set default=0

menuentry "Automatically Install Ubuntu Server with Custom Config" {
    set gfxpayload=keep
    linux   /install/vmlinuz  file=/cdrom/preseed/ubuntu-server.seed quiet ks=cdrom:/ks.cfg preseed/file=/cdrom/ks.preseed --
    initrd  /install/initrd.gz
}
menuentry "OEM install (for manufacturers)" {
    set gfxpayload=keep
    linux   /install/vmlinuz  file=/cdrom/preseed/ubuntu-server.seed quiet oem-config/enable=true --
    initrd  /install/initrd.gz
}
menuentry "Multiple server install with MAAS" {
    set gfxpayload=keep
    linux   /install/vmlinuz  modules=maas-enlist-udeb vga=788 initrd=/install/initrd.gz quiet --
    initrd  /install/initrd.gz
}
menuentry "Check disc for defects" {
    set gfxpayload=keep
    linux   /install/vmlinuz  MENU=/bin/cdrom-checker-menu quiet --
    initrd  /install/initrd.gz
}
menuentry "Rescue a broken system" {
    set gfxpayload=keep
    linux   /install/vmlinuz  rescue/enable=true --
    initrd  /install/initrd.gz
}

Modifica il menu di avvio di isolinux per l'avvio non EFI (avvio MBR) per utilizzare la configurazione personalizzata e le prese personalizzate:

sudo nano ~/ubuntu/isolinux/txt.cfg

Sostituisci il contenuto del file con questo:

default install
label install
  menu label ^Install Ubuntu Server with Custom Config
  kernel /install/vmlinuz
  append file=/cdrom/preseed/ubuntu-server.seed initrd=/install/initrd.gz ks=cdrom:/ks.cfg preseed/file=/cdrom/ks.preseed --
label cloud
  menu label ^Multiple server install with MAAS
  kernel /install/vmlinuz
  append   modules=maas-enlist-udeb vga=788 initrd=/install/initrd.gz quiet --
label check
  menu label ^Check disc for defects
  kernel /install/vmlinuz
  append   MENU=/bin/cdrom-checker-menu vga=788 initrd=/install/initrd.gz quiet --
label memtest
  menu label Test ^memory
  kernel /install/mt86plus
label hd
  menu label ^Boot from first hard disk
  localboot 0x80

Crea l'ISO:

Questo comando è una versione modificata del comando mostrato su http://petersmithphotog.no-ip.biz/wiki/index.php/Unattended_Install . Queste istruzioni non funzionano per Ubuntu 14.04 perché indicano percorsi errati per il file efi.img. (dovrebbe essere in ./boot/grub/ sull'ISO)

sudo mkisofs -U -A "Custom1404" -V "Custom1404" -volset "Custom1404" -J -joliet-long -r -v -T -o ../Custom1404.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot .

Verifica che l'ISO abbia i cataloghi di avvio dello stile corretto:

L'ISO originale che hai scaricato da Ubuntu:

dumpet -i ~/ubuntu-14.04-server-amd64.iso 

Produzione:

Validation Entry:
    Header Indicator: 0x01 (Validation Entry)
    PlatformId: 0x00 (80x86)
    ID: ""
    Checksum: 0x55aa
    Key bytes: 0x55aa
Boot Catalog Default Entry:
    Entry is bootable
    Boot Media emulation type: no emulation
    Media load segment: 0x0 (0000:7c00)
    System type: 0 (0x00)
    Load Sectors: 4 (0x0004)
    Load LBA: 8446 (0x000020fe)
Section Header Entry:
    Header Indicator: 0x91 (Final Section Header Entry)
    PlatformId: 0xef (EFI)
    Section Entries: 1
    ID: ""
Boot Catalog Section Entry:
    Entry is bootable
    Boot Media emulation type: no emulation
    Media load address: 0 (0x0000)
    System type: 0 (0x00)
    Load Sectors: 4672 (0x1240)
    Load LBA: 24754 (0x000060b2)

La nuova ISO che hai creato:

dumpet -i ~/Custom1404.iso 

Produzione:

Validation Entry:
    Header Indicator: 0x01 (Validation Entry)
    PlatformId: 0x00 (80x86)
    ID: ""
    Checksum: 0x55aa
    Key bytes: 0x55aa
Boot Catalog Default Entry:
    Entry is bootable
    Boot Media emulation type: no emulation
    Media load segment: 0x0 (0000:7c00)
    System type: 0 (0x00)
    Load Sectors: 4 (0x0004)
    Load LBA: 3100 (0x00000c1c)
Section Header Entry:
    Header Indicator: 0x91 (Final Section Header Entry)
    PlatformId: 0xef (EFI)
    Section Entries: 1
    ID: ""
Boot Catalog Section Entry:
    Entry is bootable
    Boot Media emulation type: no emulation
    Media load address: 0 (0x0000)
    System type: 0 (0x00)
    Load Sectors: 4672 (0x1240)
    Load LBA: 1932 (0x0000078c)

È possibile confrontare questo output con l'output ottenuto da un ISO costruito utilizzando le istruzioni in Come si crea un'installazione completamente automatica di Ubuntu? : (creano un ISO solo per MBR, non un ISO per catalogo a doppio avvio)

sudo mkisofs -D -r -V "non-efi-ubuntu" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../non-efi-ubuntu.iso .

Ottieni informazioni ISO:

dumpet -i ~/non-efi-ubuntu.iso 

Produzione:

Validation Entry:
    Header Indicator: 0x01 (Validation Entry)
    PlatformId: 0x00 (80x86)
    ID: ""
    Checksum: 0x55aa
    Key bytes: 0x55aa
Boot Catalog Default Entry:
    Entry is bootable
    Boot Media emulation type: no emulation
    Media load segment: 0x0 (0000:7c00)
    System type: 0 (0x00)
    Load Sectors: 4 (0x0004)
    Load LBA: 1925 (0x00000785)

2
Fa di più che creare un ISO avviabile EFI. Rimuovendo le opzioni kickstart e preconfigurate da queste istruzioni è possibile creare uno standard Ubuntu 14.04 ISO. Le modifiche specifiche sono state annotate nella risposta.
altro

1
Quindi ti chiedo di mantenere solo le sezioni pertinenti qui, poiché hai già una risposta sulla domanda di installazione automatica con tutto il resto.
muru,

2
SÌ! Ho cercato in lungo e in largo un modo per creare un ISO avviabile EFI dalla cartella personalizzata .. felice di aver messo tutto qui in un unico posto!
Alex R,

1
Funziona alla grande in una macchina virtuale ma non riesco ad avviarlo quando copiato su un'unità USB come fa con l'immagine Ubuntu vaniglia.
HarlemSquirrel,

2
@HarlemSquirrel, Per installare da una chiavetta USB, hai solo bisogno di un altro passo per convertire l'ISO in un formato di avvio dell'unità USB:# isohybrid path/to/image.iso
jjnebeker

1

Unità USB abilitata UEFI

Se si desidera un'installazione da un supporto USB, non è necessario creare prima un ISO personalizzato.

La creazione di supporti live USB solo per UEFI è piuttosto semplice. Basta copiare i file sull'unità USB formattata FAT32 . Questo è tutto! Verrà rilevato come supporto di avvio UEFI valido.

Quindi è possibile modificare i file direttamente sull'unità USB.

Fonte e dettagli: come creare supporti live USB di avvio solo UEFI?


0

Per me il modo migliore è:

1) crea systemback live iso

sudo apt-get install systemback
sudo apt-get install live-boot
sudo apt-get autoremove --purge casper

2) aggiungi una partizione uefi all'iso in questo modo:

cd /home
cat `ls -1 -t syst*.iso|head -1` efi.img >/tmp/live.iso
echo -e "n\np\n2\n\n\nt\n2\nef\nw\n"|fdisk /tmp/live.iso

3) copia l'iso sul supporto (in questo caso il mio pendrive in / dev / sdb

pv /tmp/live.iso | dd of=/dev/sdb conv=notrunc,noerror
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.