无忧启动论坛

标题: 自适应代理DHCP/DHCP、BIOS/UEFI、HTTP/TFTP能方便地启动多个PE的iPXE菜单示例! [打印本页]

作者: 江南一根葱    时间: 2025-9-5 15:28
标题: 自适应代理DHCP/DHCP、BIOS/UEFI、HTTP/TFTP能方便地启动多个PE的iPXE菜单示例!
本帖最后由 江南一根葱 于 2025-9-18 11:55 编辑

                                     本贴由AI生成,但代码是亲自部署
🚀 我的 iPXE 智能启动菜单——比你想象的更狠
这份 iPXE 脚本,不是普通的 PXE 菜单,它有几个硬核优点:
  1. #!ipxe
  2. ifopen net0
  3. ifstat
  4. #set quiet 1 #
  5. set protocol http    #初始化协议变量,走http
  6. isset ${proxydhcp/next-server} && set booturl ${proxydhcp/next-server} || set booturl ${next-server} #有代理dhcp信息就直接取值,智能获取启动ip


  7. :bootmenu  #启动菜单查看基本情况
  8. menu  iPXE's Boot Menu BootServer:${protocol}://${booturl}
  9.    
  10.    item --gap -- Choose BootFile
  11.    item --key 1 newbeeplus.wim      2.  Boot newbeepe #启动newbeepe.wim
  12.    item --key 2 mini.wim      2.  Boot mini.wim  #同上

  13.    item --gap -- Advanced options
  14.    item --key c config              C.  Configure settings   
  15.    item --key s shell          S.  Drop to iPXE shell
  16.    item --key r reboot         R.  Reboot computer
  17.    item --key p poweroff       P.  Poweroff computer
  18. choose --timeout 100000 --default newbeeplus.wim selected || #默认选newbeeplus.wim来启动
  19. iseq ${selected} config && config ||
  20. iseq ${selected} shell && shell ||
  21. iseq ${selected} reboot && reboot ||
  22. iseq ${selected} poweroff && poweroff ||
  23. set bootfile ${selected} && echo bootfile:${selected} && goto wimboot  #启动菜单上选中的wim文件,也就是pe ||




  24. :switch_protocol #http不能启动?就改协议成tftp,然后继续启动
  25. console
  26. echo error! switch_protocol!
  27. set protocol tftp
  28. echo now boofile is ${protocol}://${booturl}/${bootfile}
  29. sleep 1 && goto wimboot



  30. :wimboot #启动菜单上选中的PE
  31. echo ${bootfile}
  32. kernel ${protocol}://${booturl}/app/wimboot/wimboot  gui || goto switch_protocol #第一个文件都取不成功,肯定http走不起了,换tftp协议
  33. iseq ${platform} pcbios && initrd ${protocol}://${booturl}/app/wimboot/bootmgr  bootmgr ||
  34. iseq ${platform} efi && initrd -n bootx64.efi ${protocol}://${booturl}/app/wimboot/bootmgfw.efi ||
  35. initrd ${protocol}://${booturl}/app/wimboot/BCD  BCD ||
  36. initrd ${protocol}://${booturl}/app/wimboot/boot.sdi boot.sdi ||
  37. initrd ${protocol}://${booturl}/app/wimboot/segoen_slboot.ttf segoen_slboot.ttf ||
  38. initrd ${protocol}://${booturl}/app/wimboot/segoe_slboot.ttf segoe_slboot.ttf ||
  39. initrd ${protocol}://${booturl}/app/wimboot/segmono_boot.ttf segmono_boot.ttf ||
  40. initrd ${protocol}://${booturl}/app/wimboot/wgl4_boot.ttf wgl4_boot.ttf ||  
  41. initrd ${protocol}://${booturl}/app/wimboot/bootres.dll bootres.dll ||
  42. iseq ${platform} pcbios && initrd ${protocol}://${booturl}/${bootfile} boot.wim ||
  43. iseq ${platform} efi && initrd -n boot.wim ${protocol}://${booturl}/${bootfile} ||
  44. boot || goto bootmenu #启到这里不成功,说明没这个wim文件,回菜单重新选另一个文件启动
复制代码

ipxeboot.txt (2.44 KB, 下载次数: 59)
20250905 19点前下载的都有bug,传统bios无法启动,现在已修复

作者: 肉仔    时间: 2025-9-5 16:05
这个是引导系统么
作者: 奈绪    时间: 2025-9-5 16:07
葱大,史上最伟大网管,果然名不虚传。
作者: 12qaz    时间: 2025-9-5 16:19
感谢分享
作者: tt911    时间: 2025-9-5 16:45
&#128073  这是啥符号?都被吃了。。。
作者: it323    时间: 2025-9-5 17:01
感谢分享!!!
作者: 201012121135    时间: 2025-9-5 17:08
谢谢分享
作者: makoto23    时间: 2025-9-5 17:14
感谢分享
作者: 小灰兔    时间: 2025-9-5 17:23

感谢分享
作者: wn168cn@163.com    时间: 2025-9-5 18:31
支持原创 感谢分享
作者: handsome_xiang    时间: 2025-9-5 18:42
感谢分享!
作者: 江南一根葱    时间: 2025-9-5 19:03
20250905 19点前下载的都有bug,传统bios无法启动,现在已修复

作者: lixiangliuyi    时间: 2025-9-5 19:25

葱大,史上最伟大网管。让人叹为观止,从此爱上装系统,
作者: wuxin9712    时间: 2025-9-5 20:55
葱老板 又有新东西了 进来收货
作者: 2012zcsh    时间: 2025-9-5 21:18
谢谢分享。
作者: tingtao666    时间: 2025-9-5 22:10
感谢分享 ! ! !
作者: 开裆裤看    时间: 2025-9-6 00:21
咋用
作者: handsome_xiang    时间: 2025-9-6 00:40
感谢分享!
作者: wang1126    时间: 2025-9-6 06:49
谢谢楼主分享
作者: rgfwqx@163.com    时间: 2025-9-6 07:09
谢谢
作者: sxp3468    时间: 2025-9-6 12:00
感谢业委会分享
作者: shikunfang    时间: 2025-9-6 13:05
很是欣赏大佬的作品,这个新东西,能不能出个详细的教程怎么用呢?十分感谢
作者: fegr    时间: 2025-9-6 13:37
谢谢分享
作者: ebaqiang    时间: 2025-9-6 13:58
感谢分享

作者: nbf5031500    时间: 2025-9-8 21:50

感谢分享
作者: mygamexxx    时间: 2025-9-10 12:06
葱大,HTTP明明是开了,但总在这一句:

kernel ${protocol}://${booturl}/app/wimboot/wimboot ${wimbootcmd} gui || goto switch_protocol #第一个文件都取不成功,肯定http走不起了,换tftp协议

HTTP会显示连接被重置,然后转成TFTP。
作者: wtf112211    时间: 2025-9-10 13:10
很好,但是不会用
作者: 江南一根葱    时间: 2025-9-10 23:09
mygamexxx 发表于 2025-9-10 12:06
葱大,HTTP明明是开了,但总在这一句:

kernel ${protocol}://${booturl}/app/wimboot/wimboot ${wimboo ...

垃圾http服务器都丢了
作者: mygamexxx    时间: 2025-9-11 07:30
本帖最后由 mygamexxx 于 2025-9-11 07:35 编辑
江南一根葱 发表于 2025-9-10 23:09
垃圾http服务器都丢了

问题是所有的网启服务器都是这种结果. 开了代理也一样.

wechat_2025-09-11_073305_221.png (27.81 KB, 下载次数: 27)

wechat_2025-09-11_073305_221.png

wechat_2025-09-11_073255_497.png (2.67 KB, 下载次数: 46)

wechat_2025-09-11_073255_497.png

wechat_2025-09-11_073500_630.png (28.55 KB, 下载次数: 24)

wechat_2025-09-11_073500_630.png

作者: mygamexxx    时间: 2025-9-11 07:40
本帖最后由 mygamexxx 于 2025-9-11 07:44 编辑

不用TFTP,直接用HTTP却都是通的。用的是与PXE同一个脚本。

wechat_2025-09-11_073851_493.png (51.72 KB, 下载次数: 18)

wechat_2025-09-11_073851_493.png

wechat_2025-09-11_074401_736.png (27.59 KB, 下载次数: 11)

wechat_2025-09-11_074401_736.png

作者: mygamexxx    时间: 2025-9-11 08:04
本帖最后由 mygamexxx 于 2025-9-11 08:08 编辑

使用命令行的EWSHTTP服务器,hanWIN DHCP Server. 都在这一句:
kernel ${protocol}://${booturl}/boot/wimboot_ipxe ${wimbootcmd} gui || goto switch_protocol #第一个文件都取不成功,肯定http走不起了,换tftp协议

wechat_2025-09-11_080219_289.png (116.41 KB, 下载次数: 15)

wechat_2025-09-11_080219_289.png

wechat_2025-09-11_080210_384.png (2.36 KB, 下载次数: 14)

wechat_2025-09-11_080210_384.png

wechat_2025-09-11_080101_558.png (40.1 KB, 下载次数: 9)

wechat_2025-09-11_080101_558.png

作者: mygamexxx    时间: 2025-9-11 08:13
本帖最后由 mygamexxx 于 2025-9-11 08:14 编辑

按单纯HTTP来看,又没有一点问题。

wechat_2025-09-11_081012_091.png (99.19 KB, 下载次数: 16)

wechat_2025-09-11_081012_091.png

wechat_2025-09-11_081205_876.png (488.93 KB, 下载次数: 12)

wechat_2025-09-11_081205_876.png

作者: aduge38    时间: 2025-9-11 08:37
谢谢分享
作者: mygamexxx    时间: 2025-9-11 12:18
本帖最后由 mygamexxx 于 2025-9-11 13:13 编辑

为了搞清问题,使用了最简脚本,设定HTTP模式。无论是DHCP模式还是代理模式均出问题,能出菜单,默认选项,还是出错,如图:3.png。
怀疑网关对TFTP有限制?因为不用TFTP,直接HTTP顺利启动到PE桌面,如图:直接HTTP.png。

#!ipxe
ifopen net0
ifstat
dhcp
set protocol http    #初始化协议变量,走http
isset ${proxydhcp/next-server} && set booturl ${proxydhcp/next-server} || set booturl ${next-server} #有代理dhcp信息就直接取值,智能获取启动ip

:start
    menu iPXE Boot Menu BootServer--${protocol}://${booturl}
    item --key 1 winpe   1.Boot WinPE 64 (wimboot)
    item --key 5 reboot  5.Reboot computer
    choose --timeout 5000 selected
    goto ${selected}
:reboot
    reboot
:winpe
    kernel ${protocol}://${booturl}/boot/wimboot_ipxe ${wimbootcmd} gui
#前后文件名称不相同时,要加 -n 参数,同时两个文件先后顺序不一样。
    iseq ${platform} efi && initrd -n bootx64.efi ${protocol}://${booturl}/bootmgfw.efi || ##不加 -n 参数没有影响,名称首先用bootx64.efi(安全启动必须用bootx64.efi名称),bootmgfw.efi好像也可。
    initrd -n bcd ${protocol}://${booturl}/boot/bcdpxe ||  ##两个文件名称不一样,不加 -n 参数,在BCD加载出错。
    initrd -n boot.sdi ${protocol}://${booturl}/boot/boot.sdi ||  ##两个文件名称一样,不加 -n 参数没有影响。
    initrd ${protocol}://${booturl}/boot/boot.wim boot.wim
    imgstat && sleep 10
    boot

3.png (1.69 KB, 下载次数: 13)

3.png

直接HTTP.png (657.24 KB, 下载次数: 15)

直接HTTP.png

作者: oohyeah    时间: 2025-9-16 22:13
尽是干货,谢谢分享
作者: mygamexxx    时间: 2025-9-17 08:58
本帖最后由 mygamexxx 于 2025-9-17 10:38 编辑
mygamexxx 发表于 2025-9-11 12:18
为了搞清问题,使用了最简脚本,设定HTTP模式。无论是DHCP模式还是代理模式均出问题,能出菜单,默认选项, ...

终于解决HTTP的问题,只是在脚本前加了一个加载背景图的语句后,HTTP神奇地可以了。
console --picture /boot/background.png

测试后发现,在DHCP模式下可行,在代理模式下找不到背景图。

作者: 江南一根葱    时间: 2025-9-17 09:12
mygamexxx 发表于 2025-9-17 08:58
终于解决HTTP的问题,只是在脚本前加了一个加载背景图的语句后,HTTP神奇地可以了。
console --picture  ...

好好加文件名到菜单就行了,为啥非得把名称改来改去,
作者: mygamexxx    时间: 2025-9-17 09:42
本帖最后由 mygamexxx 于 2025-9-17 09:50 编辑
江南一根葱 发表于 2025-9-17 09:12
好好加文件名到菜单就行了,为啥非得把名称改来改去,

文件名称改动是为了适应很多情况,G4E,ipxe,本地启动与PXE启动。个人需求吧。
WIMBOOT改名是因为G4E用的是修改版,IPXE用的是官方版。
BCD改名是因为PXE启动与本地启动要用不同名称来区分。
都在同一目录下。


作者: mygamexxx    时间: 2025-9-17 13:14
本帖最后由 mygamexxx 于 2025-9-17 13:55 编辑
江南一根葱 发表于 2025-9-17 09:12
好好加文件名到菜单就行了,为啥非得把名称改来改去,

将VMware网络模式改为仅主机模式后,同样的脚本,DHCP模式的HTTP问题消失了(代理模式下问题依然存在)。
作者: 江南一根葱    时间: 2025-9-17 17:50
kernel ${protocol}://${booturl}/boot/wimboot_ipxe ${wimbootcmd} gui
什么意思都不知道
作者: mygamexxx    时间: 2025-9-18 07:55
本帖最后由 mygamexxx 于 2025-9-18 08:01 编辑
江南一根葱 发表于 2025-9-17 17:50
kernel ${protocol}://${booturl}/boot/wimboot_ipxe ${wimbootcmd} gui
什么意思都不知道

一楼抄的:
kernel ${protocol}://${booturl}/app/wimboot/wimboot ${wimbootcmd} gui || goto switch_protocol #第一个文件都取不成功,肯定http走不起了,换tftp协议

wimboot_ipxe是IPXE用的wimboot改名的,与G4E用的wimboot区分一下。
已经试过,将wimboot_ipxe名称改回wimboot,还是一样的情况。

作者: 江南一根葱    时间: 2025-9-18 09:02
mygamexxx 发表于 2025-9-18 07:55
一楼抄的:
kernel ${protocol}://${booturl}/app/wimboot/wimboot ${wimbootcmd} gui || goto switch_p ...

不清楚你咋架的服务端
作者: mygamexxx    时间: 2025-9-18 09:05
江南一根葱 发表于 2025-9-18 09:02
不清楚你咋架的服务端

如图

wechat_2025-09-18_090422_350.png (24.49 KB, 下载次数: 14)

wechat_2025-09-18_090422_350.png

作者: 江南一根葱    时间: 2025-9-18 09:10
mygamexxx 发表于 2025-9-18 09:05
如图

一看就有问题,参考ipxefm批处理,
tinypxe不支持它ui上操作,很多问题
作者: 江南一根葱    时间: 2025-9-18 09:12
mygamexxx 发表于 2025-9-18 07:55
一楼抄的:
kernel ${protocol}://${booturl}/app/wimboot/wimboot ${wimbootcmd} gui || goto switch_p ...

那是我忘了删,本来这个是二级菜单
作者: jnight    时间: 2025-9-18 09:17
感谢分享
作者: mygamexxx    时间: 2025-9-18 09:19
本帖最后由 mygamexxx 于 2025-9-18 09:23 编辑
江南一根葱 发表于 2025-9-18 09:12
那是我忘了删,本来这个是二级菜单

改成kernel ${protocol}://${booturl}/boot/wimboot_pxe 吗?改了后好像没有变化。

作者: 2011dreameasy    时间: 2025-9-18 12:15
顶一个看看
作者: dtyg001    时间: 2025-9-20 23:03
看着深奥的 支持
作者: kellenonly    时间: 2025-9-24 10:05
感谢分享
作者: 面条渣渣    时间: 2025-10-13 19:21
学习学习,感谢分享
作者: xttn001    时间: 前天 10:18
史上最伟大网管,果然名不虚传
作者: 2011990726    时间: 前天 23:00
史上最伟大网管,果然名不虚传。




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3