Làm cách nào để tạo ISO khởi động EFI của phiên bản Ubuntu tùy chỉnh?


16

Tôi đã tạo một bản phân phối Ubuntu mà tôi muốn khởi động (từ USB) trên MAC của mình.

Khi sử dụng 64bit-Ubuntu-iso tiêu chuẩn từ trang web Ubuntu, nó khởi động. Tuy nhiên, khi thực hiện chính xác điều tương tự với tệp iso chứa phân phối của riêng tôi thì nó không hoạt động và dường như chỉ hỗ trợ khởi động kế thừa. Tuy nhiên, HĐH có thư mục / sys / firmware / efi, vì vậy tôi biết nó hỗ trợ EFI. Tôi đã tạo ra iso bằng Relinux.

Tôi đã xem xét sự khác biệt giữa hai tệp ISO và đã thấy rằng ubfox tiêu chuẩn có thư mục EFI / BOOT chứa grubx64.efi và BOOTx64.EFI, và cũng có một thư mục khởi động không tồn tại trong thư mục kia. Tôi đã cố gắng sao chép hai thư mục này, EFI và thư mục khởi động vào USB khác của tôi, nhưng không hoạt động.

Câu hỏi của tôi là:

  • Làm cách nào tôi có thể nhận hai thư mục này vào tệp iso hiện tại của mình?
  • Và làm cách nào tôi có thể tạo một iso phân phối của mình để nó hỗ trợ khởi động EFI?

Câu trả lời:


18

Bạn cần tạo một danh mục khởi động kép ISO để nó sẽ khởi động EFI và MBR. Tệp ISO Ubuntu 14.04 x64 tiêu chuẩn hoạt động theo cách này nhưng không có hướng dẫn nào để tạo ISO 14.04 có thể khởi động mới cho các hệ thống EFI. Tôi đã có thể ghép các bước đúng để tạo ra một ISO như thế này.

Các hướng dẫn này sẽ cho phép bạn tạo một Ubuntu 14.04 Server ISO tùy chỉnh có thể khởi động EFI và MBR. Khi EFI khởi động trên hệ thống với một đĩa trống, chưa được khởi tạo (ví dụ trên VM thế hệ 2 mới trong Hyper-V), thiết lập sẽ tự động bắt đầu, sau đó tự động xóa sạch đĩa và cài đặt các gói máy chủ ub Ubuntu cơ sở và OpenSSH. Điều này được thiết kế để tự động cung cấp các hệ thống mới với Ubuntu 14.04 bằng cách sử dụng LVM và phân vùng tự động. Nếu bạn sử dụng ISO này trên hệ thống Linux hiện có thì trình cài đặt sẽ dừng khi phát hiện các đĩa hiện có và chờ đầu vào. Nếu bạn sử dụng ISO này trên hệ thống không phải EFI (ví dụ: Máy ảo Hyper-V thế hệ 1) thì nó sẽ đợi ở màn hình khởi động trình cài đặt đồ họa và yêu cầu nhập trước khi tiếp tục trình cài đặt tự động.

Kết quả là một cài đặt Ubuntu Server cơ sở với máy chủ ubfox và máy chủ openssh.

Dưới đây là các bước để tạo ISO có thể khởi động EFI:

Nhận ISO 14.04:

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

Gắn kết và trích xuất nội dung của nó vào một thư mục mới:

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

Thay đổi vào thư mục nơi chúng tôi sẽ thực hiện công việc của mình:

cd ~/ubuntu

Đặt ngôn ngữ thành tiếng Anh:

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

Tạo một tệp preseed sẽ sử dụng LVM để tự động phân vùng đĩa bằng tất cả không gian có sẵn:

sudo nano ~/ubuntu/ks.preseed

Thay thế nội dung tập tin bằng cái này:

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

Tạo một tệp khởi động sẽ cấu hình Ubuntu trong khi cài đặt: (đảm bảo bạn thay đổi phần tên người dùng và bạn nên sử dụng mật khẩu được mã hóa)

sudo nano ~/ubuntu/ks.cfg

Thay thế nội dung tập tin bằng cái này:

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

Chỉnh sửa tệp cấu hình grub để khi ISO thực hiện khởi động EFI, bộ tải khởi động sử dụng các tùy chọn phù hợp để sử dụng các tệp cấu hình và định sẵn của chúng tôi:

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

Thay thế nội dung tập tin bằng cái này:

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
}

Chỉnh sửa menu khởi động isolinux để khởi động không phải EFI (khởi động MBR) để sử dụng cấu hình tùy chỉnh và tùy chỉnh preseed:

sudo nano ~/ubuntu/isolinux/txt.cfg

Thay thế nội dung tập tin bằng cái này:

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

Tạo ISO:

Lệnh này là một phiên bản sửa đổi của lệnh được hiển thị tại http://petermithph photo.no-ip.biz/wiki/index.php/Unattends_Install . Các hướng dẫn đó không hoạt động cho Ubuntu 14.04 vì chúng trỏ đến các vị trí sai cho tệp efi.img. (nên ở ./boot/grub/ trên 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 .

Xác minh ISO có danh mục khởi động đúng kiểu:

ISO gốc bạn đã tải xuống từ Ubuntu:

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

Đầu ra:

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 mới mà bạn đã tạo:

dumpet -i ~/Custom1404.iso 

Đầu ra:

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)

Bạn có thể so sánh đầu ra này với đầu ra bạn nhận được từ một ISO được xây dựng bằng cách sử dụng các hướng dẫn tại Làm cách nào để tôi tạo một bản cài đặt Ubuntu hoàn toàn không giám sát? : (họ tạo ISO chỉ MBR, không phải ISO danh mục khởi động kép)

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 .

Nhận thông tin ISO:

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

Đầu ra:

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
Nó làm được nhiều hơn là tạo ra một ISO có thể khởi động EFI. Bằng cách loại bỏ các tùy chọn khởi động và chèn sẵn khỏi các hướng dẫn này, bạn có thể tạo ra Ubuntu 14.04 ISO tiêu chuẩn. Những thay đổi cụ thể đã được ghi nhận trong câu trả lời.
Anothermh

1
Sau đó, tôi yêu cầu bạn chỉ giữ lại các phần có liên quan ở đây, vì bạn đã có câu trả lời cho câu hỏi cài đặt không giám sát với mọi thứ khác.
muru

2
ĐÚNG! Tôi đã tìm kiếm rất nhiều cách để tạo ra một ISO có thể khởi động EFI từ thư mục tùy chỉnh .. rất vui vì bạn đã đặt mọi thứ ở đây vào một nơi!
Alex R

1
Điều này hoạt động rất tốt trong một máy ảo nhưng tôi không thể khởi động nó khi được sao chép vào ổ USB giống như với hình ảnh Ubuntu vanilla.
HarlemSquirrel

2
@HarlemSquirrel, Để cài đặt từ thẻ nhớ USB, bạn chỉ cần thêm một bước nữa để chuyển đổi ISO sang định dạng khởi động ổ đĩa USB:# isohybrid path/to/image.iso
jjnebeker

1

Ổ đĩa USB kích hoạt UEFI

Nếu bạn muốn Cài đặt từ USB Medium, trước tiên bạn không cần tạo ISO tùy chỉnh.

Tạo phương tiện truyền thông trực tiếp USB chỉ UEFI khởi động khá dễ dàng. Chỉ cần sao chép các tệp vào ổ USB có định dạng FAT32 của bạn . Đó là nó! Nó sẽ được phát hiện dưới dạng phương tiện khởi động UEFI hợp lệ.

Sau đó, bạn có thể sửa đổi các tệp trực tiếp trên Ổ đĩa USB.

Nguồn và chi tiết: Làm cách nào để tạo phương tiện trực tiếp USB có thể khởi động chỉ UEFI?


0

Đối với tôi cách tốt nhất là:

1) tạo iso liveback hệ thống

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

2) thêm phân vùng uefi vào iso theo cách này:

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) sao chép iso vào phương tiện (trong trường hợp này là Pendrive của tôi trong / dev / sdb

pv /tmp/live.iso | dd of=/dev/sdb conv=notrunc,noerror
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.