无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: liuzhaoyzz
打印 上一主题 下一主题

[我不是网管]分享个ipxe、grub2-http协议启动PE的免配置网启模板

    [复制链接]
31#
 楼主| 发表于 2019-12-26 23:12:44 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-27 07:21 编辑

这样子一堆中文乱码,菜单看起来不是很乱吗?还不如用批处理直接修改原文件中的汉字改成英文,然后自动生成菜单,然后这个问题就绕过去了。

wintoflash有时间有兴趣的话,看看能不能有所改进,文件名直接用utf-8来传输就好了。
回复

使用道具 举报

32#
发表于 2019-12-27 09:53:37 | 只看该作者
liuzhaoyzz 发表于 2019-12-26 23:12
这样子一堆中文乱码,菜单看起来不是很乱吗?还不如用批处理直接修改原文件中的汉字改成英文,然后自动生成 ...

加strconv模块转成gbk后正常,
也能启动
menuentry "uefiWin10pe中文.iso" "uefiWin10pe中文.iso" {
strconv --gbk --set=file "${1}"; map --mem --type=CD (http)/imgs/${file}
}


回复

使用道具 举报

33#
发表于 2019-12-27 10:13:16 | 只看该作者
楼主批处理比较牛b,我提个建议

批处理在目录 搜索iso wim efi等 文件

如果搜到的后缀为iso,就自动生成iso相关的菜单条,像
menuentry "/imgs/uefiWin10pe中文.iso" --class iso {
strconv --gbk --set=file "${1}"; map --mem --type=CD (http)/${file}
}
像昨天我发过的类似就可以写成
for /f "delims=. tokens=1-2"  %%a in ('dir /b D:\ppxxee\imgs\') do (
echo menuentry "imgs/%%a.%%b" --class %%b {
echo strconv --gbk --set=file "${1}"; map --mem --type=CD ^(http^)/imgs/${file}
echo }
)>>xxoo.cfg

如果是wim就写另一个菜单

上面是我瞎写,不知道哪里还要加转义符,只是有这个想法,之前好像折腾过。。忘光光了


如果用lua取列表,菜单倒是可以直接用dir.txt来生成菜单的,用grub2脚本我还不会弄。。
回复

使用道具 举报

34#
 楼主| 发表于 2019-12-27 10:22:46 来自手机 | 只看该作者
本来就是针对iso wim 写了不同的启动菜单啊!你试下不就知道了?都写到同一个cfg里面了的。
回复

使用道具 举报

35#
发表于 2019-12-27 10:27:02 | 只看该作者
liuzhaoyzz 发表于 2019-12-27 10:22
本来就是针对iso wim 写了不同的启动菜单啊!你试下不就知道了?都写到同一个cfg里面了的。

那倒没细看,看不懂,那你稍改下就能启中文iso了,
还有就是win10下貌似是取不到ip的
回复

使用道具 举报

36#
 楼主| 发表于 2019-12-27 11:23:09 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-27 11:36 编辑

grub2启动中文iso,晚点我抽空试下。请问下strconv在哪个模块里面?
win10下获取ip地址,没问题啊?WIN7 WIN10我都试了,没问题啊?而且获取ip地址是双保险的方案,route获取不到,会自动采用ipconfig的方案。
route需要windows系统中有find和findstr命令的支持才行,你的系统没有精简吧?
ipconfig的方案只考虑了win7和win10中文版,难道你的英文版/繁体版?





回复

使用道具 举报

37#
发表于 2019-12-27 11:40:41 | 只看该作者
liuzhaoyzz 发表于 2019-12-27 11:23
grub2启动中文iso,晚点我抽空试下。请问下strconv在哪个模块里面?
win10下获取ip地址,没问题啊?WIN7 W ...

模块就叫这个的
win10 1903的
回复

使用道具 举报

38#
 楼主| 发表于 2019-12-27 11:45:27 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-27 11:56 编辑

strconv我没搜到这个模块啊?是grub2的内置命令吗?还是外置命令?我没看到。我倒是依稀记得linux里面有个strconv命令。
另外,你上面的菜单,是否还需要在前面set lang=zh_CN?我开启了set lang=zh_CN就会卡死啊?

WIN10 1903我没用过。我用过最高版本的只有LTSC2019.17763.316.
回复

使用道具 举报

39#
发表于 2019-12-27 12:00:27 | 只看该作者
liuzhaoyzz 发表于 2019-12-27 11:45
strconv我没搜到这个模块啊?是grub2的内置命令吗?还是外置命令?我没看到。我倒是依稀记得linux里面有个s ...

模块是 conv
在 command.lst 里面搜命令,就知道在哪个模块了。


回复

使用道具 举报

40#
发表于 2019-12-27 12:09:53 | 只看该作者
ip显示是“默认"

ip.png (45.94 KB, 下载次数: 304)

ip.png
回复

使用道具 举报

41#
 楼主| 发表于 2019-12-27 12:15:29 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-27 12:17 编辑
wintoflash 发表于 2019-12-27 12:00
模块是 conv
在 command.lst 里面搜命令,就知道在哪个模块了。

我加载了conv模块,用下面的菜单,webserver上面显示的传输TonPE_V3.3中文.iso成功,但是没有启动。
menuentry "/imgs/TonPE_V3.3中文.iso" --class iso {
strconv --gbk --set=file "${1}"; map --mem --type=CD (http)${file}
}
我没有set lang=zh_CN,因为只要set lang=zh_CN启动就会卡死。

WIN10 1903获取ip晚点看下。
你注释掉这几行试试看?
rem 如果系统中有route命令,优先采用方案1:
for /f "tokens=3,4" %%a in ('route print^|find "0.0.0.0          0.0.0.0"') do (  set "Gateway=%%a" & set "ip=%%b")
for /f "tokens=2" %%a in ('route print^|findstr "在链路上.*%ip%"') do (if not defined mask set "mask=%%a" )
for /f "tokens=2" %%a in ('route print^|find "在链路上    %ip%"') do (if not defined mask set "mask=%%a" )

我不清楚原因。

回复

使用道具 举报

42#
发表于 2019-12-27 13:56:47 | 只看该作者
本帖最后由 江南一根葱 于 2019-12-27 14:19 编辑


用xorboot里的光盘制作工具弄了个小的uefi镜像测试 ,可以启
应该没问题。。
应该是iso本身要支持uefi启动,不支持的可以用loopback启吧
回复

使用道具 举报

43#
 楼主| 发表于 2019-12-27 15:28:17 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-27 16:12 编辑

我上面的菜单无法启动是什么原因?你的怎么能启动呢?奇怪得很。ISO是支持UEFI启动的啊。同一个pe.iso用ipxe测试都可以。menuentry "TonPE_V3.3中文.iso" "TonPE_V3.3中文.iso" {
strconv --gbk --set=file "${1}"; map --mem --type=CD (http)/imgs/${file}
}


15:39:32 HTTPd:Client: 10.7.20.83 [GET] /imgs/TonPE_V3.3中文.iso
15:39:32 HTTPd:Server : Returning /imgs/TonPE_V3.3中文.iso
15:39:47 DHCPd:INFORM received, MAC:20-1A-06-A1-17-D0, XID:BDF85E96
15:40:01 HTTPd:DisConnect: TID=3068
15:40:02 HTTPd:Connect: 10.7.20.83, TID=2680
15:40:02 HTTPd:Client: 10.7.20.83 [GET] /imgs/TonPE_V3.3中文.iso
15:40:02 HTTPd:Server : Returning /imgs/TonPE_V3.3中文.iso
15:40:02 HTTPd:Exception: , Connection Closed Gracefully.
15:40:02 HTTPd:DisConnect: TID=2680

另外,你WIN10.1903电脑上面,cmd里面运行下route print截图。然后执行ipconfig命令截图。我想看看为什么获取不到ip?




回复

使用道具 举报

44#
发表于 2019-12-27 17:21:21 | 只看该作者
本帖最后由 江南一根葱 于 2019-12-27 17:24 编辑
liuzhaoyzz 发表于 2019-12-27 15:28
我上面的菜单无法启动是什么原因?你的怎么能启动呢?奇怪得很。ISO是支持UEFI启动的啊。同一个pe.iso用ipx ...

我有数张虚拟网卡,估计有关 这是禁用虚拟网卡后的截图,看批处理貌似是取得了"默认“作为ip了
回复

使用道具 举报

45#
 楼主| 发表于 2019-12-27 22:46:25 | 只看该作者
一楼的已更新,获取ip地址应该没问题了。
但是grub2-pxe启动带有汉字的pe.iso似乎还是不行,只支持全部是英文的pe.iso。
回复

使用道具 举报

46#
发表于 2019-12-28 22:00:55 | 只看该作者
liuzhaoyzz 发表于 2019-12-27 22:46
一楼的已更新,获取ip地址应该没问题了。
但是grub2-pxe启动带有汉字的pe.iso似乎还是不行,只支持全部是 ...

可以了,两台机上试了下确实获取正确了,
怎么不用获取管理员权限的那段批处理,一键ramos那个的,我加上了貌似是会报毒,不过
反正bootice也要报毒的,索性让它报毒报个痛快
回复

使用道具 举报

47#
 楼主| 发表于 2019-12-29 07:58:52 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-29 08:21 编辑

获取管理员权限那段代码在PE下有问题,似乎会自动退出,似乎只适用于正常的操作系统,而我写的PE安装器除了在正常系统下使用,还想要在PE下部署使用,为什么能进PE还要想部署PE?因为原来PE可能是从优盘、网络等介质启动的,我使用PE总是喜欢部署到硬盘启动,可以达到格式化C盘以后PE仍然能够从其他盘启动的效果,部署到硬盘之后这台电脑大多数情况下可以抛弃USB启动,而能在PE下部署到硬盘,就没必要重启之后在正常系统下部署到硬盘、优盘或者PXEserver,USB启动和网络启动对我来说一直都是备胎方案。为了想在PE里面运行批处理,所以我放弃了自动添加管理员运行的代码,主要是bcdedit需要管理员权限,如果不涉及到bcdedit,一般来说没必要用管理员权限。        
回复

使用道具 举报

48#
发表于 2019-12-29 11:56:38 | 只看该作者
很久以前倒也喜欢本地部署pe,我部署机房也是先把几十台客户端网络ghost成一个pe,这样即使还原c盘失败也可以直接快速进pe重来,
后来更新太快,就么有折腾了
回复

使用道具 举报

49#
 楼主| 发表于 2019-12-29 12:12:21 来自手机 | 只看该作者
你说你用UEFI-grub2-pxe启动带有中文名字的PE.ISO成功了,怎么我不成功,菜单也是按照你的菜单来的,你把关键的几个文件打包发来我试试,包括grub2.efi,grub2.cfg,要包括目录结构,zh_CN.mo,unifont.pf2等。      
回复

使用道具 举报

50#
发表于 2019-12-29 12:26:21 | 只看该作者
本帖最后由 江南一根葱 于 2019-12-29 12:29 编辑
liuzhaoyzz 发表于 2019-12-29 12:12
你说你用UEFI-grub2-pxe启动带有中文名字的PE.ISO成功了,怎么我不成功,菜单也是按照你的菜单来的,你把 ...

这个我怀疑是打包的iso格式问题

你用xorboot的光盘制作工具打包个非udf的iso看看是不是中文
能启
我那个包是grubfm做的,就之前分享的那个包,是用的lua脚本,批处理只生成gbk的dir.txt,然后转成utf8的菜单
回复

使用道具 举报

51#
 楼主| 发表于 2019-12-29 12:32:57 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-29 16:31 编辑

如果是ISO制作模式的问题,就不好办了,因为大家都是用通常的办法制作的PE.ISO啊,不能说别人发布的PE.ISO都去打包一遍。你的包里面倒底加载了set lang=zh_CN这一句没有?我只要加载这一句就卡死,从本地加载这一句就没事,这个是关键点。
你分享的很多方案,文件很多,方案也很多,我没搞清楚怎么用呢,我看很多有的是是在tinycore linux上面建立服务器的?还没看懂你的方案里面pxe启动流程。不知道该加载哪个文件作为启动文件,不知道webserver的根目录怎么设置,这些对于pxe启动很关键,设置不对就启动不了。
回复

使用道具 举报

52#
发表于 2019-12-29 13:46:59 | 只看该作者
本帖最后由 江南一根葱 于 2019-12-29 13:49 编辑
liuzhaoyzz 发表于 2019-12-29 12:32
如果是ISO制作模式的问题,就不好办了,因为大家都是用通常的办法制作的PE.ISO啊,不能说别人发布的PE.ISO ...

之前的包efi下就两个方案,指这个http://bbs.wuyou.net/forum.php?mod=viewthread&tid=417622&extra=你可以试下这个中文iso能不能启我是用vmware测试的,取文件速度巨慢,
原理就启动文件A.ipxeloaderx64.efi,调用的是app/config/tinycore.ipxe 可以改
它会启动grub2目录的grubfmx64.efi根目录就tftpboot

或者直接网启bootmgfw.efi(其实efi下用过来这个最快,一般人我不告诉他)

回复

使用道具 举报

53#
 楼主| 发表于 2019-12-29 13:59:19 来自手机 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-29 16:30 编辑

我现在在外面,手机回复,晚点回去看下。bootmghfw.efi用作网启,菜单不好搞,bcd里面指向的wim文件名字,对于bios-pxe可以随意更改,对于uefi-pxe似乎只能是boot.wim吧?修改菜单需要用bcdedit,稍微麻烦,不如ipxe和cfg文本这种方便。启动速度上来说没有什么明显的优势啊,即使改了bcd里面那两个参数也差不多,大家都是跑满网速,差别不大吧。
回复

使用道具 举报

54#
发表于 2019-12-29 14:27:22 | 只看该作者
本帖最后由 hkkitlee 于 2019-12-29 14:55 编辑
liuzhaoyzz 发表于 2019-12-29 12:32
如果是ISO制作模式的问题,就不好办了,因为大家都是用通常的办法制作的PE.ISO啊,不能说别人发布的PE.ISO ...

查看過grub2手冊,粗略估計:

中文字以‘模組’存放在$locale_dir當中,所以當使用$lang時$locale_dir為必要「變量」。

本地啟動是以磁盤作為根,根下存放模組及其他文件,有需要時加載。
問題應該是pxe啟動:當啟動時「只能」從bootserver加載單一文件,所以其他模組亦忽略了。

除非將「所有」模組、功能編譯成單一文件;但grub2好像不支持。
亦可能因為這樣,所以「你編譯時才報錯」(18樓)。


看看幫不幫到忙?編譯成網絡盤提取伺服器上其他文件:https://www.ibm.com/developerworks/community/blogs/5144904d-5d75-45ed-9d2b-cf1754ee936a/entry/uefi-grub2?lang=en

6. 创建PXE引导
grub2支持EFI环境通过PXE引导操作系统。

需要在PXE server端创建EFI启动需要的目录结构。 利用grub2-mknetdir命令,此命令将会产生一个boot/grub2/x86_64-efi目录,此目录为PXE启动必备目录,将此目录拷贝到tftp server的root目录下。其中efinet、tftp为必备模块,用以支持grub2的tftp传输。

# grub2-mknetdir --modules="fat part_msdos search normal linux font all_video reboot configfile efinet ntfs tftp echo gfxterm" --net-directory=.
image

1) 将grub2-mknetdir生成的core.efi重命名为pxelinux.0,部分PXE引导过程中只识别此文件名。

2) 此版本grub2在PXE引导过程中不支持手动grub命令提示符,即通过grub命令提示符不能找到任何可启动设备。

3)解决方法为将合适的grub.cfg拷贝到服务器对应目录下,grub2能够自动识别启动设备并下载相应启动文件。一般情况下将grub.cfg放置在同pxelinux.0一个目录下。

简易grub.cfg如下:

insmod all_video
set gfxmode=800x600
  set gfxpayload=keep
  set timeout=3
  insmod gfxterm
  terminal_output gfxterm
  menuentry ' kernel EFI-BOOT-grub'{
    linux   /vmlinuz*** root=/dev/ram0 rw
    initrd  /initramfs***
  }

点评

set lang=zh_CN这一句调用之后,tinypxeserver确实看到文件有加载进程,然后文件加载到100%之后,继续加载到600%多,就出错了,这个zh_CN.mo文件应该没问题,因为本地调用都可以,只是pxe调用失败,感觉没有pxe启动  详情 回复 发表于 2019-12-29 16:18
https://github.com/a1ive/grub2-filemanager 这个grubfm就是所有东西编译成单一文件的 还能塞整个pe进去做成单一文件,  详情 回复 发表于 2019-12-29 15:49
回复

使用道具 举报

55#
发表于 2019-12-29 15:47:41 | 只看该作者
liuzhaoyzz 发表于 2019-12-29 13:59
我现在在外面,手机回复,晚点回去看下。bootmghfw.efi用作网启,菜单不好搞,bcd里面指向的wim文件名字, ...

efi下也可以改名的
efi下ipxe启wim改名对应的是 initrd -n boot.wim http://真实.wim
千兆貌似感官上bootmgfw.efi跑满速度比较快,且ipxe的话貌似会要双倍内存
回复

使用道具 举报

56#
发表于 2019-12-29 15:49:14 | 只看该作者
hkkitlee 发表于 2019-12-29 14:27
查看過grub2手冊,粗略估計:

中文字以‘模組’存放在$locale_dir當中,所以當使用$lang時$locale_dir ...

https://github.com/a1ive/grub2-filemanager
这个grubfm就是所有东西编译成单一文件的
还能塞整个pe进去做成单一文件,
回复

使用道具 举报

57#
 楼主| 发表于 2019-12-29 15:53:55 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-29 16:05 编辑

用你的模板试了下,用tinypxeserver加载\tftpboot\A.ipxeloaderx64.efi作为启动文件,菜单选择app\config\tinycore.ipxe,运行了下tftpboot\@1生成文件列表按字母排列.bat,用ipxe转grub2启动,选择\tftpboot\WePE_64_V2.0中文.iso这个文件,加载结束后,启动了WePE_64_V2.0中文.iso.

GPT_test-2019-12-29-15-52-40.png (275.95 KB, 下载次数: 313)

GPT_test-2019-12-29-15-52-40.png

GPT_test-2019-12-29-15-52-47.png (283.66 KB, 下载次数: 323)

GPT_test-2019-12-29-15-52-47.png

GPT_test-2019-12-29-15-52-19.png (288.73 KB, 下载次数: 309)

GPT_test-2019-12-29-15-52-19.png

GPT_test-2019-12-29-15-52-16.png (266.6 KB, 下载次数: 328)

GPT_test-2019-12-29-15-52-16.png
回复

使用道具 举报

58#
发表于 2019-12-29 16:03:22 | 只看该作者
你启的速度怎么这么快,我两台win10用vmware都是1M/s。。。菜单不用手动选择的,是定死的
回复

使用道具 举报

59#
 楼主| 发表于 2019-12-29 16:12:15 | 只看该作者
只是百兆网测试的,10MB/S,这也能较快?
:grub2
isset ${proxydhcp/dhcp-server} && imgexec http://${proxydhcp/dhcp-server}/grub2/grubfmx64.efi proxydhcp=${proxydhcp/dhcp-server} ||
imgexec http://${dhcp-server}/grub2/grubfmx64.efi proxydhcp=${dhcp-server}
goto retryip
你的模块启动流程是ipxe→grub2→grubfmx64.efi,然后调用的是哪个菜单?文件太多了,没有个说明,看不懂
回复

使用道具 举报

60#
 楼主| 发表于 2019-12-29 16:18:08 | 只看该作者
hkkitlee 发表于 2019-12-29 14:27
查看過grub2手冊,粗略估計:

中文字以‘模組’存放在$locale_dir當中,所以當使用$lang時$locale_dir ...

set lang=zh_CN这一句调用之后,tinypxeserver确实看到文件有加载进程,然后文件加载到100%之后,继续加载到600%多,就出错了,这个zh_CN.mo文件应该没问题,因为本地调用都可以,只是pxe调用失败,感觉没有pxe启动的时候对于中文语言文件没有做特殊处理,所以失败。

你给的帖子里面,grub2-mknetdir方案,我之前也是过的,最终是一样的结果。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-22 09:56

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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