¿Cómo creo un ISO de arranque EFI de una versión personalizada de Ubuntu?

16

He creado una distribución propia de Ubuntu que quiero arrancar (desde un USB) en mi MAC.

Al usar el estándar 64bit-Ubuntu-iso del sitio web de Ubuntu, se inicia. Sin embargo, al hacer exactamente lo mismo con el archivo iso que contiene mi propia distribución, no funciona y parece que solo admite el arranque heredado. Sin embargo, el sistema operativo tiene la carpeta / sys / firmware / efi, por lo que sé que es compatible con EFI. Hice la iso usando Relinux.

He examinado las diferencias entre los dos archivos ISO y he visto que el ubuntu estándar tiene una carpeta EFI / BOOT que contiene grubx64.efi y BOOTx64.EFI, y también tiene una carpeta de arranque que no existe en el otro. He intentado copiar estos dos directorios, el EFI y la carpeta de arranque en mi otro USB, pero no funciona.

Mi pregunta es:

  • ¿Cómo puedo obtener estas dos carpetas en mi archivo iso actual?
  • ¿Y cómo puedo hacer un iso de mi distribución para que sea compatible con el arranque EFI?
Mujer Maravilla
fuente

Respuestas:

18

Necesita hacer un ISO de catálogo de arranque dual para que arranque EFI y MBR. El archivo ISO estándar Ubuntu 14.04 x64 funciona de esta manera, pero no hay instrucciones disponibles para hacer un nuevo ISO de arranque 14.04 para sistemas EFI. Pude armar los pasos correctos para crear un ISO como este.

Estas instrucciones le permitirán crear una ISO de servidor Ubuntu 14.04 personalizada que pueda arrancar EFI y MBR. Cuando se inicia EFI en un sistema con un disco en blanco no inicializado (por ejemplo, en una nueva VM de Generación 2 en Hyper-V), la configuración se iniciará automáticamente, luego borrará automáticamente el disco e instalará los paquetes básicos del servidor ubuntu y OpenSSH. Esto está diseñado para aprovisionar automáticamente nuevos sistemas con Ubuntu 14.04 usando LVM y particionamiento automático. Si usa esta ISO en un sistema Linux existente, el instalador se detendrá cuando detecte discos existentes y espere la entrada. Si utiliza esta ISO en un sistema que no sea EFI (por ejemplo, una VM Hyper-V de Generación 1), esperará en la pantalla de inicio del instalador gráfico y requerirá información antes de continuar con el instalador automático.

El resultado es una instalación básica de Ubuntu Server con ubuntu-server y openssh-server solamente.

Estos son los pasos para crear un ISO de arranque EFI:

Obtenga la ISO 14.04:

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

Móntelo y extraiga su contenido en una nueva carpeta:

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

Cambie al directorio donde haremos nuestro trabajo:

cd ~/ubuntu

Establece el idioma en inglés:

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

Cree un archivo preestablecido que usará LVM para particionar automáticamente el disco usando todo el espacio disponible:

sudo nano ~/ubuntu/ks.preseed

Reemplace el contenido del archivo con esto:

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

Cree un archivo kickstart que configurará Ubuntu durante la instalación: (asegúrese de cambiar la parte del nombre de usuario, y debe usar contraseñas cifradas)

sudo nano ~/ubuntu/ks.cfg

Reemplace el contenido del archivo con esto:

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

Edite el archivo de configuración de grub para que cuando el ISO realice un arranque EFI, el gestor de arranque use las opciones correctas para usar nuestros archivos de configuración y preselección:

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

Reemplace el contenido del archivo con esto:

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
}

Edite el menú de inicio de isolinux para el arranque no EFI (arranque MBR) para usar la configuración personalizada y la configuración personalizada:

sudo nano ~/ubuntu/isolinux/txt.cfg

Reemplace el contenido del archivo con esto:

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 el ISO:

Este comando es una versión modificada del comando que se muestra en http://petersmithphotog.no-ip.biz/wiki/index.php/Unattended_Install . Esas instrucciones no funcionan para Ubuntu 14.04 porque apuntan a las ubicaciones incorrectas para el archivo efi.img. (debe estar en ./boot/grub/ en la 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 .

Verifique que la ISO tenga los catálogos de arranque de estilo correctos:

El ISO original que descargaste de Ubuntu:

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

Salida:

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)

El nuevo ISO que creaste:

dumpet -i ~/Custom1404.iso 

Salida:

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)

Puede comparar esta salida con la salida que obtiene de un ISO construido utilizando las instrucciones de ¿Cómo creo una instalación completamente desatendida de Ubuntu? : (crean un ISO de MBR solo, no un catálogo de arranque dual ISO)

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 .

Obtenga información ISO:

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

Salida:

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)
otro
fuente
2
Hace más que crear un ISO de arranque EFI. Al eliminar el kickstart y las opciones predefinidas de estas instrucciones, puede crear una ISO estándar de Ubuntu 14.04. Los cambios específicos se han observado en la respuesta.
anothermh
1
Luego, le pido que conserve solo las secciones relevantes aquí, ya que ya tiene una respuesta sobre la pregunta de instalación desatendida con todo lo demás.
muru
2
¡SI! Estuve buscando por todas partes una forma de crear un ISO de arranque EFI desde una carpeta personalizada ... ¡me alegra que haya puesto todo aquí en un solo lugar!
Alex R
1
Esto funciona muy bien en una máquina virtual, pero no puedo arrancar esto cuando se copia en una unidad USB como lo hace con la imagen vainilla de Ubuntu.
HarlemSquirrel
2
@ HarlemSquirrel, para instalar desde una memoria USB, solo necesita un paso más para convertir el ISO a un formato de arranque de unidad USB:# isohybrid path/to/image.iso
jjnebeker
1

Unidad USB habilitada para UEFI

Si desea una instalación desde un medio USB, no necesita crear primero una ISO personalizada.

Crear un arranque UEFI solo para medios en vivo USB es bastante sencillo. Simplemente copie los archivos en su unidad USB con formato FAT32 . ¡Eso es! Se detectará como un medio de arranque UEFI válido.

Luego puede modificar los archivos directamente en la unidad USB.

Fuente y detalles: ¿Cómo crear medios en vivo USB de arranque solo UEFI?

Phi Phi
fuente
0

Para mí, la mejor manera es:

1) crear systemback live iso

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

2) agregue una partición uefi a la iso de esta manera:

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) copie la iso a los medios (en este caso, mi pendrive en / dev / sdb

pv /tmp/live.iso | dd of=/dev/sdb conv=notrunc,noerror
Zibri
fuente