Comment créer une image ISO amorçable EFI d'une version personnalisée d'Ubuntu?


16

J'ai créé une propre distribution Ubuntu que je veux démarrer (à partir d'un USB) sur mon MAC.

Lors de l'utilisation de la norme 64bit-Ubuntu-iso du site Web Ubuntu, il démarre. Cependant, lorsque vous faites exactement la même chose avec le fichier iso contenant ma propre distribution, cela ne fonctionne pas et il semble ne prendre en charge que le démarrage hérité. Cependant, le système d'exploitation a le dossier / sys / firmware / efi, donc je sais qu'il prend en charge EFI. J'ai fait l'iso en utilisant Relinux.

J'ai regardé les différences entre les deux fichiers ISO et j'ai vu que l'ubuntu standard avait un dossier EFI / BOOT contenant grubx64.efi et BOOTx64.EFI, et avait également un dossier de démarrage qui n'existe pas dans l'autre. J'ai essayé de copier ces deux répertoires, l'EFI et le dossier de démarrage dans mon autre USB, mais cela ne fonctionne pas.

Ma question est:

  • Comment puis-je obtenir ces deux dossiers dans mon fichier iso actuel?
  • Et comment puis-je faire un iso de ma distribution pour qu'elle prenne en charge le démarrage EFI?

Réponses:


18

Vous devez créer un catalogue ISO de démarrage double afin qu'il démarre EFI et MBR. Le fichier ISO Ubuntu 14.04 x64 standard fonctionne de cette façon, mais il n'y a pas d'instructions disponibles pour créer une nouvelle ISO 14.04 amorçable pour les systèmes EFI. J'ai pu rassembler les bonnes étapes pour créer un ISO comme celui-ci.

Ces instructions vous permettront de créer une image ISO de serveur Ubuntu 14.04 personnalisée pouvant démarrer EFI et MBR. Lorsque EFI démarre sur un système avec un disque vierge et non initialisé (par exemple sur une nouvelle machine virtuelle de génération 2 dans Hyper-V), la configuration démarre automatiquement, puis essuie automatiquement le disque et installe les packages de base ubuntu-server et OpenSSH. Ceci est conçu pour provisionner automatiquement de nouveaux systèmes avec Ubuntu 14.04 en utilisant LVM et le partitionnement automatique. Si vous utilisez cette image ISO sur un système Linux existant, le programme d'installation s'arrêtera lorsqu'il détectera les disques existants et attendra l'entrée. Si vous utilisez cette image ISO sur un système non EFI (par exemple une machine virtuelle Hyper-V de génération 1), elle attendra à l'écran de démarrage du programme d'installation graphique et nécessitera une entrée avant de passer à l'installateur automatique.

Le résultat est une installation de base du serveur Ubuntu avec ubuntu-server et openssh-server uniquement.

Voici les étapes pour créer un ISO amorçable EFI:

Obtenez l'ISO 14.04:

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

Montez-le et extrayez son contenu dans un nouveau dossier:

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

Changez dans le répertoire où nous allons faire notre travail:

cd ~/ubuntu

Réglez la langue sur l'anglais:

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

Créez un fichier préconfiguré qui utilisera LVM pour partitionner automatiquement le disque en utilisant tout l'espace disponible:

sudo nano ~/ubuntu/ks.preseed

Remplacez le contenu du fichier par ceci:

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

Créez un fichier kickstart qui configurera Ubuntu lors de l'installation: (assurez-vous de changer la partie du nom d'utilisateur et vous devez utiliser des mots de passe chiffrés)

sudo nano ~/ubuntu/ks.cfg

Remplacez le contenu du fichier par ceci:

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

Modifiez le fichier de configuration grub de sorte que lorsque l'ISO effectue un démarrage EFI, le chargeur de démarrage utilise les bonnes options pour utiliser nos fichiers de préconfiguration et de configuration:

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

Remplacez le contenu du fichier par ceci:

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
}

Modifiez le menu de démarrage isolinux pour un démarrage non EFI (démarrage MBR) afin d'utiliser la configuration personnalisée et la préconfiguration personnalisée:

sudo nano ~/ubuntu/isolinux/txt.cfg

Remplacez le contenu du fichier par ceci:

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

Créez l'ISO:

Cette commande est une version modifiée de la commande affichée sur http://petersmithphotog.no-ip.biz/wiki/index.php/Unattended_Install . Ces instructions ne fonctionnent pas pour Ubuntu 14.04 car elles pointent vers les mauvais emplacements pour le fichier efi.img. (devrait être dans ./boot/grub/ sur l'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 .

Vérifiez que l'ISO a les catalogues de démarrage de style correct:

L'ISO d'origine que vous avez téléchargée depuis Ubuntu:

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

Production:

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 nouvelle ISO que vous avez créée:

dumpet -i ~/Custom1404.iso 

Production:

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)

Vous pouvez comparer cette sortie à la sortie que vous obtenez à partir d'une image ISO construite à l'aide des instructions de Comment créer une installation d'Ubuntu sans assistance? : (ils créent une ISO de MBR uniquement, pas une ISO de catalogue de démarrage double)

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 .

Obtenez des informations ISO:

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

Production:

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
Il fait plus que créer une image ISO de démarrage EFI. En supprimant les options kickstart et preseed de ces instructions, vous pouvez créer une ISO Ubuntu 14.04 standard. Les changements spécifiques ont été notés dans la réponse.
anothermh

1
Ensuite, je vous demande de ne garder que les sections pertinentes ici, car vous avez déjà une réponse à la question d'installation sans assistance avec tout le reste.
muru

2
OUI! Je cherchais de loin pour trouver un moyen de créer une image ISO de démarrage EFI à partir d'un dossier personnalisé .. heureux de tout mettre ici en un seul endroit!
Alex R

1
Cela fonctionne très bien dans une machine virtuelle, mais je ne peux pas démarrer cela lorsqu'il est copié sur un lecteur USB comme il le fait avec l'image Ubuntu vanille.
HarlemSquirrel

2
@HarlemSquirrel, Pour installer à partir d'une clé USB, il vous suffit d'une étape de plus pour convertir l'ISO en un format amorçable sur une clé USB:# isohybrid path/to/image.iso
jjnebeker

1

Clé USB compatible UEFI

Si vous souhaitez une installation à partir d'un support USB, vous n'avez pas besoin de créer d'abord une image ISO personnalisée.

La création de médias USB live de démarrage uniquement UEFI est assez simple. Copiez simplement les fichiers sur votre clé USB au format FAT32 . C'est ça! Il sera détecté en tant que support de démarrage UEFI valide.

Vous pouvez ensuite modifier les fichiers directement sur la clé USB.

Source et détails: comment créer un média USB live bootable uniquement UEFI?


0

Pour moi, le meilleur moyen est:

1) Créez une iso en direct systemback

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

2) ajoutez une partition uefi à l'iso de cette façon:

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) copiez l'iso sur le support (dans ce cas, ma clé USB dans / dev / sdb

pv /tmp/live.iso | dd of=/dev/sdb conv=notrunc,noerror
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.