ฉันจะสร้าง ISO ที่สามารถบูตได้กับ EFI ของ Ubuntu รุ่นที่กำหนดเองได้อย่างไร


16

ฉันได้สร้างการกระจาย Ubuntu ของตัวเองที่ฉันต้องการบูต (จาก USB) บน MAC ของฉัน

เมื่อใช้มาตรฐาน 64 บิต-Ubuntu-iso จากเว็บไซต์ Ubuntu มันจะบู๊ต อย่างไรก็ตามเมื่อทำสิ่งเดียวกันกับไฟล์ iso ที่มีการแจกจ่ายของฉันเองมันไม่ทำงานและดูเหมือนจะรองรับการบูทแบบดั้งเดิมเท่านั้น อย่างไรก็ตามระบบปฏิบัติการมีโฟลเดอร์ / sys / firmware / efi ดังนั้นฉันจึงรู้ว่ารองรับ EFI ฉันทำ iso โดยใช้ Relinux

ฉันได้ดูความแตกต่างระหว่างไฟล์ ISO สองไฟล์และได้เห็นว่าอูบุนตูมาตรฐานมีโฟลเดอร์ EFI / BOOT ที่ประกอบด้วย grubx64.efi และ BOOTx64.EFI และยังมีโฟลเดอร์สำหรับบูตที่ไม่มีอยู่ในที่อื่น ฉันพยายามคัดลอกไดเรกทอรีทั้งสองนี้ไปแล้วโฟลเดอร์ EFI และโฟลเดอร์บูตไปยัง USB อื่นของฉัน แต่ไม่ได้ผล

คำถามของฉันคือ:

  • ฉันจะนำสองโฟลเดอร์นี้ไปไว้ในไฟล์ iso ปัจจุบันของฉันได้อย่างไร
  • และฉันจะสร้าง iso ของการกระจายของฉันเพื่อรองรับการบูท EFI ได้อย่างไร?

คำตอบ:


18

คุณต้องสร้าง ISO boot dual catalog เพื่อที่จะทำการบูต EFI และ MBR ไฟล์มาตรฐาน ISO 14.04 x64 ของ Ubuntu ทำงานด้วยวิธีนี้ แต่ไม่มีคำแนะนำให้สร้าง ISO ที่สามารถบูตได้ 14.04 ใหม่สำหรับระบบ EFI ฉันสามารถผสมผสานขั้นตอนที่ถูกต้องเพื่อสร้าง ISO เช่นนี้

คำแนะนำเหล่านี้จะช่วยให้คุณสร้าง Ubuntu ISO 14.04 เซิร์ฟเวอร์ ISO ที่สามารถบูต EFI และ MBR ได้ เมื่อบูต EFI บนระบบที่มีดิสก์เปล่าที่ไม่มีการกำหนดค่าเริ่มต้น (ตัวอย่างเช่น Generation 2 VM ใหม่ใน Hyper-V) การติดตั้งจะเริ่มขึ้นโดยอัตโนมัติจากนั้นทำการล้างดิสก์โดยอัตโนมัติ สิ่งนี้ถูกออกแบบมาสำหรับการจัดเตรียมระบบใหม่โดยอัตโนมัติด้วย Ubuntu 14.04 โดยใช้ LVM และการแบ่งพาร์ติชันอัตโนมัติ หากคุณใช้ ISO นี้กับระบบ Linux ที่มีอยู่ตัวติดตั้งจะหยุดทำงานเมื่อตรวจพบดิสก์ที่มีอยู่และรออินพุต หากคุณใช้ ISO นี้ในระบบที่ไม่ใช่ EFI (เช่น VM 1 รุ่น Hyper-V) มันจะรอที่หน้าจอเริ่มต้นการติดตั้งแบบกราฟิกและต้องการอินพุตก่อนที่จะดำเนินการติดตั้งแบบอัตโนมัติต่อไป

ผลลัพธ์คือการติดตั้ง Ubuntu Server พื้นฐานด้วย ubuntu-server และ openssh-server เท่านั้น

นี่คือขั้นตอนในการสร้าง ISO ที่บูตได้ด้วย EFI

รับ ISO 14.04:

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

ติดตั้งและแยกเนื้อหาไปยังโฟลเดอร์ใหม่:

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

เปลี่ยนเป็นไดเรกทอรีที่เราจะทำงานของเรา:

cd ~/ubuntu

ตั้งค่าภาษาเป็นภาษาอังกฤษ:

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

สร้างไฟล์ preseed ที่จะใช้ LVM เพื่อแบ่งพาร์ติชันดิสก์โดยอัตโนมัติโดยใช้พื้นที่ที่มีอยู่ทั้งหมด:

sudo nano ~/ubuntu/ks.preseed

แทนที่เนื้อหาไฟล์ด้วยสิ่งนี้:

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

สร้างไฟล์ kickstart ที่จะกำหนดค่า Ubuntu ระหว่างการติดตั้ง: (ให้แน่ใจว่าคุณเปลี่ยนส่วนชื่อผู้ใช้และคุณควรใช้รหัสผ่านที่เข้ารหัส)

sudo nano ~/ubuntu/ks.cfg

แทนที่เนื้อหาไฟล์ด้วยสิ่งนี้:

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

แก้ไขไฟล์การกำหนดค่า grub ดังนั้นเมื่อ ISO ทำการบูต EFI bootloader จะใช้ตัวเลือกที่เหมาะสมเพื่อใช้ไฟล์ preseed และ configuration ของเรา:

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

แทนที่เนื้อหาไฟล์ด้วยสิ่งนี้:

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
}

แก้ไขเมนูการบูต isolinux สำหรับการบูตที่ไม่ใช่ EFI (การบูต MBR) เพื่อใช้การกำหนดค่าที่กำหนดเองและการกำหนดล่วงหน้าที่กำหนดเอง:

sudo nano ~/ubuntu/isolinux/txt.cfg

แทนที่เนื้อหาไฟล์ด้วยสิ่งนี้:

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

สร้าง ISO:

คำสั่งนี้จะเป็นรุ่นที่แก้ไขของคำสั่งที่แสดงให้เห็นhttp://petersmithphotog.no-ip.biz/wiki/index.php/Unattended_Install คำแนะนำเหล่านั้นใช้ไม่ได้กับ Ubuntu 14.04 เพราะชี้ไปยังตำแหน่งที่ไม่ถูกต้องสำหรับไฟล์ efi.img (ควรอยู่ใน. / boot /grub/ บน 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 .

ตรวจสอบว่า ISO มีแค็ตตาล็อกการบูตสไตล์ที่ถูกต้องหรือไม่:

ISO ดั้งเดิมที่คุณดาวน์โหลดจาก Ubuntu:

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

เอาท์พุท:

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 ใหม่ที่คุณสร้างขึ้น:

dumpet -i ~/Custom1404.iso 

เอาท์พุท:

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)

คุณสามารถเปรียบเทียบผลลัพธ์นี้กับผลลัพธ์ที่คุณได้รับจาก ISO ที่สร้างขึ้นโดยใช้คำแนะนำที่ฉันจะสร้างการติดตั้ง Ubuntu แบบอัตโนมัติได้อย่างไร? : (พวกเขาสร้าง ISO MBR เท่านั้นไม่ใช่บูตคู่ 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 .

รับข้อมูล ISO:

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

เอาท์พุท:

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
มันทำได้มากกว่าสร้าง ISO ที่สามารถบูตได้ของ EFI ด้วยการเอาตัวเลือก kickstart และ preseed ออกจากคำแนะนำเหล่านี้คุณสามารถสร้างมาตรฐาน Ubuntu 14.04 ISO ได้ การเปลี่ยนแปลงที่เฉพาะเจาะจงได้รับการบันทึกไว้ในคำตอบ
anothermh

1
จากนั้นฉันขอให้คุณเก็บเฉพาะส่วนที่เกี่ยวข้องที่นี่เนื่องจากคุณมีคำตอบสำหรับคำถามการติดตั้งแบบไม่ต้องใส่ข้อมูลกับทุกสิ่งอื่น
muru

2
ใช่! ฉันค้นหาวิธีการสร้าง ISO ที่สามารถบูตได้จาก EFI จากโฟลเดอร์ที่กำหนดเอง .. ดีใจที่คุณใส่ทุกอย่างไว้ที่นี่!
Alex R

1
มันใช้งานได้ดีในเครื่องเสมือน แต่ฉันไม่สามารถบูตได้เมื่อคัดลอกไปยังไดรฟ์ USB เช่นเดียวกับที่ทำในอิมเมจของวานิลลาอูบุนตู
HarlemSquirrel

2
@HarlemSquirrel หากต้องการติดตั้งจากแท่ง USB คุณเพียงแค่ต้องเพิ่มอีกหนึ่งขั้นตอนในการแปลง ISO ให้เป็นรูปแบบที่สามารถบูตได้ในไดรฟ์ USB:# isohybrid path/to/image.iso
jjnebeker

1

UEFI เปิดใช้งานไดรฟ์ USB

หากคุณต้องการการติดตั้งจากสื่อ USB คุณไม่จำเป็นต้องสร้าง ISO ที่กำหนดเองก่อน

การสร้าง UEFI สำหรับการบู๊ตผ่านสื่อสดแบบ USB เท่านั้นนั้นเป็นสิ่งที่ตรงไปตรงมา เพียงคัดลอกไฟล์ไปยังไดรฟ์ USB ที่จัดรูปแบบ FAT32ของคุณ แค่นั้นแหละ! มันจะถูกตรวจจับว่าเป็น UEFI Boot Medium ที่ถูกต้อง

จากนั้นคุณสามารถแก้ไขไฟล์ได้โดยตรงบนไดรฟ์ USB

แหล่งที่มาและรายละเอียด: วิธีสร้างสื่อสด USB ที่สามารถบูตได้ UEFI เท่านั้น


0

สำหรับฉันวิธีที่ดีที่สุดคือ:

1) สร้าง systemo live iso

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

2) เพิ่มพาร์ติชัน uefi ให้กับ iso ด้วยวิธีนี้:

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) คัดลอก iso ไปยังสื่อ (ในกรณีนี้ pendrive ของฉันใน / dev / sdb

pv /tmp/live.iso | dd of=/dev/sdb conv=notrunc,noerror
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.