Wie erstelle ich eine EFI-bootfähige ISO einer angepassten Ubuntu-Version?

16

Ich habe eine eigene Ubuntu-Distribution erstellt, die ich (von einem USB-Stick) auf meinem MAC booten möchte.

Wenn Sie das Standard 64bit-Ubuntu-iso von der Ubuntu-Website verwenden, bootet es. Wenn Sie jedoch genau das Gleiche mit der ISO-Datei tun, die meine eigene Distribution enthält, funktioniert sie nicht und unterstützt anscheinend nur den Start älterer Versionen. Das Betriebssystem hat jedoch den Ordner / sys / firmware / efi, daher weiß ich, dass er EFI unterstützt. Ich habe die ISO mit Relinux gemacht.

Ich habe mir die Unterschiede zwischen den beiden ISO-Dateien angesehen und festgestellt, dass das Standard-Ubuntu einen EFI / BOOT-Ordner mit grubx64.efi und BOOTx64.EFI sowie einen Boot-Ordner hat, der in dem anderen nicht vorhanden ist. Ich habe versucht, diese beiden Verzeichnisse, den EFI- und den Boot-Ordner, auf meinen anderen USB-Stick zu kopieren, aber es funktioniert nicht.

Meine Frage ist:

  • Wie kann ich diese beiden Ordner in meine aktuelle ISO-Datei aufnehmen?
  • Und wie kann ich eine ISO von meiner Distribution machen, so dass sie EFI-Boot unterstützt?
Wunderfrau
quelle

Antworten:

18

Sie müssen ein Dual-Boot-Katalog-ISO erstellen, damit EFI und MBR gebootet werden. Die standardmäßige Ubuntu 14.04 x64 ISO-Datei funktioniert auf diese Weise, es sind jedoch keine Anweisungen verfügbar, um eine neue bootfähige ISO 14.04 für EFI-Systeme zu erstellen. Ich konnte die richtigen Schritte zusammenstellen, um eine solche ISO zu erstellen.

Mit diesen Anweisungen können Sie ein benutzerdefiniertes Ubuntu 14.04-Server-ISO erstellen, das EFI und MBR booten kann. Wenn EFI auf einem System mit einer leeren, nicht initialisierten Festplatte gestartet wird (z. B. auf einer neuen Generation 2-VM in Hyper-V), wird das Setup automatisch gestartet. Anschließend wird die Festplatte automatisch gelöscht und die Ubuntu-Server-Basispakete und OpenSSH installiert. Dies ist für die automatische Bereitstellung neuer Systeme mit Ubuntu 14.04 unter Verwendung von LVM und automatischer Partitionierung vorgesehen. Wenn Sie diese ISO auf einem vorhandenen Linux-System verwenden, stoppt das Installationsprogramm, wenn vorhandene Festplatten erkannt werden, und wartet auf Eingaben. Wenn Sie diese ISO auf einem Nicht-EFI-System (z. B. einer Hyper-V-VM der 1. Generation) verwenden, wartet sie auf dem Startbildschirm des grafischen Installationsprogramms und erfordert Eingaben, bevor Sie mit der automatischen Installation fortfahren.

Das Ergebnis ist eine Ubuntu-Server-Basisinstallation mit Ubuntu-Server und OpenSh-Server.

So erstellen Sie ein EFI-bootfähiges ISO:

Holen Sie sich die 14.04 ISO:

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

Hängen Sie es ein und extrahieren Sie den Inhalt in einen neuen Ordner:

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

Wechseln Sie in das Verzeichnis, in dem wir arbeiten werden:

cd ~/ubuntu

Stellen Sie die Sprache auf Englisch ein:

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

Erstellen Sie eine Voreinstellungsdatei, die mithilfe von LVM die Festplatte automatisch unter Verwendung des gesamten verfügbaren Speicherplatzes partitioniert:

sudo nano ~/ubuntu/ks.preseed

Ersetzen Sie den Dateiinhalt durch Folgendes:

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

Erstellen Sie eine Kickstart-Datei, die Ubuntu während der Installation konfiguriert: (Stellen Sie sicher, dass Sie den Benutzernamen ändern und verschlüsselte Passwörter verwenden)

sudo nano ~/ubuntu/ks.cfg

Ersetzen Sie den Dateiinhalt durch Folgendes:

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

Bearbeiten Sie die Grub-Konfigurationsdatei so, dass der Bootloader beim Ausführen eines EFI-Bootvorgangs die richtigen Optionen verwendet, um unsere Voreinstellungs- und Konfigurationsdateien zu verwenden:

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

Ersetzen Sie den Dateiinhalt durch Folgendes:

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
}

Bearbeiten Sie das Isolinux-Startmenü für Nicht-EFI-Startvorgänge (MBR-Startvorgänge), um die benutzerdefinierte Konfiguration und die benutzerdefinierte Voreinstellung zu verwenden:

sudo nano ~/ubuntu/isolinux/txt.cfg

Ersetzen Sie den Dateiinhalt durch Folgendes:

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

Erstellen Sie die ISO:

Dieser Befehl ist eine modifizierte Version des Befehls, der unter http://petersmithphotog.no-ip.biz/wiki/index.php/Unattended_Install angezeigt wird . Diese Anweisungen funktionieren nicht für Ubuntu 14.04, da sie auf die falschen Speicherorte für die Datei efi.img verweisen. (sollte in ./boot/grub/ auf der ISO sein)

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 .

Vergewissern Sie sich, dass die ISO die richtigen Startkataloge hat:

Das Original-ISO, das Sie von Ubuntu heruntergeladen haben:

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

Ausgabe:

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)

Die neue ISO, die Sie erstellt haben:

dumpet -i ~/Custom1404.iso 

Ausgabe:

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)

Sie können diese Ausgabe mit der Ausgabe vergleichen, die Sie von einer ISO-Datei erhalten, die anhand der Anweisungen unter Wie erstelle ich eine völlig unbeaufsichtigte Installation von Ubuntu? : (Sie erstellen nur ein MBR-ISO, kein Dual-Boot-Katalog-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 .

Holen Sie sich ISO-Informationen:

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

Ausgabe:

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
quelle
2
Es reicht nicht aus, ein bootfähiges EFI-ISO zu erstellen. Durch Entfernen der Kickstart- und Voreinstellungsoptionen aus diesen Anweisungen können Sie eine Ubuntu 14.04-Standard-ISO erstellen. Die spezifischen Änderungen wurden in der Antwort vermerkt.
Anothermh
1
Dann bitte ich Sie, hier nur die relevanten Abschnitte beizubehalten, da Sie auf die Frage zur unbeaufsichtigten Installation mit allem anderen bereits eine Antwort haben.
muru
2
JA! Ich habe weit und breit nach einer Möglichkeit gesucht, eine bootfähige EFI-ISO aus einem benutzerdefinierten Ordner zu erstellen. Ich bin froh, dass Sie alles hier an einem Ort abgelegt haben!
Alex R
1
Dies funktioniert in einer virtuellen Maschine sehr gut, aber ich kann dies nicht booten, wenn ich es auf ein USB-Laufwerk kopiere, wie es beim Vanilla Ubuntu-Image der Fall ist.
HarlemSquirrel
2
@HarlemSquirrel, Um von einem USB-Stick zu installieren, müssen Sie nur noch einen Schritt ausführen, um die ISO in ein bootfähiges USB-Laufwerk-Format zu konvertieren:# isohybrid path/to/image.iso
jjnebeker
1

UEFI-fähiges USB-Laufwerk

Wenn Sie eine Installation von einem USB-Medium wünschen, müssen Sie nicht zuerst ein benutzerdefiniertes ISO erstellen.

Das Erstellen von USB-Live-Medien, die nur über UEFI gebootet werden können, ist ganz einfach. Kopieren Sie einfach die Dateien auf Ihr FAT32-formatiertes USB-Laufwerk. Das ist es! Es wird als gültiges UEFI-Boot-Medium erkannt.

Dann können Sie die Dateien direkt auf dem USB-Stick ändern.

Quelle und Details: Wie erstelle ich ein bootfähiges UEFI-USB-Live-Medium?

phiphi
quelle
0

Für mich ist der beste Weg:

1) Systemback Live-ISO erstellen

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

2) füge der iso eine uefi partition hinzu:

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) kopiere die iso auf media (in diesem fall mein pendrive in / dev / sdb

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