背景
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