文章目录
额外介绍 ipxe.org 已经编译好的固件 http://boot.ipxe.org/
编译环境准备(Rock Linux 9默认最小化安装)
# 安装编译所需环境
dnf install git
dnf install gcc make perl xz-devel mtools mkisofs syslinux
# dnf install gcc make perl xz-devel mtools xorriso syslinux
拉取ipxe的源码
# ipxe项目源码地址 https://github.com/ipxe/ipxe.git
cd /root/
git clone https://github.com/ipxe/ipxe.git
让编译的ipxe支持自定义分辨率 和 背景图片 + ping命令支持
1、启用ipxe的console命令,让ipxe支持调整分辨率 以及 支持自定义背景图片
# 参考链接 https://ipxe.org/buildcfg/console_cmd https://ipxe.org/cmd/console
# 1、需要修改 ipxe/src/config/general.h 文件内容;取消 #define IMAGE_PNG 和 #define CONSOLE_CM 前面的//注释
# 2、需要修改 ipxe/src/config/console.h 文件内容;取消 #define CONSOLE_FRAMEBUFFER 前面的//注释
cd /root/ipxe/src
sed -i 's/\/\/#define\ IMAGE_PNG/#define\ IMAGE_PNG/' config/general.h
sed -i 's/\/\/#define\ CONSOLE_CMD/#define\ CONSOLE_CMD/' config/general.h
sed -i 's/\/\/#define\tCONSOLE_FRAMEBUFFER/#define\tCONSOLE_FRAMEBUFFER/' config/console.h
2、启用ipxe的ping命令
# ping cmd support
cd /root/ipxe/src
sed -i 's/\/\/#define\ PING_CMD/#define\ PING_CMD/' config/general.h
编译适用于bios+ipxe方式的undionly.kpxe
# 进入源码目录
cd /root/ipxe/src/
# 设置自定义菜单
cat bootmenu.ipxe
#!ipxe
echo ======================== LT-FNK ========================
echo === ipxe_version : ${version}
echo === boot_mode : ${platform}
echo === ipxe_file : ${filename}
echo === host_name : ${hostname}
echo ===
echo === server_arch : ${buildarch}
echo === server_manufacturer : ${manufacturer}
echo === server_product : ${product}
echo === server_serial : ${serial}
echo === server_asset : ${asset}
echo === server_uuid : ${uuid}
echo ===
echo === next_server : ${next-server}
echo === boot_net_mac : ${mac}
echo === boot_net_ipv4 : ${ip}
echo === boot_net_ipv6 : ${ip6}
echo ========================================================
sleep 3
params
param platform ${builtin/platform}
param next-server ${next-server}
:retry
dhcp || goto retry
console --picture http://${next-server}/auto-install/config/texture.png --x 1024 --y 768
route
prompt --key 0x02 --timeout 3000 Press Ctrl-B for the iPXE command line... && shell ||
#chain --autofree http://${next-server}/auto-install/config/bootmenu.php##params || goto retry
#chain --autofree http://${next-server}/auto-install/config/bootmenu.php?h=${hostname}&m=${mac}&p=${platform} || goto retry
chain --autofree http://${next-server}/auto-install/config/bootmenu.php##params || goto retry
# 编译
make bin/undionly.kpxe EMBED=bootmenu.ipxe
cp bin/undionly.kpxe /var/lib/tftpboot/
# 或者这样一步编译 makebin/undionly.kpxe bin-x86_64-efi/ipxe.efi EMBED=bootmenu.ipxe
编译适用于uefi+ipxe方式的ipxe.efi
# 进入源码目录
cd /root/ipxe/src/
# 设置自定义菜单
# 编译
make bin-x86_64-efi/ipxe.efi EMBED=bootmenu.ipxe
cp bin-x86_64-efi/ipxe.efi /var/lib/tftpboot/
附一、为ipxe启用附加支持
# 进入ipxe源码目录
cd /root/ipxe/src
# Console Background and Console Custom resolution support
sed -i 's/\/\/#define\ IMAGE_PNG/#define\ IMAGE_PNG/' config/general.h
sed -i 's/\/\/#define\ CONSOLE_CMD/#define\ CONSOLE_CMD/' config/general.h
sed -i 's/\/\/#define\tCONSOLE_FRAMEBUFFER/#define\tCONSOLE_FRAMEBUFFER/' config/console.h
# NFS protocol support
sed -i 's/#undef\tDOWNLOAD_PROTO_NFS/#define\tDOWNLOAD_PROTO_NFS/' config/general.h
# ping cmd support
sed -i 's/\/\/#define\ PING_CMD/#define\ PING_CMD/' config/general.h
# poweroff and reboot cmd support
sed -i 's/\/\/#define\ REBOOT_CMD/#define\ REBOOT_CMD/' config/general.h
sed -i 's/\/\/#define\ POWEROFF/#define\ POWEROFF/' config/general.h
# params cmd support (开启他,可以传参 platform ${builtin/platform} 的 pcbios 和 efi 参数值)
sed -i 's/\/\/#define\ PARAM_CMD/#define\ PARAM_CMD/' config/general.h
附加bug,新版ipxe部分在安装windows时,ipxe下载boot.wim过程极度缓慢
https://github.com/ipxe/ipxe/issues/1023
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论