Bagaimana cara membuat ISO EFI-bootable dari versi khusus Ubuntu?

16

Saya telah membuat distribusi Ubuntu sendiri yang ingin saya boot (dari USB) pada MAC saya.

Saat menggunakan 64bit-Ubuntu-iso standar dari situs web Ubuntu, ia melakukan booting. Namun, ketika melakukan hal yang sama persis dengan file iso yang berisi distribusi saya sendiri itu tidak berfungsi, dan tampaknya hanya mendukung boot warisan. Namun, OS memiliki folder / sys / firmware / efi, jadi saya tahu ini mendukung EFI. Saya membuat iso menggunakan Relinux.

Saya telah melihat perbedaan antara dua file ISO, dan telah melihat bahwa ubuntu standar memiliki folder EFI / BOOT yang mengandung grubx64.efi dan BOOTx64.EFI, dan juga memiliki folder boot yang tidak ada di yang lain. Saya telah mencoba menyalin dua direktori ini, EFI dan folder boot ke USB saya yang lain, tetapi tidak berhasil.

Pertanyaanku adalah:

  • Bagaimana saya bisa memasukkan kedua folder ini ke file iso saya saat ini?
  • Dan bagaimana saya bisa membuat iso distribusi saya sehingga mendukung boot EFI?
Wanita perkasa
sumber

Jawaban:

18

Anda perlu membuat katalog boot ganda ISO sehingga akan mem-boot EFI dan MBR. File ISO Ubuntu 14.04 x64 standar berfungsi dengan cara ini tetapi tidak ada instruksi yang tersedia untuk membuat ISO 14,04 bootable baru untuk sistem EFI. Saya bisa menyatukan langkah yang tepat untuk membuat ISO seperti ini.

Instruksi ini memungkinkan Anda membuat ISO 14 Ubuntu Server kustom yang dapat mem-boot EFI dan MBR. Ketika EFI melakukan booting pada sistem dengan disk kosong yang tidak diinisialisasi (misalnya pada VM Generasi 2 baru di Hyper-V), setup akan dimulai secara otomatis, kemudian secara otomatis menghapus disk dan menginstal paket dasar ubuntu-server dan OpenSSH. Ini dirancang untuk secara otomatis menyediakan sistem baru dengan Ubuntu 14.04 menggunakan LVM dan auto-partisi. Jika Anda menggunakan ISO ini pada sistem Linux yang ada maka installer akan berhenti ketika mendeteksi disk yang ada dan menunggu input. Jika Anda menggunakan ISO ini pada sistem non-EFI (misalnya Generasi 1 Hyper-V VM) maka ia akan menunggu di layar startup pemasang grafis dan memerlukan input sebelum melanjutkan ke pemasang otomatis.

Hasilnya adalah instalasi dasar Ubuntu Server dengan ubuntu-server dan openssh-server saja.

Berikut adalah langkah-langkah untuk membuat ISO EFI-bootable:

Dapatkan 14,04 ISO:

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

Pasang dan ekstrak isinya ke folder baru:

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

Ubah ke direktori tempat kami akan melakukan pekerjaan kami:

cd ~/ubuntu

Setel bahasa ke Bahasa Inggris:

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

Buat file preseed yang akan menggunakan LVM untuk mempartisi-otomatis disk menggunakan semua ruang yang tersedia:

sudo nano ~/ubuntu/ks.preseed

Ganti konten file dengan ini:

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

Buat file kickstart yang akan mengonfigurasi Ubuntu selama instalasi: (pastikan Anda mengubah bagian nama pengguna, dan Anda harus menggunakan kata sandi terenkripsi)

sudo nano ~/ubuntu/ks.cfg

Ganti konten file dengan ini:

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

Edit file konfigurasi grub sehingga ketika ISO melakukan boot EFI bootloader menggunakan opsi yang tepat untuk menggunakan file konfigurasi dan preseed kami:

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

Ganti konten file dengan ini:

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
}

Edit menu boot isolinux untuk booting non-EFI (boot MBR) untuk menggunakan konfigurasi khusus dan preseed kustom:

sudo nano ~/ubuntu/isolinux/txt.cfg

Ganti konten file dengan ini:

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

Buat ISO:

Perintah ini adalah versi modifikasi dari perintah yang ditampilkan di http://petersmithphotog.no-ip.biz/wiki/index.php/Unattended_Install . Instruksi-instruksi itu tidak berfungsi untuk Ubuntu 14.04 karena mereka menunjuk ke lokasi yang salah untuk file efi.img. (harus dalam ./boot/grub/ di 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 .

Pastikan ISO memiliki katalog boot gaya yang benar:

ISO asli yang Anda unduh dari Ubuntu:

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

Keluaran:

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)

ISO baru yang Anda buat:

dumpet -i ~/Custom1404.iso 

Keluaran:

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)

Anda dapat membandingkan output ini dengan output yang Anda dapatkan dari ISO yang dibuat menggunakan instruksi di Bagaimana cara membuat instalasi Ubuntu yang benar-benar tanpa pengawasan? : (mereka membuat ISO MBR saja, bukan ISO katalog booting ganda)

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 .

Dapatkan info ISO:

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

Keluaran:

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
sumber
2
Itu tidak lebih dari membuat ISO bootable EFI. Dengan menghapus kickstart dan opsi preseed dari instruksi ini Anda dapat membuat standar Ubuntu 14.04 ISO. Perubahan spesifik telah dicatat dalam jawaban.
anothermh
1
Maka saya meminta Anda untuk hanya menyimpan bagian yang relevan di sini, karena Anda sudah memiliki jawaban atas pertanyaan instalasi tanpa pengawasan dengan yang lainnya.
muru
2
IYA! Saya telah mencari jauh-jauh cara untuk membuat ISO EFI bootable dari folder khusus .. senang Anda meletakkan semuanya di satu tempat!
Alex R
1
Ini berfungsi dengan baik di mesin virtual tetapi saya tidak bisa mem-boot ini ketika disalin ke drive USB seperti halnya dengan gambar vanilla Ubuntu.
HarlemSquirrel
2
@ HarlemSquirrel, Untuk menginstal dari stik USB, Anda hanya perlu satu langkah lagi untuk mengubah ISO ke format bootable USB drive:# isohybrid path/to/image.iso
jjnebeker
1

Drive USB yang diaktifkan UEFI

Jika Anda menginginkan Instalasi dari USB Medium, Anda tidak perlu membuat ISO yang disesuaikan terlebih dahulu.

Membuat media langsung USB booting UEFI cukup mudah. Cukup salin file ke drive USB berformat FAT32 Anda . Itu dia! Ini akan dideteksi sebagai Media Boot UEFI yang valid.

Kemudian Anda dapat memodifikasi file secara langsung di Drive USB.

Sumber dan Detail: Bagaimana cara membuat media langsung USB yang bisa di-booting UEFI?

phiphi
sumber
0

Bagi saya cara terbaik adalah:

1) buat systemback live iso

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

2) tambahkan partisi uefi ke iso dengan cara ini:

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) salin iso ke media (dalam hal ini pendrive saya di / dev / sdb

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