Como crio um ISO inicializável por EFI de uma versão personalizada do Ubuntu?

16

Eu criei uma própria distribuição Ubuntu que quero inicializar (de um USB) no meu MAC.

Ao usar o 64bit-Ubuntu-iso padrão do site Ubuntu, ele é inicializado. No entanto, ao fazer exatamente a mesma coisa com o arquivo iso que contém minha própria distribuição, ele não funciona e parece suportar apenas a inicialização herdada. No entanto, o sistema operacional tem a pasta / sys / firmware / efi, então eu sei que ele suporta EFI. Eu fiz o iso usando o Relinux.

Eu observei as diferenças entre os dois arquivos ISO e vi que o ubuntu padrão tem uma pasta EFI / BOOT contendo grubx64.efi e BOOTx64.EFI e também uma pasta de inicialização que não existe no outro. Eu tentei copiar esses dois diretórios, a EFI e a pasta de inicialização no meu outro USB, mas não funciona.

Minha pergunta é:

  • Como posso colocar essas duas pastas no meu arquivo iso atual?
  • E como posso fazer uma iso da minha distribuição para suportar a inicialização EFI?
Mulher Maravilha
fonte

Respostas:

18

Você precisa criar um ISO de catálogo de inicialização dupla para inicializar o EFI e o MBR. O arquivo ISO Ubuntu 14.04 x64 padrão funciona dessa maneira, mas não há instruções disponíveis para criar um novo ISO inicializável 14.04 para sistemas EFI. Consegui reunir as etapas certas para criar uma ISO como esta.

Essas instruções permitem criar um ISO do servidor Ubuntu 14.04 personalizado que possa inicializar o EFI e o MBR. Ao inicializar o EFI em um sistema com um disco não inicializado em branco (por exemplo, em uma nova VM da geração 2 no Hyper-V), a instalação será iniciada automaticamente, limpe automaticamente o disco e instale os pacotes básicos do servidor ubuntu e o OpenSSH. Ele foi projetado para provisionar automaticamente novos sistemas com o Ubuntu 14.04 usando LVM e particionamento automático. Se você usar esse ISO em um sistema Linux existente, o instalador irá parar quando detectar os discos existentes e aguardar a entrada. Se você usar esse ISO em um sistema não EFI (por exemplo, uma VM Hyper-V de geração 1), ele aguardará na tela de inicialização do instalador gráfico e precisará de entrada antes de continuar com o instalador automático.

O resultado é uma instalação básica do Ubuntu Server com ubuntu-server e openssh-server apenas.

Aqui estão as etapas para criar um ISO inicializável por EFI:

Obtenha a ISO 14.04:

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

Monte-o e extraia seu conteúdo para uma nova pasta:

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

Mude para o diretório em que faremos nosso trabalho:

cd ~/ubuntu

Defina o idioma para inglês:

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

Crie um arquivo preseed que usará o LVM para particionar automaticamente o disco usando todo o espaço disponível:

sudo nano ~/ubuntu/ks.preseed

Substitua o conteúdo do arquivo por este:

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

Crie um arquivo kickstart que irá configurar o Ubuntu durante a instalação: (certifique-se de alterar a parte do nome de usuário e use senhas criptografadas)

sudo nano ~/ubuntu/ks.cfg

Substitua o conteúdo do arquivo por este:

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 o arquivo de configuração do grub para que, quando a ISO execute uma inicialização EFI, o carregador de inicialização use as opções corretas para usar nossos arquivos de configuração e pré-configuração:

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

Substitua o conteúdo do arquivo por este:

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 o menu de inicialização isolinux para inicialização não EFI (inicialização MBR) para usar a configuração personalizada e a preseed personalizada:

sudo nano ~/ubuntu/isolinux/txt.cfg

Substitua o conteúdo do arquivo por este:

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

Crie o ISO:

Este comando é uma versão modificada do comando mostrado em http://petersmithphotog.no-ip.biz/wiki/index.php/Unattended_Install . Essas instruções não funcionam no Ubuntu 14.04 porque apontam para os locais incorretos do arquivo efi.img. (deve estar em ./boot/grub/ na 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 se o ISO possui os catálogos de inicialização de estilo corretos:

O ISO original que você baixou do Ubuntu:

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

Resultado:

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)

O novo ISO que você criou:

dumpet -i ~/Custom1404.iso 

Resultado:

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)

Você pode comparar esta saída com a saída obtida de uma ISO construída usando as instruções em Como criar uma instalação completamente autônoma do Ubuntu? : (eles criam um ISO apenas para MBR, não um ISO de catálogo de inicialização dupla)

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 .

Obter informações ISO:

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

Resultado:

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)
anothermh
fonte
2
Ele faz mais do que criar um ISO inicializável EFI. Removendo as opções kickstart e preseed dessas instruções, você pode criar uma ISO padrão Ubuntu 14.04. As alterações específicas foram anotadas na resposta.
precisa
11
Solicito que você mantenha apenas as seções relevantes aqui, pois você já tem uma resposta sobre a questão da instalação autônoma com todo o resto.
muru
2
SIM! Eu tenho procurado em toda parte por uma maneira de criar um ISO inicializável EFI a partir de uma pasta personalizada ... feliz por você ter colocado tudo aqui em um só lugar!
Alex R
11
Isso funciona muito bem em uma máquina virtual, mas não consigo inicializá-lo quando copiado para uma unidade USB, como acontece com a imagem baunilha do Ubuntu.
HarlemSquirrel
2
@HarlemSquirrel, Para instalar a partir de um stick USB, você só precisa de mais um passo para converter o ISO para um formato de arranque drive USB:# isohybrid path/to/image.iso
jjnebeker
1

Unidade USB habilitada para UEFI

Se você deseja uma instalação a partir do USB Medium, não precisa primeiro criar um ISO personalizado.

A criação de mídia ao vivo USB inicializável apenas por UEFI é bastante simples. Basta copiar os arquivos para a sua unidade USB formatada em FAT32 . É isso aí! Ele será detectado como um meio de inicialização UEFI válido.

Em seguida, você pode modificar os arquivos diretamente na unidade USB.

Fonte e detalhes: Como criar uma mídia ao vivo USB inicializável somente UEFI?

phiphi
fonte
0

Para mim, a melhor maneira é:

1) criar systemback live iso

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

2) adicione uma partição uefi ao iso desta maneira:

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 o iso para a mídia (neste caso, meu pendrive em / dev / sdb

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