无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 67507|回复: 129
打印 上一主题 下一主题

[分享] iPXE-UEFI网启小工具

    [复制链接]
1#
发表于 2018-11-24 14:41:07 | 显示全部楼层
本帖最后由 yigeren 于 2018-11-24 14:43 编辑

提供一个菜单文件自动识别BIOS和EFI启动
#!ipxe
#check platform (pcbios or efi)
echo Platform: ${platform}
set menu-timeout 20000
dhcp
isset ${next-server} || set next-server 192.168.1.2  #自行指定服务器ip
iseq ${platform} pcbios && set start BIOS_MENU || set start EFI_MENU
goto ${start}

:BIOS_MENU
set menu-default win10pe
menu iPXE BIOS Boot Menu
#item win2003                0.Yigeren Win2003PE
item --key 1 win7pe        1.Yigeren Win7PE
item --key 2 win8pe        2.Yigeren Win8PE
item --key 3 win8x64        3.Yigeren Win8x64PE
item --key 4 win10pe        4.Yigeren Win10x64PE
item --key 5 maxdos        5.MAXDOS9.3PLUS
item --key 6 diskgen        6.DISKGEN
item --key 7 hddreg        7.HDDREG
item --key h hddboot        H.HDDBOOT
item --key r reboot        R.ReBoot Computer

choose --timeout ${menu-timeout} --default ${menu-default} selected
goto ${selected}

:shell
echo Type 'Exit' to get the back to the menu
shell
goto start

:failed
echo Booting failed, dropping to shell
goto shell

:reboot
reboot

:hddboot
sanboot --no-describe --drive 0x80

:maxdos
initrd http://${next-server}/img/MAXDOS.IMG
chain http://${next-server}/memdisk || goto failed

:diskgen
initrd http://${next-server}/img/DISKGEN.img
chain http://${next-server}/memdisk || goto failed

:hddreg
initrd http://${next-server}/img/HDDREG.IMG
chain http://${next-server}/memdisk || goto failed

#:win2003
#kernel http://${next-server}/STARTROM.0
#boot || goto failed

:win7pe
kernel http://${next-server}/wimboot
initrd http://${next-server}/boot/bootmgr.exe                bootmgr.exe
initrd http://${next-server}/boot/BCD                                  BCD
initrd http://${next-server}/boot/boot.sdi                        boot.sdi
initrd http://${next-server}/boot/Win7PE.wim                Win7PE.wim
boot || goto failed

:win8pe
kernel http://${next-server}/wimboot
initrd http://${next-server}/boot/bootmg8.exe                bootmgr.exe
initrd http://${next-server}/boot/BC8                                BC8
initrd http://${next-server}/boot/boot.sdi                        boot.sdi
initrd http://${next-server}/boot/Win8PE.wim                Win8PE.wim
boot || goto failed

:win8x64
kernel http://${next-server}/wimboot
initrd http://${next-server}/boot/boot864.exe                bootmgr.exe
initrd http://${next-server}/boot/864                                864
initrd http://${next-server}/boot/boot.sdi                        boot.sdi
initrd http://${next-server}/boot/Win864PE.wim                Win864PE.wim
boot || goto failed

:win10pe
kernel http://${next-server}/wimboot
initrd http://${next-server}/boot/boot164.exe                bootmgr.exe
initrd http://${next-server}/boot/164                                164
initrd http://${next-server}/boot/boot.sdi                        boot.sdi
initrd http://${next-server}/boot/Win10x64.wim                Win10x64.wim
boot || goto failed
goto start


:EFI_MENU
set menu-default win10efi
menu iPXE EFI Boot Menu
item win8efi                1.Yigeren Win8x64PE
item win10efi                2.Yigeren Win10x64PE
item reboot                3.ReBoot Computer

choose --timeout ${menu-timeout} --default ${menu-default} selected
goto ${selected}

:win8efi
kernel http://${next-server}/wimboot
initrd http://${next-server}/boot/bootx64.efi                                        bootx64.efi
initrd http://${next-server}/boot/boot864.exe                                bootmgr.exe
initrd http://${next-server}/efi/microsoft/boot/864                                864
initrd http://${next-server}/efi/microsoft/boot/fonts/chs_boot.ttf        chs_boot.ttf
initrd http://${next-server}/efi/microsoft/boot/fonts/wgl4_boot.ttf        wgl4_boot.ttf
initrd http://${next-server}/boot/boot.sdi                                        boot.sdi
initrd http://${next-server}/boot/Win864PE.wim                                Win864PE.wim
boot || goto failed

:win10efi
kernel http://${next-server}/wimboot
initrd http://${next-server}/efi/boot/bootx64.efi                                bootx64.efi
initrd http://${next-server}/boot/boot164.exe                                bootmgr.exe
initrd http://${next-server}/efi/microsoft/boot/BCD                        BCD
initrd http://${next-server}/efi/microsoft/boot/fonts/chs_boot.ttf        chs_boot.ttf
initrd http://${next-server}/efi/microsoft/boot/fonts/wgl4_boot.ttf        wgl4_boot.ttf
initrd http://${next-server}/boot/boot.sdi                                        boot.sdi
initrd http://${next-server}/boot/Win10x64.wim                                Win10x64.wim
boot || goto failed
goto start  

点评

很好!  发表于 2019-8-31 15:05
关于这个菜单,想请教一下,懒得自己去摸索了。 如果用这个菜单,服务端用那个启动文件undionly.kpxe(ipxe.pxe)或ipxe.efi? 正常理解,客户端PXE启动后,要先取得相对应的启动文件,然后才是配置、菜单文件,  详情 回复 发表于 2018-11-24 20:43
多谢分享,收藏下来学习下。  详情 回复 发表于 2018-11-24 17:29

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

2#
发表于 2018-11-24 21:25:12 | 显示全部楼层
本帖最后由 yigeren 于 2018-11-24 21:40 编辑
captain_g 发表于 2018-11-24 20:43
关于这个菜单,想请教一下,懒得自己去摸索了。

如果用这个菜单,服务端用那个启动文件undionly.kpxe( ...


Tiny PXE的配置文件config.ini里找到[arch]字段,在下面添加
00007=ipxe.efi

提供的菜单文件在虚拟机和实机上都测试通过的,自己在用的,使用很久了
ipxe.pxe是启动BIOS,ipxe.efi是启动UEFI的,不管客户机是用什么模式启动,服务端会自动识别调用相应的启动文件
参考图片

ipxe.png (49.32 KB, 下载次数: 303)

ipxe

ipxe

ipxe.rar

399.02 KB, 下载次数: 66, 下载积分: 无忧币 -2

ipxe.efi

点评

问题1解决了,应该是我下载的版本编译时内置了相应的脚本,换了你发的附件里的,ok了,按altfilename寻找菜单加载。 另外那个在线编译怎么不会用啊,找不到下一步  详情 回复 发表于 2018-11-25 17:44
有两个问题请问下: 1我用的ipxe启动文件都是下载的别人的不是自己编译的,在altfilename=menu.all 想共用一个菜单 ,可是好像没有效果ipxe好像忽略altfilename=menu.all,寻找menu.ipxe(bios下)和menu.efi(uefi  详情 回复 发表于 2018-11-25 17:09
你的菜单文件就只有一个ipxemenu.text,无论bios还是uefi,对吧? 我一会准备也这样弄下省得BIOS,UEFI各弄一个菜单  详情 回复 发表于 2018-11-25 16:25
感谢赐教,这样太方便了。  详情 回复 发表于 2018-11-25 07:55
回复

使用道具 举报

3#
发表于 2018-11-25 20:18:09 | 显示全部楼层
faly 发表于 2018-11-25 17:44
问题1解决了,应该是我下载的版本编译时内置了相应的脚本,换了你发的附件里的,ok了,按altfilename寻找 ...

POWEROFF命令在IPXE菜单是无效的,只有重启:reboot
没去用什么在线编译的,直接在这下载现成的:http://boot.ipxe.org/

点评

ipxe菜单支持背景吗,看你发的地址里有一个Ipxe.png  详情 回复 发表于 2018-11-25 21:32
回复

使用道具 举报

4#
发表于 2018-11-26 11:42:53 | 显示全部楼层
faly 发表于 2018-11-25 21:32
ipxe菜单支持背景吗,看你发的地址里有一个Ipxe.png


下载的IPXE.PXE是没有console这个命令的,所以不支持,你可以自己去编译一个有支持console这个命令的版本
用法:console --picture http://${next-server}/ipxe.png
IPXE还可以设置需要用户和密码登录的,但不清楚要怎么指定用户名和密码登录
命令:login
回复

使用道具 举报

5#
发表于 2018-11-28 19:57:47 | 显示全部楼层
到官方论坛找到了可以设置用户名和密码录登的方法了,嘿嘿
在ipxe启动文件最前面添加如下:
login
iseq ${username} yigeren || goto reboot                #登录用户名:yigeren
iseq ${password} wuyou || goto reboot                #登录密码:wuyou


这样登录时需要输入正确的用户名和密码才能进引导菜单界面,用户名或密码输错电脑会重启,也可单独对某一条菜单行加密码

点评

感谢分享! 关于您分享的那个菜单: 判断客户端为EFI平台后,配置直接跳转到是64位启动配置部分; 针对客户端是32位EFI平台,在TPS的INI中您用了00006=efi\boot\bootia32.efi,貌似用了微软的文件,这个是  详情 回复 发表于 2018-11-29 10:35
回复

使用道具 举报

6#
发表于 2018-11-29 11:02:14 | 显示全部楼层
本帖最后由 yigeren 于 2018-11-29 11:03 编辑

32EFI我是直接用了微软的bootia32efi文件,加载后直接读取BOOT\BCD菜单引导的,用的TFTP协议肯定会慢了点,不过测试了下速度还能接受
也因为32EFI的平台我几乎碰不到,所以没再去弄配置菜单了,所以直接用了微软的省事,BCD直接加载引导,呵呵
有空我研究下三合一菜单的^_^
还有你检查下BCD文件,看下添加这2个参数没,速度会快一点
RamdiskTftpBlockSize
参数值为:20480
RamdiskTftpWindowSize
参数值为10

点评

以前是在服务端WIFI连接的情况下测试的,感觉很慢。 按你的指点动了下BCD,刚刚在服务端网线连接的情况下测试了一下, 所有文件包括150M的WIM文件读取完毕用时不到20秒,这个网启速度应该不错了。 再次感谢  详情 回复 发表于 2018-11-29 16:36
多谢指点!  详情 回复 发表于 2018-11-29 11:08
回复

使用道具 举报

7#
发表于 2018-11-29 15:55:54 | 显示全部楼层

嘿,BIOS,X64EFI,X86EFI三合一菜单搞定,在虚拟机测试通过,能自动引导相应的菜单界面
在我上面提供的菜单中找到:
iseq ${platform} pcbios && set start BIOS_MENU || set start EFI_MENU
goto ${start}

替换为:
iseq ${platform} pcbios && set start BIOS_MENU || set start EFI        #(pcbios && efi)
goto ${start}
:EFI
iseq ${buildarch} x86_64 && set start EFI_MENU || set start x86EFI_MENU                #(x64EFI && x86EFI)
goto ${start}


去试试看看吧^_^
回复

使用道具 举报

8#
发表于 2018-11-29 15:55:57 | 显示全部楼层
本帖最后由 yigeren 于 2018-11-29 15:59 编辑


嘿,BIOS,X64EFI,X86EFI三合一菜单搞定,在虚拟机测试通过,能自动引导相应的菜单界面
在我上面提供的菜单中找到:
iseq ${platform} pcbios && set start BIOS_MENU || set start EFI_MENU
goto ${start}

替换为:
iseq ${platform} pcbios && set start BIOS_MENU || set start EFI        #(pcbios && efi)
goto ${start}
:EFI
iseq ${buildarch} x86_64 && set start EFI_MENU || set start x86EFI_MENU                #(x64EFI && x86EFI)
goto ${start}


去试试看看吧^_^
对了,你自己要添加一个:x86EFI_MENU菜单的,config配置文件[arch]添加00006=ipxe32.efi

点评

非常感谢热心相助! 这个设置参数在官网也学习过,由于是业余的没专业知识,理解不透。 官网只是简单地说:i386 指 32-bit x86 CPU;x86_64 指 64-bit x86 CPU; 看来理解上有偏差,难道32EFI平台的电脑,  详情 回复 发表于 2018-11-29 16:30
回复

使用道具 举报

9#
发表于 2018-11-29 16:50:33 | 显示全部楼层
captain_g 发表于 2018-11-29 16:30
非常感谢热心相助!

这个设置参数在官网也学习过,由于是业余的没专业知识,理解不透。


在32EFI平台的电脑一样是用64位的CPU,只是我们需要改变下逻辑变通下来达到我们的目的
在32EFI的平台下,TPS是不是会自动调用config配置里00006=ipxe32.efi的文件,对吧
然后咱们先引导IPXE32.efi到SHELL里面,也就是命令行状态,通过输入此命令:echo ${buildarch}
32EFI平台下显示为i386,而在64EFI平台下显示为X86_64
这样就能通过判断系统是处于什么状态下,然后自己去引导相应的菜单界面

点评

这下理解了,多谢。  详情 回复 发表于 2018-11-29 16:54
回复

使用道具 举报

10#
发表于 2018-11-29 17:00:22 | 显示全部楼层
captain_g 发表于 2018-11-29 16:54
这下理解了,多谢。

当时没注意这句话:Specifies the CPU architecture for which this version of ...

其实那些英文我也看不懂,呵呵
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-2 20:26

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表