web-dev-qa-db-fra.com

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

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

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

J'ai examiné les différences entre les deux fichiers ISO et constaté que l'ubuntu standard comporte un dossier EFI/BOOT contenant les fichiers grubx64.efi et BOOTx64.EFI, ainsi qu'un dossier de démarrage qui n'existe pas dans l'autre. J'ai essayé de copier ces deux répertoires, le répertoire EFI et le répertoire de démarrage dans mon autre clé 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 créer une iso de ma distribution pour qu'elle prenne en charge le démarrage EFI?
16
Superwoman

Vous devez créer un catalogue ISO à double démarrage pour qu'il puisse démarrer EFI et MBR. Le fichier ISO Ubuntu 14.04 x64 standard fonctionne de cette manière, mais il n’ya pas d’instructions permettant de créer un nouvel ISO 14.04 amorçable pour les systèmes EFI. J'ai pu rassembler les bonnes étapes pour créer une image ISO comme celle-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 non initialisé (par exemple, sur un nouveau Generation 2 VM dans Hyper-V), le programme d'installation démarre automatiquement, puis efface automatiquement le disque et installe le serveur de base Ubuntu. packages et OpenSSH. Ceci est conçu pour approvisionner automatiquement les nouveaux systèmes avec Ubuntu 14.04 à l'aide de LVM et du partitionnement automatique. Si vous utilisez cette image ISO sur un système Linux existant, le programme d'installation s'arrête lorsqu'il détecte des disques existants et attend 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 de l'installateur graphique et nécessitera une entrée avant de continuer avec l'installateur automatique.

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

Voici les étapes à suivre pour créer une image ISO amorçable EFI:

Obtenez le 14.04 ISO:

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

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

cd ~/ubuntu

Définissez la langue en anglais:

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

Créez un fichier de préconfiguration 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 utilisez 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

Editez le fichier de configuration grub afin que le chargeur d’amorçage utilise les bonnes options lors de l’amorçage EFI 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 et le preseed personnalisés:

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éer l'ISO:

Cette commande est une version modifiée de la commande indiquée sous http://petersmithphotog.no-ip.biz/wiki/index.php/Unattended_Install . Ces instructions ne fonctionnent pas pour Ubuntu 14.04 car elles indiquent le mauvais emplacement du 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 dispose des catalogues de démarrage de style appropriés:

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

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

Sortie:

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 

Sortie:

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 d'une image ISO construite à l'aide des instructions de Comment puis-je créer une installation d'Ubuntu sans surveillance? : (ils créent un ISO uniquement pour les MBR, et non un catalogue à double démarrage 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 .

Obtenir des informations ISO:

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

Sortie:

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)
18
anothermh

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.

Créer un support USB Live uniquement au démarrage d'UEFI est assez simple. Copiez simplement les fichiers sur votre clé USB formatée en FAT32. C'est ça! Il sera détecté comme un support de démarrage UEFI valide.

Ensuite, vous pouvez modifier les fichiers directement sur le lecteur USB.

Source et détails: Comment créer un média live USB amorçable avec UEFI uniquement?

1
phiphi

Pour moi le meilleur moyen est:

1) créer systemback live iso

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) copier l’iso sur le média (dans ce cas, ma clé USB dans/dev/sdb

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