ipxe编译(分别编译基于bios+ipxe、uefi+ipxe的方式)

额外介绍 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
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1276.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2024/3/25作者: 辣条①号

目标:网络规划设计师、系统工程师、ceph存储工程师、云计算工程师。 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录