我是神仙 发表于 2014-9-8 11:53:11

iPXE wimboot 现在支持UEFI下的http/ftp启动了

本帖最后由 我是神仙 于 2014-9-29 12:24 编辑

iPXE网络启动可以通过HTTP/FTP轻松达到千兆速度,比普通TFTP快得多

不过以前iPXE对UEFI支持不太好,UEFI时好像不支持http/ftp等高级功能。

但前几天, iPXE上的wimboot有更新了(ipxe.org/wimboot), 支持UEFI下的http/ftp启动windows PE 8.1了。

试了一下确实很不错。有兴趣的可以去试一下

新版2.3.0支持32位和64位的UEFI启动
https://git.ipxe.org/release/wimboot/wimboot-latest.zip


32位用wimboot.i386


普通BIOS和32位EFI 64位EFI要分别用不同的iPXE版本才能启动。

如果想用同一个PXE服务器 同时适应pcibios 及 32位 和 64位 不同架构的网络启动,需要对DHCP服务作相应的配置。

如果是用的HanewinDHCP Server,可以多建几个配置profile.(Option > manage profiles > add)

并用Vendor Class作为条件


PXEClient:Arch:00000 则指向 ipxe/pcibios/ipxe.pxe
PXEClient:Arch:00006 则指向 ipxe/efi.i386/ipxe.efi
PXEClient:Arch:00007 则指向 ipxe/efi.x86_64/ipxe.efi
PXEClient:Arch:00009 则指向 ipxe/default.ipxe
...

PXEClient:Arch:00000这个也可以就用默认的 for Interface IP Address作为条件就行了


   As of the writing of this document, the following pre-boot
   architecture types have been requested.

            Type   Architecture Name
            ----   -----------------
            0    Intel x86PC
            1    NEC/PC98
            2    EFI Itanium
            3    DEC Alpha
            4    Arc x86
            5    Intel Lean Client
            6    EFI IA32
            7    EFI BC
            8    EFI Xscale
            9    EFI x86-64
http://tools.ietf.org/html/rfc4578





我是神仙 发表于 2014-9-8 12:21:58

本帖最后由 我是神仙 于 2014-9-25 09:38 编辑

我看那个snponly.efi不好用。一般都用的ipxe.efi.反正换着用 哪个行就用哪个

https://rom-o-matic.eu/ 这里可以编译。不过我也经常打不开这个网站

ljycslg 发表于 2014-9-8 12:10:42

有没有新版ipxe-snponly.efi,懒得去编译,分享下
试试新版兼容性怎么样

我是神仙 发表于 2014-9-8 12:25:09

ljycslg 发表于 2014-9-8 12:10
有没有新版ipxe-snponly.efi,懒得去编译,分享下
试试新版兼容性怎么样

已上传 试试吧

ljycslg 发表于 2014-9-8 13:13:58

我是神仙 发表于 2014-9-8 12:25
已上传 试试吧

不错,实机测试很给力
vmware上HTTP超给力,bootx64.efi的tftp基本龟速
遗憾的是hyper-V无论是http还是tftp都是龟速

我是神仙 发表于 2014-9-8 15:50:18

ljycslg 发表于 2014-9-8 13:13
不错,实机测试很给力
vmware上HTTP超给力,bootx64.efi的tftp基本龟速
遗憾的是hyper-V无论是http还是 ...

确实 见识过了wimboot的千兆威力之后 再也不能忍受tftp那个龟速了


hyperV那个确实要慢一些 搞不懂

hhh333 发表于 2014-9-10 05:04:16

本帖最后由 hhh333 于 2014-9-10 05:38 编辑

没玩成功,启动出菜单,但提示错误,我的菜单如下:
#!ipxe
#set menu-timeout 8000
   set menu-default w8pe64
   isset ${ip} || dhcp
   isset ${next-server} || set next-server 192.168.7.100
:start
menu iPXE EFI Boot Menu
item --gap --             -------------------------------- H3 PE TOOL ---------------------------
item w8pe64               Win8 PE 64
item w81pe64            Win81 PE 64
item --gap --             -----------------------------------------------------------------------
choose --timeout ${menu-timeout} --default ${menu-default} selected
goto ${selected}

:failed
echo Booting failed, dropping to shell
goto shell

:w8pe64
kernel http://${next-server}/BOOT/wimboot
initrd http://${next-server}/efi/boot/bootx64.efi bootx64.efi
initrd http://${next-server}/efi/microsoft/boot/bcd        bcd
initrd http://${next-server}/BOOT/boot.sdi        boot.sdi
initrd http://${next-server}/BOOT/H3_8PE64.WIM        H3_8PE64.WIM
boot || goto failed
goto start

:w81pe64
kernel http://${next-server}/BOOT/wimboot
initrd http://${next-server}/efi/boot/bootx64.efi        bootx64.efi
initrd http://${next-server}/efi/microsoft/boot/bcd        bcd
initrd http://${next-server}/BOOT/boot.sdi        boot.sdi
initrd http://${next-server}/BOOT/H3_81P64.WIM        H3_81P64.WIM
boot || goto failed
goto start



所有文件读取正常,BCD中菜单也可以出,但最后一步出错。过程如下:








我大致是这么玩的:
1、先到网站去编译一个snponly.efi,再改名:efi/boot/iPXE64.efi。脚本简单,就是两条语句
#!ipxe
   isset ${ip} || dhcp
   chain --autofree BOOT/H3_iPXEM.EFI

2、将真正的菜单内容(见上)保存为BOOT/H3_iPXEM.EFI

3、在haneWIN指定EFI启动文件为efi/boot/iPXE64.efi,如下图:


又用pause暂停了wimboot一下,好象也无问题:

hhh333 发表于 2014-9-10 06:25:30

经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。

ljycslg 发表于 2014-9-10 08:10:36

hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。

是有这个问题,wimboot新版也有bug,在vmware下bios启动蓝屏,暂时只能这样,bios用老版2.1.0版,efi用新版

我是神仙 发表于 2014-9-10 10:16:51

ljycslg 发表于 2014-9-10 08:10
是有这个问题,wimboot新版也有bug,在vmware下bios启动蓝屏,暂时只能这样,bios用老版2.1.0版,efi用新 ...

我都是用vmware呢 . 8.02,bios或uefi都没有蓝屏

我是神仙 发表于 2014-9-10 10:17:27

本帖最后由 我是神仙 于 2014-9-10 11:43 编辑

hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。

initrd http://${next-server}/BOOT/H3_8PE64.WIM      H3_8PE64.WIM

试了一下,改成这样就行了:
initrd http://${next-server}/BOOT/H3_8PE64.WIM      boot.WIM

---
哦 efi那个确实改名了就不行了。。。

--再修改一下 不是不能改名 而是不支持你那个名字。

具体点说,感觉不支持下划线 把你那个名字中的下划线去掉 就可以启动了

initrd http://${next-server}/BOOT/H38PE64.WIM      H38PE64.WIM

ljycslg 发表于 2014-9-10 10:48:22

我是神仙 发表于 2014-9-10 10:16
我都是用vmware呢 . 8.02,bios或uefi都没有蓝屏

我是最新版VM ,仔细测试了下,本机上的VM出现灵异现象,是用桥接模式出问题,host-only就可以,在其他机子上的VM桥接也可以,问题不大

我是神仙 发表于 2014-9-10 11:22:38

刚才看了一下 昨天wimboot的作者又发布了一个新版本2.2.4!

看来这几天作者正在频繁更新。可以再等下。有渠道的也可以把自己的测试结果告诉作者一下以便尽快修正吧


12 hours ago        Michael Brown        Release version 2.2.4 master v2.2.4
12 hours ago        Michael Brown        Force correct DeviceHandle on loaded bootmgfw.efi
。。。

我是神仙 发表于 2014-9-10 11:43:37

本帖最后由 我是神仙 于 2014-9-10 11:57 编辑

hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。

试过了 不是不能改名 而是不支持你那个名字。

具体点说,感觉不支持下划线 把你那个名字中的下划线去掉 就可以启动了

initrd http://${next-server}/BOOT/H38PE64.WIM      H38PE64.WIM

--
除了脚本,bcd文件中也要对应修改


--

晕 再改正一下

再试了一下 感觉不是不支持下划线,而是文件名长度只支持7个字母。所以任意删除一个字符感觉都可以启动,如把H3_8PE64.WIM 改为 H3_8PE6.WIM

不过一般都是8.3文件名,这里为什么是限制为7 没搞懂

我是神仙 发表于 2014-9-10 12:02:20

hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。

经过多次实验,确认它这个wim的文件名只能是7个字符以内。8个字符就会出错

我是神仙 发表于 2014-9-10 12:03:10

hhh333 发表于 2014-9-10 06:25
经反复测试,感觉到WIM文件不能改名,只有用boot.wim,否则歇菜。

7个字符以内

hhh333 发表于 2014-9-10 12:25:52

我是神仙 发表于 2014-9-10 12:03
7个字符以内

竟然是这个样子的,我试一下,看来还有bug,不忙更新。先好好测试一下。

我是神仙 发表于 2014-9-10 12:52:13

现在新版的wimboot同时支持efi和bios启动了,理想的情况下 可以使用完全相同的脚本启动

理想的情况就是比如说直接用win8安装光盘中的sources\boot.wim,可以自动解压里面的bootmgr 或 bootmgfw.efi,不用单独提供。
并且bcd文件即使是指向winload.exe它也可以自动指向winload.efi

如果是其他wim, 如hhh333那个,也可以用同一个脚本,只是要在脚本中做一下判断。如果是EFI启动就加载bootx64.efi,如果是BIOS就加载bootmgr(或bootmgr.exe,都可以。它是自动从bootmgr解压bootmgr.exe)


判断是否为EFI启动:
iPXE 启动后有个变量platform,判断一下这个变量是 efi 还是 pcbios 就行 了

iPXE> show platform
builtin/platform:string = efi


hhh333 发表于 2014-9-10 13:39:28

我是神仙 发表于 2014-9-10 12:52
现在新版的wimboot同时支持efi和bios启动了,理想的情况下 可以使用完全相同的脚本启动

理想的情况就是 ...

我想为启动项指定不同的BCD,如:initrd http://${next-server}/efi/microsoft/boot/b64 bcd
提示出错,必须为initrd http://${next-server}/efi/microsoft/boot/bcd bcd

这个算不算bug,用了kernel http://${next-server}/BOOT/wimboot rawbcd也没有用。

我是神仙 发表于 2014-9-10 13:42:05

本帖最后由 我是神仙 于 2014-9-10 13:47 编辑

hhh333 发表于 2014-9-10 13:39
我想为启动项指定不同的BCD,如:initrd http://${next-server}/efi/microsoft/boot/b64 bcd
提示出错 ...

我自己用的是 initrd boot/bcf bcf

两个文件名要一致。bcf是在bootmgr.exe中修改

--
efi的话应该是修改bootx64.efi吧.efi文件这个倒没改过。不过我在其他地方好像看到你改过.efi文件的吧

hhh333 发表于 2014-9-10 13:47:30

我是神仙 发表于 2014-9-10 13:42
我自己用的是 initrd boot/bcf bcf

两个文件名要一致。bcf是在bootmgr.exe中修改

记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN        bootmgr
是可以的

我是神仙 发表于 2014-9-10 13:50:03

hhh333 发表于 2014-9-10 13:47
记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN        bootmgr
是可以的

估计关键是要修改bootmgr(其实就是修改里面的bootmgr.exe)。bootx64.efi这个应该类似,拿个二进制工具修改 不过没改过。bootmgr.exe倒改过的,只改一个字节就把bcd改成bcf了

hhh333 发表于 2014-9-10 13:58:42

我是神仙 发表于 2014-9-10 13:50
估计关键是要修改bootmgr(其实就是修改里面的bootmgr.exe)。bootx64.efi这个应该类似,拿个二进制工具 ...

我改过bootx64.efi,没有问题,不想搞很多启动文件

我是神仙 发表于 2014-9-10 14:08:11

hhh333 发表于 2014-9-10 13:58
我改过bootx64.efi,没有问题,不想搞很多启动文件

刚才我也试了下 查找5C 00 42 00 43 00 44 即\BCD 改为其他的如BCG 确实可以启动。 现在那个initrd好像确实要求文件名要一致。 pxe直接启动时好像有个DHCP选项(252)可以控制bcd文件名,wimboot倒不知道可不可以用到这个选项

我是神仙 发表于 2014-9-10 14:16:10

hhh333 发表于 2014-9-10 13:47
记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN        bootmgr
是可以的

我试了下 现在新版的wimboot实际上简化了 initrd后面不用重复一次文件名了

即不用initrd boot/bcd bcd
而是直接 initrd boot/bcd 这样就行了。后面写的文件名没啥用了。

本身是简化了。不过想用这个来重命名文件却不行了。。。到底是好是坏呢...

我是神仙 发表于 2014-9-10 17:33:18

hhh333 发表于 2014-9-10 13:47
记得:initrd http://${next-server}/BOOT/H3_MGR16.BIN        bootmgr
是可以的

其实是语法错误。正确的语法是initrd [--name <name>] [--timeout <timeout>] <uri> [<arguments>...]
ipxe.org/cmd/initrd. 即 改成 initrd --name bootmgr http://${next-server}/BOOT/H3_MGR16.BIN      就行了

我是神仙 发表于 2014-9-10 17:35:44

我是神仙 发表于 2014-9-10 17:33
其实是语法错误。正确的语法是initrd [--name ] [--timeout ][...]
ipxe.org/cmd/initrd. 即 改 ...

从页面http://ipxe.org/wimboot的示例来看 作者自己也没有意识到这个语法变化。他可能没想到会有人把文件名改动这么大。。。

hhh333 发表于 2014-9-11 09:42:42

本帖最后由 hhh333 于 2014-9-11 09:46 编辑

我是神仙 发表于 2014-9-10 17:35
从页面http://ipxe.org/wimboot的示例来看 作者自己也没有意识到这个语法变化。他可能没想到会有人把文件 ...

现在用2.2.4版本的-n参数改名的问题解决了,最多7个字符的文件名问题还是存在,看作者什么时候修正。
这是菜单,可以为同一个启动文件启动不同的BCD了。
#!ipxe
#set menu-timeout 8000
   set menu-default w8pe64
   isset ${ip} || dhcp
   isset ${next-server} || set next-server 192.168.7.100
:start
menu iPXE EFI Boot Menu
item --gap --             -------------------------------- H3 PE TOOL ---------------------------
item w8pe64               Win8 PE 64
item w81pe64            Win81 PE 64
item --gap --             -----------------------------------------------------------------------
choose --timeout ${menu-timeout} --default ${menu-default} selected
goto ${selected}

:failed
echo Booting failed, dropping to shell
goto shell

:w8pe64
kernel http://${next-server}/BOOT/wimboot
initrd http://${next-server}/efi/boot/bootx64.efi
initrd -n BCD http://${next-server}/efi/microsoft/boot/b64
initrd http://${next-server}/BOOT/boot.sdi
initrd http://${next-server}/BOOT/H3_864.WIM
boot || goto failed
goto start

:w81pe64
kernel http://${next-server}/BOOT/wimboot rawbcd
initrd http://${next-server}/efi/boot/bootx64.efi
initrd -n BCD http://${next-server}/efi/microsoft/boot/b16
initrd http://${next-server}/BOOT/boot.sdi
initrd http://${next-server}/BOOT/H3_8164.WIM
boot || goto failed
goto start

我是神仙 发表于 2014-9-11 19:33:59

hhh333 发表于 2014-9-11 09:42
现在用2.2.4版本的-n参数改名的问题解决了,最多7个字符的文件名问题还是存在,看作者什么时候修正。
...

又试了下 好像这个--name或-n的语法只是针对efi情况的。在普通bios时还是要用initrd bcd bcd这种情况重复一下文件才行。同一个wimboot文件却有两种语法,应该不是故意为之,感觉算是bug吧

我是神仙 发表于 2014-9-12 13:03:14

我是神仙 发表于 2014-9-8 12:21
我看那个snponly.efi不好用。一般都用的ipxe.efi.反正换着用 哪个行就用哪个

https://rom-o-matic.eu/...

忘了说 这个加了个内嵌脚本自动加载 default.ipxe 。免得DHCP循环
页: [1] 2 3
查看完整版本: iPXE wimboot 现在支持UEFI下的http/ftp启动了