为ubuntu最小镜像mini.iso添加uefi支持

背景

Ubuntu除minimal install外一直有一种在线安装的最小镜像mini.iso

安装完成20.04系统和open ssh服务磁盘占用2.1GB内存开销86M

非常适合功能单一的服务器稳定使用,缺点官方不提供UEFI启动支持

实践

获取官方20.04的mini.iso

虚拟机测试legacy安装正常uefi模式没有反应

挂载后证实光盘根目录下没有EFI文件夹

转机

经过搜索发现官方预留了EFI启动镜像位于${CDROM}/boot/grub/efi.img

只需解压到光盘根目录即可,对于制作好的启动盘可以手动复制EFI文件夹

个人更希望EFI写入iso方便Ventoy或esxi使用

探索

Linux

使用linux广泛使用的mkisofs打包,需要注意bootable参数配置,脚本如下:

#!/bin/bash
URL='http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/netboot/mini.iso'
# check dependencies
hash wget 7z mkisofs &>/dev/null || 
(
    echo sudo is required to install wget, 7z, mkisofs
    sudo apt install -y wget p7zip-full genisoimage
)
# exit if download fail
wget $URL || exit
mkdir image
7z x ./mini.iso -oimage/
cd image
7z x ./boot/grub/efi.img
mkisofs -o ../mini_uefi.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -JR -V "Ubuntu Custom ISO" .
cd ..
# remove tmp files
rm -rf mini.iso image/
echo Output image is $PWD/mini_uefi.iso

Windows

想起Windows平台有UltraISO可以向镜像内添加文件

镜像大小74M未超免费限制,尝试添加EFI保存顺利启动

具体过程不再赘述

瑕疵

成功添加EFI支持并完成安装,启动后系统卡住按键无反应

/dev/sda2: clean, 66394/622592 files, 671734/24789856 blocks

ssh可以访问,断定系统正常启动,应该是分配tty终端问题

不出所料Ctrl + Alt + F1切换tty1正常login而报错信息为tty7

考虑到服务器基本上依靠ssh不会插显示器,可以忽略

尾声

既知道原因,我们可以修改默认tty1正常启动

Ubuntu默认安装开启图形界面启动splash绑定tty7

因此关闭splash并更新grub启动配置信息即可

sudo vi /etc/default/grub
# 找到并删除splash quiet
GRUB_CMDLINE_LINUX_DEFAULT="splash quiet"
# 修改后内容为
GRUB_CMDLINE_LINUX_DEFAULT=""
# 保存并更新grub重起生效
sudo update-grub2
sudo reboot

参考

Bug #1429030 “netboot mini.iso doesn't support UEFI boot” : Bugs : debian-installer package : Ubuntu

command line - How to check if two or more programs are installed using a bash script? - Ask Ubuntu

Edit and repack .iso bootable image

grub2 - How can I permanently remove the boot option "quiet splash"? - Ask Ubuntu