如何创建自定义版本的Ubuntu的EFI可引导ISO?

我创建了一个自己的Ubuntu发行版,我想在我的MAC上启动(从USB)。

当从Ubuntu网站使用标准的64bit-Ubuntu-iso时,它会启动。 但是,当使用包含我自己的发行版的iso文件执行完全相同的操作时,它不起作用,并且它似乎仅支持传统引导。 但是,操作系统有/ sys / firmware / efi文件夹,所以我知道它支持EFI。 我使用Relinux制作了iso。

我查看了两个ISO文件之间的差异,并看到标准的ubuntu有一个包含grubx64.efi和BOOTx64.EFI的EFI / BOOT文件夹,并且还有一个另一个不存在的启动文件夹。 我试图将这两个目录,即EFI和启动文件夹复制到我的其他USB中,但是不起作用。

我的问题是:

  • 如何将这两个文件夹放入我当前的iso文件中?
  • 我怎样才能使我的发行版iso,以便它支持EFI启动?

您需要创建双引导目录ISO,以便它将引导EFI和MBR。 标准的Ubuntu 14.04 x64 ISO文件以这种方式工作,但没有指令可用于为EFI系统制作新的14.04可引导ISO。 我能够拼凑正确的步骤来创建像这样的ISO。

这些说明将允许您创建可以引导EFI和MBR的自定义Ubuntu 14.04 Server ISO。 当EFI在具有空白未初始化磁盘的系统上启动时(例如在Hyper-V中的新第2代VM上),安装程序将自动启动,然后自动擦除磁盘并安装基本的ubuntu-server软件包和OpenSSH。 这是为使用LVM和自动分区使用Ubuntu 14.04自动配置新系统而设计的。 如果在现有Linux系统上使用此ISO,则安装程序将在检测到现有磁盘并等待输入时停止。 如果在非EFI系统(例如第1代Hyper-V VM)上使用此ISO,则它将在图形安装程序启动屏幕上等待,并在继续使用自动安装程序之前需要输入。

结果是只安装了ubuntu-server和openssh-server的基本Ubuntu Server安装。

以下是创建EFI可引导ISO的步骤:

获得14.04 ISO:

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 

用以下内容替换文件内容:

 di partman-auto/method string lvm di partman-auto-lvm/guided_size string max di partman-auto/choose_recipe select atomic di partman-partitioning/confirm_write_new_label boolean true di partman/confirm_write_new_label boolean true di partman/choose_partition select finish di partman/confirm_nooverwrite boolean true di partman/confirm boolean true di partman-auto/purge_lvm_from_device boolean true di partman-lvm/device_remove_lvm boolean true di partman-lvm/confirm boolean true di partman-lvm/confirm_nooverwrite boolean true di partman-auto/init_automatically_partition select Guided - use entire disk and set up LVM di partman/choose_partition select Finish partitioning and write changes to disk di partman-auto-lvm/no_boot boolean true di partman-md/device_remove_md boolean true di partman-md/confirm boolean true di 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引导时,引导加载程序使用正确的选项来使用我们的预置和配置文件:

 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 } 

编辑用于非EFI引导(MBR引导)的isolinux引导菜单以使用自定义配置和自定义预置:

 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的错误位置。 (应该在ISO上的./boot/grub/中)

 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 . 

validationISO是否具有正确的样式引导目录:

您从Ubuntu下载的原始ISO:

 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) 

您可以将此输出与使用如何创建完全无人参与的Ubuntu安装中的说明构建的ISO进行比较? :(他们只创建一个MBR ISO,而不是双启动目录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) 

对我来说,最好的方法是:

1)创建systemback live iso

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

2)以这种方式向iso添加一个uefi分区:

 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 

UEFI启用了USB驱动器

如果您想从USB Medium安装,则无需先创建自定义ISO。

创建仅支持UEFI的USB直播媒体非常简单。 只需将文件复制到FAT32格式的 USB驱动器即可。 而已! 它将被检测为有效的UEFI引导介质。

然后,您可以直接在USB驱动器上修改文件。

来源和详细信息: 如何创建仅支持UEFI的可启动USB直播媒体?