无忧启动论坛

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

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

    [复制链接]
61#
 楼主| 发表于 2019-12-29 16:27:08 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-29 16:47 编辑
江南一根葱 发表于 2019-12-29 15:47
efi下也可以改名的
efi下ipxe启wim改名对应的是 initrd -n boot.wim http://真实.wim
千兆貌似感官上bo ...

你说的是uefi-ipxe启动方案,我说的是UEFI-grub2-wimboot-pxe方案来启动wim,wimboot启动wim方案,没有改名的办法吧,你说的 initrd -n boot.wim http://真实.wim是ipxe的语句啊?我试了你说的这个办法,改名字确实有效,感谢!!!

UEFI-grub2-wimboot-pxe方案来启动wim,wimboot的语句大概是这样子的:

menuentry "/imgs/SXWIN10PEX64_17763_NET20191205/boot.wim" "/imgs/SXWIN10PEX64_17763_NET20191205/boot.wim" {
wimboot @:bootmgfw.efi:(http)/ms/EFI/boot/bootx64.efi        @:bcd:(http)/grub2/wimboot/bcd @:boot.sdi:(http)/boot.sdi        @:boot.wim:(http)/imgs/SXWIN10PEX64_17763_NET20191205/boot.wim
}

前面写了@:boot.wim也不管用,文件名字必须为boot.wim,这是bcd里面指定的。(要么就去改BCD,这就太费事儿了!那么多wim,每个去改,烦都烦死了!)
BIOS-PXE-wimboot就没有问题,wim文件名字可以随便改。(应该是vfat盘里自动更改指向了。)
我猜测可能的原因是BIOS下bcdedit修改vfat盘里面的BCD很容易,UEFI下修改vfat盘里的BCD估计有问题,所以不能指向正确的wim名字。


点评

可以啊 @:boot.wim:(http)/imgs/SXWIN10PEX64_17763_NET20191205/真实名字.wim  详情 回复 发表于 2019-12-29 16:31
回复

使用道具 举报

62#
发表于 2019-12-29 16:31:34 | 只看该作者
本帖最后由 江南一根葱 于 2019-12-29 16:34 编辑
liuzhaoyzz 发表于 2019-12-29 16:27
你说的是uefi-ipxe启动方案,我说的是UEFI-grub2-wimboot-pxe方案来启动wim,wimboot启动wim方案,没有改 ...

可以啊
@:boot.wim:(http)/imgs/SXWIN10PEX64_17763_NET20191205/真实名字.wim相关文件你直接用wimboot.gz,loopback出来就行了。
wimboot.gz (1.09 MB, 下载次数: 15)
回复

使用道具 举报

63#
发表于 2019-12-29 16:35:38 | 只看该作者
本帖最后由 江南一根葱 于 2019-12-29 16:37 编辑
liuzhaoyzz 发表于 2019-12-29 16:12
只是百兆网测试的,10MB/S,这也能较快?
:grub2
isset ${proxydhcp/dhcp-server} && imgexec http://${p ...

ipxe→grubfmx64.efi,菜单是grubfmx64.efi内置的,本来也可以不用tinycore.ipxe,想到还要用下ipxe菜单
efi下就这三个文件
用你的模板的话,直接启grubfmx64.efi也可以,ipxe仅仅是为了支持proxydhcp

点评

内置菜单是什么样子的?我想要搞清楚出错的原因,只有看相关菜单调用才知道。 UEFI-grub2-pxe你倒底调用了set lang=zh_CN没有?  详情 回复 发表于 2019-12-29 16:49
回复

使用道具 举报

64#
 楼主| 发表于 2019-12-29 16:40:42 | 只看该作者
wimboot.gz怎么搭配loopback使用?知识点太多了!

点评

loopback loop /wimboot.gz 就生成(loop)这个“设备” 加 -m是直接载入内存, 就能 wimboot @:bootmgfw.efi:(loop)/bootmgfw.efi 就能减少文件夹文件了 这个是我取dir.txt的lua文件 要支持lua还得加入lua.m  详情 回复 发表于 2019-12-29 16:48
回复

使用道具 举报

65#
发表于 2019-12-29 16:48:27 | 只看该作者
liuzhaoyzz 发表于 2019-12-29 16:40
wimboot.gz怎么搭配loopback使用?知识点太多了!

loopback loop /wimboot.gz   就生成(loop)这个“设备”
加 -m是直接载入内存,
就能 wimboot @:bootmgfw.efi:(loop)/bootmgfw.efi
就能减少文件夹文件了
这个是我取dir.txt的lua文件
congnet.7z (755 Bytes, 下载次数: 6)
要支持lua还得加入lua.mod模块增肥,lua $prefix/congnet.lua
就能取网络上的dir.txt来生成网启菜单了。
回复

使用道具 举报

66#
 楼主| 发表于 2019-12-29 16:49:46 | 只看该作者
江南一根葱 发表于 2019-12-29 16:35
ipxe→grubfmx64.efi,菜单是grubfmx64.efi内置的,本来也可以不用tinycore.ipxe,想到还要用下ipxe菜单
...

内置菜单是什么样子的?我想要搞清楚出错的原因,只有看相关菜单调用才知道。
UEFI-grub2-pxe你倒底调用了set lang=zh_CN没有?

点评

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=418147&page=4#pid3938071 我用的是grubfm纯正原包加“自"己写的congnet.lua.再瞎改一通。 你可以参考#39的grub2定制包做成网启包,把字体之类的打包进去 就  详情 回复 发表于 2019-12-29 16:56
回复

使用道具 举报

67#
发表于 2019-12-29 16:56:18 | 只看该作者
本帖最后由 江南一根葱 于 2019-12-29 17:03 编辑
liuzhaoyzz 发表于 2019-12-29 16:49
内置菜单是什么样子的?我想要搞清楚出错的原因,只有看相关菜单调用才知道。
UEFI-grub2-pxe你倒底调用 ...

http://bbs.wuyou.net/forum.php?m ... 7&page=4#pid3938071
我用的是grubfm纯正原包加“自"己写的congnet.lua.再瞎改一通。
你可以参考#39的grub2定制包做成网启包,把字体之类的打包进去
懒得折腾的话你生成一个软盘,比如ramdisk.img,把字体之类放进去,然后loopback -m ramdisk /ramdisk.img
这样就能本地使用(ramdisk)了,取字体就不会请求一连串tftp,http了
不用纠结原因,估计是文件连续性之类的诡异问题,反正现在有ramdisk方式,把所有文件弄到”本地内存“取是最佳的方法,legacybios下的grub2我也是这样做的,用的是g4d生成ramdisk盘,ipxe->g4d->grubfm,更变态,不过挺好用
回复

使用道具 举报

68#
 楼主| 发表于 2019-12-29 17:46:53 | 只看该作者
看了你的解释,为了加载中文,迫不得已绕了很多弯弯啊!
大概的意思,就是因为set lang=zh_CN不支持pxe,所以建个“本地”的内存盘,然后:
set locale_dir=(ramdisk)/grub2/locale
set lang=zh_CN
这里的山路十八弯啊!
@wintoflash能看看从代码层级做出一些改进吗?
回复

使用道具 举报

69#
发表于 2019-12-29 18:46:22 | 只看该作者
liuzhaoyzz 发表于 2019-12-29 17:46
看了你的解释,为了加载中文,迫不得已绕了很多弯弯啊!
大概的意思,就是因为set lang=zh_CN不支持pxe, ...

其实是tinypxe比较“烂”,我传统bios机房网启实战中从不用tinypxe。。。
ramdisk方式挺好啊,可以把一些不需要常更改的脚本弄进去,通过参数来修改就行了。
回复

使用道具 举报

70#
发表于 2019-12-29 18:55:58 | 只看该作者
本帖最后由 wintoflash 于 2019-12-29 18:58 编辑
liuzhaoyzz 发表于 2019-12-29 17:46
看了你的解释,为了加载中文,迫不得已绕了很多弯弯啊!
大概的意思,就是因为set lang=zh_CN不支持pxe, ...
@wintoflash能看看从代码层级做出一些改进吗?

对于网络方面,我只能说,还是另请高明吧。
网络的文件系统在grub2下不好用,文件随机读取容易出问题。
内存盘多好,稳定,快速,而且支持安全写入。

至于中文路径,估计是 gb2312/gbk/gb18030 之类的问题,它们之间虽然说是兼容但中间有问题。



回复

使用道具 举报

71#
 楼主| 发表于 2019-12-29 19:14:16 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-29 20:22 编辑
wintoflash 发表于 2019-12-29 18:55
对于网络方面,我只能说,还是另请高明吧。
网络的文件系统在grub2下不好用,文件随机读取容易出问题 ...

1、绕路解决也是很好的解决办法,我抽空摸索下loopback内存盘的做法。
2、另外,我准备给grub2官方bug-grub@gnu.org发一封EMAIL,把我们这个帖子里面讨论的关于UEFI-grub2-PXE启动关于中文字体的问题,向官方反馈看看,看看他们怎么说。虽然wintoflash修改的grub2是官方的分支,但是这个问题可能官方版本的grub2也一样存在这个问题。
3、还有个绕路的解决办法是强制修改PE文件名字为英文名字,一个PE.ISO,搞什么中文吗!
回复

使用道具 举报

72#
发表于 2019-12-29 19:18:41 | 只看该作者
liuzhaoyzz 发表于 2019-12-29 19:14
1、绕路解决也是很好的解决办法,我抽空摸索下loopback内存盘的做法。
2、另外,我准备给grub2官方发一 ...

用官方版的测试一下有没有这个问题。这个不是字体的问题,是gettext/locale方面的问题。

还有个绕路的解决办法是强制修改PE文件名字为英文名字,一个PE.ISO,搞什么中文吗!

这个编码问题我后面可能会看一下。
不过这个确实属于软件艹蛋,不用utf-8,那繁体中文还要big5转码,日文还要jit转码......


回复

使用道具 举报

73#
 楼主| 发表于 2019-12-29 19:36:55 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-29 19:39 编辑
wintoflash 发表于 2019-12-29 19:18
用官方版的测试一下有没有这个问题。这个不是字体的问题,是gettext/locale方面的问题。

晚点我用官方的grub2测试下看看,给他们反馈也尽可能用他们官方的版本。

我曾经修改了“游兰海”编写的文件编码转换,可以自动判断文件编码,并转换为指定的文件格式,例如gbk,utf-8之类的,但这是文件编码转换,没有涉及到文件名字这样子的字符串编码转换的事情,但是算法应该差不多的。字符串编码转换,github上面有很多用c语言写的范例。文件编码格式转换器encodeconv2.0(命令行工具) - 脚本讨论区 - 无忧启动论坛 - Powered by Discuz! http://wuyou.net/forum.php?mod=v ... 1&extra=#pid3845805

这个字体问题,不用着急,一年、两年、三年之后都可以,因为现在有绕路解决的办法,内存盘的办法、暴力强制修改为英文名字就是其一,虽然麻烦点,但也是一条路。
回复

使用道具 举报

74#
 楼主| 发表于 2019-12-29 20:04:34 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-29 20:06 编辑

刚才从官网https://ftp.gnu.org/gnu/grub/下载了grub-2.04-for-windows.zip
定制命令:用于UEFI-grub2-pxe启动
@echo off
grub-mkimage -d x86_64-efi -p /grub2 -c bootconfigpxe.cfg -o grub2x64pxe.efi -O x86_64-efi blocklist boot chain configfile disk echo efi_gop efi_uga exfat extcmd fat halt iso9660 ls minicmd normal ntfs part_gpt part_msdos progress reboot search terminal udf font gfxterm linux linux16 loopback regexp probe multiboot multiboot2 test help ext2 net tftp http efinet cat cpio

编码内置菜单bootconfigpxe.cfg(utf-8无BOM)#用于pxe启动的grub2内置菜单:
if search --no-floppy -f --set=root /boot/grub2/grub.cfg; then
configfile (tftp)/grub2/grub2pxe.cfg
fi


grub2x64pxe.efi放在/boot/grub2下面
用tinypxeserver启动grub2x64pxe.efi,官方grub-2.04-for-windows也是出错:





unicode.pf2通过pxe传输速度,显示的是100.87TiB/s


文件传输显示:过早的文件结束(Premature file end)


启动菜单F:\boot\grub2\grub2pxe.cfg如下:
set default=0
set fallback=1
set timeout=5
set pager=20


#设定菜单字体及背景颜色
set menu_color_normal=white/black
set menu_color_highlight=white/blue


#中文字体似乎和pxe启动有冲突?因此PE.ISO里面不能包含中文。
if loadfont /grub2/fonts/unicode.pf2;then
set locale_dir=/grub2/locale
set lang=zh_CN
#set gfxmode=auto,800x600,1024x768
terminal_output gfxterm
fi


net_bootp
set net_default_server=192.168.21.103
set root='(http)'


menuentry "WePE_64_V2.0中文.iso" "WePE_64_V2.0中文.iso" {
map --mem --type=CD (http)/imgs/WePE_64_V2.0中文.iso
}


回复

使用道具 举报

75#
发表于 2019-12-29 21:00:18 | 只看该作者
不用tinypxe呢,
传统bios下好像我散装能启的,
回复

使用道具 举报

76#
 楼主| 发表于 2019-12-29 21:49:08 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-29 21:57 编辑

定制grub2x64pxe.efi的命令:(加上conv模块,因为命令strconv在这个模块
@echo off
grub-mkimage -d x86_64-efi -p /grub2 -c bootconfigpxe.cfg -o grub2x64pxe.efi -O x86_64-efi blocklist boot chain configfile disk echo efi_gop efi_uga efiload exfat extcmd fat halt iso9660 ls minicmd normal ntfs part_gpt part_msdos progress reboot search terminal udf map font gfxterm linux linux16 vhd loopback regexp probe wimboot multiboot multiboot2 test help ext2 net tftp http efinet efi_netfs cat cpio conv

按照葱大的办法,建立个img,把unicode.pf2和zh_CN.mo(简体中文),zh_TW.mo(繁体中文)放进去。

loopback -m ramdisk (tfpt)/grub2/unicode.img
loadfont (ramdisk)/grub2/fonts/unicode.pf2
set locale_dir=(ramdisk)/grub2/locale
set lang=zh_CN
terminal_output gfxterm

menuentry "SXWIN10PEX64_17763_NET20191205中文.iso" "SXWIN10PEX64_17763_NET20191205中文.iso" {
strconv --gbk --set=file "(http)/imgs/SXWIN10PEX64_17763_NET20191205中文.iso";map --mem --type=CD ${file}
}


UEFI-grub2-pxe启动带有中文名字的PE.ISO成功。
有些批处理需要修改和整理下,放到unicode.img之后,文件有重复,过几天我放上来。

你说不用tinypxeserver,那用什么?我试过用EasyWebSvr也是乱码,必须要先strconv --gbk才行。你说的tinypxeserver不好用,主要是哪一方面不行?

另外一个问题,这个unicode.pf2大概2.3MB,能精简吗?中国的常用汉字大概6000个,grub4dos的UNIFONT.HEX只有603KB,为啥grub2的这么大?大了我看着不爽,分享起来占地方。



unicode.rar

770.23 KB, 下载次数: 4, 下载积分: 无忧币 -2

回复

使用道具 举报

77#
发表于 2019-12-29 21:54:33 | 只看该作者
本帖最后由 江南一根葱 于 2019-12-29 21:59 编辑
liuzhaoyzz 发表于 2019-12-29 21:49
定制grub2x64pxe.efi的命令:(加上conv模块,因为命令strconv在这个模块)
@echo off
grub-mkimage -d x ...

dhcp不行,多台机启动会崩溃,平常试着玩倒是没事的。。
现在我用linux的dnsmasq  好像直接架个虚拟机也很稳,img可以放很多东西的,用7z压缩成gz就很小很方便了,
传统bios下,grub4dos要用到的wimboot文件也可以一起放进去,然后bios下直接map --mem成软盘之类的,就能调用了

这样文件夹清爽很多
回复

使用道具 举报

78#
 楼主| 发表于 2019-12-30 07:33:38 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-30 07:56 编辑

我用7z压缩为gz格式,无论是标准压缩,还是极限压缩,似乎没有加载啊?
7z格式也不行。gz格式直接用,需要什么特别的解压缩模块吗?

loopback -m ramdisk (tftp)/grub2/unicode.gz
loadfont (ramdisk)/grub2/fonts/unicode.pf2
set locale_dir=(ramdisk)/grub2/locale
set lang=zh_CN
terminal_output gfxterm

另外,UEFI-grub2-pxe用map --mem方式启动pe.iso,在vmware虚拟机里面总是跑不满网速,但是在实体机测试,能够跑满网速。
UEFI-ipxe用memdisk方式启动pe.iso,在vmware虚拟机里面能够跑满网速。

回复

使用道具 举报

79#
发表于 2019-12-30 08:21:14 | 只看该作者
liuzhaoyzz 发表于 2019-12-30 07:33
我用7z压缩为gz格式,无论是标准压缩,还是极限压缩,似乎没有加载啊?
7z格式也不行。gz格式直接用,需要 ...

支持gz需要gzio模块
xz需要xzio模块
回复

使用道具 举报

80#
发表于 2019-12-30 08:21:56 | 只看该作者
liuzhaoyzz 发表于 2019-12-30 07:33
我用7z压缩为gz格式,无论是标准压缩,还是极限压缩,似乎没有加载啊?
7z格式也不行。gz格式直接用,需要 ...

是把ramdisk.img压缩成gz,以前ramdisk.mod的时候我这么弄的,按理loopback -m应该也支持
回复

使用道具 举报

81#
 楼主| 发表于 2019-12-30 10:38:54 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-30 10:43 编辑
wintoflash 发表于 2019-12-30 08:21
支持gz需要gzio模块
xz需要xzio模块

添加了gzio模块,gz果然可以了!
添加了xzio模块,xz也行,xz比gz压缩比更高!
loopback -m支持gz的。
        


回复

使用道具 举报

82#
发表于 2019-12-30 10:54:00 | 只看该作者
另外一个问题,这个unicode.pf2大概2.3MB,能精简吗?中国的常用汉字大概6000个,grub4dos的UNIFONT.HEX只有603KB,为啥grub2的这么大?大了我看着不爽,分享起来占地方。

unicode.pf2 各国语言字体都有,用 xz 压缩一下也就 740KB 左右。
想自己生成字体,要到 Linux 下用 grub-mkfont 命令。
回复

使用道具 举报

83#
 楼主| 发表于 2019-12-30 11:08:09 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-30 11:10 编辑

62楼葱分享的wimboot.gz是怎么来的?怎么制作的?跟官方的不同吗?还是你修改来的?
为什么可以在UEFI启动的时候修改wim文件名字?

我没有linux环境,你能在Linux下用 grub-mkfont 命令微软雅黑制作个字体吗?我好奇微软雅黑
grub-mkfont之后有多大。

msyh.rar

986.38 KB, 下载次数: 7, 下载积分: 无忧币 -2

回复

使用道具 举报

84#
发表于 2019-12-30 11:26:10 | 只看该作者
liuzhaoyzz 发表于 2019-12-30 11:08
62楼葱分享的wimboot.gz是怎么来的?怎么制作的?跟官方的不同吗?还是你修改来的?
为什么可以在UEFI启动 ...

msyh.pf2.tar.gz (85.24 KB, 下载次数: 5)
效果惨不忍睹



回复

使用道具 举报

85#
发表于 2019-12-30 11:33:17 | 只看该作者

配合 dosvga 字体,还行,但是还是缺字符


dosvga.pf2.tar.gz (3.5 KB, 下载次数: 4)
注意要先加载 巨硬雅黑字体,再加载 dosvga 字体,用 dosvga 字体的英文字符覆盖掉微软雅黑的 sb 全角字符
loadfont msyh
loadfont dosvga


回复

使用道具 举报

86#
 楼主| 发表于 2019-12-30 11:39:06 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-30 16:17 编辑

看了你上面的截图,感觉到true type字体不行啊!可能是字体精简了的原因?我看还是算了,还是老老实实地用unifont.pf2好了!

不过看压缩比挺吃惊的,1.6MB的微软雅黑字体,压缩之后只有85.2KB?有问题吧?
Linux下用 grub-mkfont 命令对于原生字体文件是不是有什么要求啊?

[注意]你最好使用等宽中文字体(推荐使用文泉驿等宽正黑或者等宽微米黑),否则可能会让GRUB2的字体间距过大,十分难看。




不行啊?我这边试了你发的字体,加载不出来啊,还需要什么模块吗?我加了tar gzio了。
哦,名字搞错了,出来了,真的是惨不忍睹的字体。


测试GPT-2019-12-30-11-56-42.png (10.82 KB, 下载次数: 342)

测试GPT-2019-12-30-11-56-42.png
回复

使用道具 举报

87#
 楼主| 发表于 2019-12-30 13:55:44 | 只看该作者
本帖最后由 liuzhaoyzz 于 2019-12-31 09:36 编辑

问下大家,grub2有没有类似grub4dos的内置菜单那种pxe detect的命令,作用是检测是否存在pxeserver,如果存在就尝试从pxeserver启动,如果不存在再从本地grldr启动。我想要实现的是如果grub2从pxeserver引导失败,自动加载本地的/boot/grub2/grub.cfg配置菜单。定制的办法,似乎不行。
#用于pxe启动的grub2内置菜单:
if search --no-floppy -f --set=root /boot/grub2/grub.cfg; then
configfile (tftp)/grub2/grub2pxe.cfg
fi


提示Unknown command "fi",if then fi在哪个模块里面的?

回复

使用道具 举报

88#
发表于 2019-12-30 14:02:31 | 只看该作者
liuzhaoyzz 发表于 2019-12-30 13:55
问下大家,grub2有没有类似grub4dos的内置菜单那种pxe detect的命令,作用是检测是否存在pxeserver,如果存 ...

用 grub-mkimage -c 参数内嵌的启动脚本不支持复杂语句。
有需要,内存盘里面搞。
回复

使用道具 举报

89#
 楼主| 发表于 2019-12-30 20:33:52 | 只看该作者
内置菜单这样似乎可以:
F:\boot\grub2\bootconfig.cfg
#用于pxe和本地启动的grub2内置菜单2:
#首先尝试加载tftp服务器上面的grub2pxe.cfg,如果不存在,尝试搜索本地/boot/grub2/grub.cfg配置文件并加载。
configfile (tftp)/grub2/grub2pxe.cfg
search --no-floppy -f --set=root /boot/grub2/grub.cfg
configfile /boot/grub2/grub.cfg

回复

使用道具 举报

90#
 楼主| 发表于 2019-12-30 22:45:39 | 只看该作者
UEFI-grub2-PXE-wimboot启动的菜单,前几天还可以,怎么现在突然不行了,郁闷啊!用的是2.05.
menuentry "/imgs/boot.wim" "/imgs/boot.wim" {
wimboot @:bootmgfw.efi:(http)/ms/EFI/boot/bootx64.efi        @:bcd:(http)/grub2/bcd @:boot.sdi:(http)/boot.sdi        @:boot.wim:(http)/imgs/boot.wim
}
bootmgfw.efi用win7 10的都不行。咋搞的呢

GPT_test-2019-12-30-22-45-21.png (24.76 KB, 下载次数: 339)

GPT_test-2019-12-30-22-45-21.png
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 05:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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