Jak utworzyć rozruchowy EFI ISO dostosowanej wersji Ubuntu?

16

Stworzyłem własną dystrybucję Ubuntu, którą chcę uruchomić (z USB) na moim MAC.

Podczas korzystania ze standardowego 64-bitowego systemu Ubuntu-iso ze strony internetowej Ubuntu uruchamia się. Jednak, gdy robię dokładnie to samo z plikiem ISO zawierającym moją własną dystrybucję, nie działa i wydaje się, że obsługuje tylko starsze uruchamianie. Jednak system operacyjny ma folder / sys / firmware / efi, więc wiem, że obsługuje EFI. Zrobiłem iso za pomocą Relinux.

Przyjrzałem się różnicom między dwoma plikami ISO i zauważyłem, że standardowe Ubuntu ma folder EFI / BOOT zawierający grubx64.efi i BOOTx64.EFI, a także folder rozruchowy, który nie istnieje w drugim. Próbowałem skopiować te dwa katalogi, EFI i folder rozruchowy na inne urządzenie USB, ale nie działa.

Moje pytanie brzmi:

  • Jak mogę przenieść te dwa foldery do mojego bieżącego pliku ISO?
  • Jak mogę utworzyć plik ISO mojej dystrybucji, aby obsługiwał rozruch EFI?
Cudowna kobieta
źródło

Odpowiedzi:

18

Musisz utworzyć katalog podwójnego rozruchu ISO, aby uruchomił EFI i MBR. Standardowy plik ISO Ubuntu 14.04 x64 działa w ten sposób, ale nie ma instrukcji, aby utworzyć nowy rozruchowy ISO 14.04 dla systemów EFI. Udało mi się zebrać odpowiednie kroki, aby stworzyć taki ISO.

Te instrukcje pozwolą ci stworzyć niestandardowy serwer Ubuntu 14.04 ISO, który może uruchomić EFI i MBR. Podczas uruchamiania EFI w systemie z pustym, niezainicjowanym dyskiem (na przykład na nowej maszynie wirtualnej 2. generacji w Hyper-V), instalacja rozpocznie się automatycznie, a następnie automatycznie wyczyści dysk i zainstaluje podstawowe pakiety ubuntu-server i OpenSSH. Ma to na celu automatyczne udostępnianie nowych systemów Ubuntu 14.04 przy użyciu LVM i automatycznego dzielenia na partycje. Jeśli użyjesz tego ISO w istniejącym systemie Linux, instalator zatrzyma się, gdy wykryje istniejące dyski i zaczeka na dane wejściowe. Jeśli użyjesz tego ISO w systemie innym niż EFI (na przykład maszynę wirtualną Hyper-V generacji 1), będzie on czekał na ekranie startowym instalatora graficznego i będzie wymagał danych wejściowych przed kontynuowaniem instalacji automatycznej.

Wynikiem jest podstawowa instalacja serwera Ubuntu z serwerem ubuntu i tylko serwerem openssh.

Oto kroki, aby utworzyć rozruchowy EFI ISO:

Uzyskaj 14.04 ISO:

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

Zamontuj go i wypakuj jego zawartość do nowego folderu:

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

Przejdź do katalogu, w którym będziemy wykonywać naszą pracę:

cd ~/ubuntu

Ustaw język na angielski:

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

Utwórz wstępnie przygotowany plik, który będzie używał LVM do automatycznego dzielenia dysku na partycje z wykorzystaniem całej dostępnej przestrzeni:

sudo nano ~/ubuntu/ks.preseed

Zamień zawartość pliku na:

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

Utwórz plik kickstart, który skonfiguruje Ubuntu podczas instalacji: (upewnij się, że zmieniłeś część nazwy użytkownika i powinieneś używać szyfrowanych haseł)

sudo nano ~/ubuntu/ks.cfg

Zamień zawartość pliku na:

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

Zmodyfikuj plik konfiguracyjny grub, więc gdy ISO wykona rozruch EFI, bootloader używa właściwych opcji, aby użyć naszych plików ustawień wstępnych i konfiguracji:

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

Zamień zawartość pliku na:

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
}

Zmodyfikuj menu rozruchowe isolinux dla rozruchu bez EFI (rozruch MBR), aby użyć niestandardowej konfiguracji i niestandardowego ustawienia:

sudo nano ~/ubuntu/isolinux/txt.cfg

Zamień zawartość pliku na:

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

Utwórz ISO:

To polecenie jest zmodyfikowaną wersją polecenia pokazanego na stronie http://petersmithphotog.no-ip.biz/wiki/index.php/Unattended_Install . Te instrukcje nie działają dla Ubuntu 14.04, ponieważ wskazują niewłaściwe lokalizacje pliku efi.img. (powinien znajdować się w ./boot/grub/ w 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 .

Sprawdź, czy ISO ma prawidłowe katalogi rozruchowe w stylu:

Oryginalny ISO pobrany z Ubuntu:

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

Wynik:

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)

Nowy ISO, który utworzyłeś:

dumpet -i ~/Custom1404.iso 

Wynik:

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)

Możesz porównać te dane wyjściowe z danymi uzyskanymi z ISO skonstruowanego za pomocą instrukcji w Jak utworzyć całkowicie nienadzorowaną instalację Ubuntu? : (tworzą ISO tylko MBR, a nie ISO katalogu podwójnego rozruchu)

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 .

Uzyskaj informacje o ISO:

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

Wynik:

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
źródło
2
Robi więcej niż tworzenie rozruchowego ISO EFI. Usuwając opcje kickstart i preseed z tych instrukcji, możesz stworzyć standardowy Ubuntu 14.04 ISO. Konkretne zmiany zostały odnotowane w odpowiedzi.
anothermh
1
Następnie proszę o zachowanie tylko odpowiednich sekcji tutaj, ponieważ masz już odpowiedź na pytanie o instalację nienadzorowaną ze wszystkimi innymi.
muru
2
TAK! Szukałem daleko wokoło sposobu, aby utworzyć rozruchowy plik EFI ISO z niestandardowego folderu .. Cieszę się, że umieściłeś wszystko tutaj w jednym miejscu!
Alex R
1
Działa to świetnie na maszynie wirtualnej, ale nie mogę uruchomić tego po skopiowaniu na dysk USB, tak jak w przypadku waniliowego obrazu Ubuntu.
HarlemSquirrel
2
@HarlemSquirrel, Aby zainstalować z pamięci USB, wystarczy jeszcze jeden krok, aby przekonwertować ISO na format rozruchowy dysku USB:# isohybrid path/to/image.iso
jjnebeker
1

Dysk USB z obsługą UEFI

Jeśli chcesz zainstalować z nośnika USB, nie musisz najpierw tworzyć niestandardowego ISO.

Tworzenie nośników na żywo z nośnikiem USB tylko do UEFI jest dość proste. Po prostu skopiuj pliki na dysk USB w formacie FAT32 . Otóż ​​to! Zostanie wykryty jako prawidłowy nośnik rozruchowy UEFI.

Następnie możesz zmodyfikować pliki bezpośrednio na dysku USB.

Źródło i szczegóły: Jak utworzyć rozruchowy nośnik USB na żywo z UEFI?

phiphi
źródło
0

Dla mnie najlepszym sposobem jest:

1) Utwórz systemback Live ISO

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

2) dodaj partycję uefi do ISO w następujący sposób:

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) skopiuj ISO na media (w tym przypadku mój pendrive w / dev / sdb

pv /tmp/live.iso | dd of=/dev/sdb conv=notrunc,noerror
Zibri
źródło