dnsmasq设置bios和uefi双启动多引导菜单(完美)
本帖最后由 星体投射 于 2019-10-11 07:48 编辑按F8手动选菜单,不按自动加载第一项,并实现自动ipxe加载菜单(网启目录下放ipxemenu.txt),ipxe可以直接用官方的文件,无需编译内置菜单
dnsmasq的UEFI网启非常古怪,反复捉摸网上的各种别人写的菜单,最终总结只能这么写
小技巧:openwrt 路由器上一般都是u盘和sd卡上放网启目录,可以把该目录软链接到/www下就实现了http服务,方便用ipxe的http启动
ln -s /mnt/sda1/pxeboot /www/pxeboot
dnsmasq版本2.76以上
dnsmasq.conf配置
enable-tftp
tftp-lowercase
dhcp-no-override
tftp-root=/mnt/sda1/pxeboot
dhcp-match=set:iPXE,175
dhcp-vendorclass=set:flag,PXEClient:Arch:00000
dhcp-vendorclass=set:flag,PXEClient:Arch:00006
dhcp-vendorclass=set:flag,PXEClient:Arch:00007
dhcp-vendorclass=set:flag,PXEClient:Arch:00009
tag-if=set:load,tag:!iPXE,tag:flag
pxe-prompt="Press F8 or Enter key for PXE menu.", 5
#BIOS MENU
pxe-service=tag:load,X86PC, "BIOS ipxe undionly", undionly.kpxe
pxe-service=tag:load,X86PC, "BIOS ipxe.pxe", ipxe.pxe
pxe-service=tag:load,X86PC, "BIOS Microsoft PXE", pxeboot.n12
pxe-service=tag:load,X86PC, "boot from local", 0
#UEFI MENU
pxe-service=tag:load,IA32_EFI, "Microsoft UEFI (IA32_EFI)", bootia32.efi
pxe-service=tag:load,X86-64_EFI, "Microsoft UEFI (X86-64_EFI)", bootx64.efi
pxe-service=tag:load,BC_EFI, "Microsoft UEFI(BC-EFI)", bootx64.efi
pxe-service=tag:load,6, "iPXE snponly UEFI32(6)", snponly32.efi
pxe-service=tag:load,7, "iPXE snponly UEFI(7)", snponly.efi
pxe-service=tag:load,9, "iPXE snponly UEFI(9)", snponly.efi
pxe-service=tag:load,06,"iPXE UEFI32(06)", ipxe32.efi
pxe-service=tag:load,07,"iPXE UEFI(07)", ipxe.efi
pxe-service=tag:load,09,"iPXE UEFI(09)", ipxe.efi
dhcp-boot=tag:iPXE,ipxemenu.txt
bios加菜单很简单
uefi加菜单方法:
比如添加grub2的64位efi,如下多加个0
pxe-service=tag:load,007,"GRUB2 UEFI(007)", grub2.efi
pxe-service=tag:load,009,"GRUB2 UEFI(009)", grub2.efi 前来学习 感谢大神 这个我琢磨半天没搞出来, 谢谢分享 正在研究,不知道文件目录要怎么放
这下子不管是新电脑还是老电脑都可以方便启动了,太感谢了 这下子不管是新电脑还是老电脑都可以方便启动了,太感谢了 http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=415206&pid=3818975&fromuid=678562
我摸索的不用tag,感覺就是有多種寫法頗混亂
pxe-service=X86PC, "Install Legacy BIOS", undionly.kpxe
pxe-service=IA32_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=X86-64_EFI, "Boot X86-64", uefi/ipxe.efi
本帖最后由 chenall 于 2019-10-11 16:15 编辑
我目前使用的配置.(后面的192.168.103.15是因为我DHCP和TFTP服务器是分开的,同一台可以不用)
使用VMWARE测试 BIOS /EFI32/EFI64都可以正常启动,实机测试BIOS和EFI64都可以,EFI32的机器没有找到.
dhcp-match=set:x86pc,option:client-arch,0
dhcp-match=set:IA32_EFI,option:client-arch,6
dhcp-match=set:x86_64-uefi,option:client-arch,7
dhcp-match=set:x86_64-uefi,option:client-arch,9
dhcp-match=set:ipxe,77,"iPXE"
dhcp-boot=tag:x86pc,ipxe/undionly.kpxe,,192.168.103.15
dhcp-boot=tag:x86_64-uefi,ipxe/snponly64.efi,,192.168.103.15
dhcp-boot=tag:IA32_EFI,ipxe/snponly32.efi,,192.168.103.15
dhcp-boot=tag:ipxe,boot.ipxe,,192.168.103.15
@hkkitlee 这种方式我也有试过,感觉兼容性不好,不知是我配置有问题还是其它,只有BIOS可以正常启动.EFI不行. chenall 发表于 2019-10-11 14:39
我目前使用的配置.(后面的192.168.103.15是因为我DHCP和TFTP服务器是分开的,同一台可以不用)
使用VMWARE ...
他写的EFI根本不会引导,EFI想要出菜单,只能按我的方法写
必须至少写两项才行,X86-64_EFI和7,单独写其中一个都不会引导,非常神奇
chenall 发表于 2019-10-11 14:39
我目前使用的配置.(后面的192.168.103.15是因为我DHCP和TFTP服务器是分开的,同一台可以不用)
使用VMWARE ...
pxe-service=X86PC, "Install Legacy BIOS", undionly.kpxe
pxe-service=IA32_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe.efi
pxe-service=X86-64_EFI, "Boot X86-64", uefi/ipxe.efi
他这个可以的,不过我是linux上用的dnsmasq,估计差不多的吧。
只不过显示的是ipxe.efi,但实际上获取的文件又是ipxe.efi.0,很诡异,我也是折腾了n多天,最后查弄了log才研究出来的
不过反正有ln -s 这个东西我也折腾了好多天,最后是开启log,开启webserver
然后从http访问这个log,实时观测客户端是怎么取文件,再判断哪步出了错
本帖最后由 hkkitlee 于 2019-10-11 19:22 编辑
其實寫法我不只一個,我貼中加了#號的就是在ddwrt路由器用的,當搬到x86 Centos7就啟動不了。
話說為何那般肯定我寫法啟動不了呢?
兩台x86-efi,兩台bios及kvm bios/efi已經實測啟動過了
始終不同架構的實體機不多,不過理論上回報arch是一樣的
x86-64用的是dnsmasq-2.76-9.el7.x86_64
ddwrt用Dnsmasq version 2.78Copyright (c) 2000-2017 Simon Kelley cckp 发表于 2019-10-11 19:03
dnsmasq对pxe的支持比较差,那个菜单什么的,没啥用。现在有ipxe grub等各种loader更高级的菜单 抛弃旧的吧
这菜单是在加载引导文件之前就给你选择,很有用的,已知ipxe的efi引导文件在某些机器上加载会死机(你有更高级的菜单也无用武之地了),这时就可以马上重启机器换别的引导文件,而不用跑服务器上去改引导文件,而且不受secure boot开关影响 cckp 发表于 2019-10-11 19:03
dnsmasq对pxe的支持比较差,那个菜单什么的,没啥用。现在有ipxe grub等各种loader更高级的菜单 抛弃旧的吧
那个菜单是挺有用的,兼容性最好的就是pxemenu,别的loader因为高级所以各种黑屏和不兼容 cckp 发表于 2019-10-11 21:02
有时确实有用吧。我只是在vmware测试,很少用实机启动,所以没怎么研究兼容性问题。
pxemenu在ipxe中也 ...
从ipxe启动的pxemenu貌似是带热键选项,前面有标记ABCD的{:1_186:} 我有时候还在用这个,当年都是用这个兼容性打遍天下
win环境,efi下不知道有没有工具可以出类似的菜单 本帖最后由 友联电脑 于 2019-10-11 23:38 编辑
uefi和legacy一网混合启动,在dhcp时,判断类型,legacy,efi32,efi64在分别去调用相应的tftp下引导文件,进而再去加载菜单,不知道这样好不好,楼主这个F8,需要在出始化后手动一下哈 本帖最后由 江南一根葱 于 2019-10-12 10:21 编辑
友联电脑 发表于 2019-10-11 23:28
uefi和legacy一网混合启动,在dhcp时,判断类型,legacy,efi32,efi64在分别去调用相应的tftp下引导文件, ...
手动是备胎制度,有些环境没必要关安全启动用来启bootmgfw.efi
有些环境要启grub2.efi,有些环境要启ipxe.efi, 江南一根葱 发表于 2019-10-12 10:05
手动是备胎制度,有些环境没必要关安全启动用来启bootmgrfw.efi
有些环境要启grub2.efi,有些环境要启i ...
假如在没有关闭安全启动时,网络初始化时,可以手动选择一下,调用哪个去引导。是这么个情况
友联电脑 发表于 2019-10-12 10:15
假如在没有关闭安全启动时,网络初始化时,可以手动选择一下,调用哪个去引导。是这么个情况
安全啟動沒關係
F8只是切入手動選擇啟動程式,也可以設timeout作「預選擇」自動化啟動 hkkitlee 发表于 2019-10-12 12:42
安全啟動沒關係
F8只是切入手動選擇啟動程式,也可以設timeout作「預選擇」自動化啟動
嗯嗯,给失败时多一种选择得,省的去调整默认值,了解,了解。 cckp 发表于 2019-10-12 17:34
很有用。感觉大多数时候用不上 白白增加几秒钟
另一個角度看,不同loader有其不同長處:
grub2沒https
Ipxe下幾個載入方法(pxe,kpxe,kkpxe)也有分別 本帖最后由 江南一根葱 于 2019-10-14 15:26 编辑
cckp2019-10-12 17:34
áоò
f8通常是到不同场景用作调试用的,调试完了如果客户端比较多,还是会改下默认值的,不会浪费, 求助openwrt的dnsmasq配置在/etc/config/dhcp中,我改写了一下不生效
把内容写到config dnsmasq段以下
config dnsmasq
option domainneeded '1'
option localise_queries '1'
option rebind_protection '1'
option rebind_localhost '1'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option authoritative '1'
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.auto'
option nonwildcard '1'
option localservice '1'
option enable_tftp '1'
option tftp_root '/root/ipxe'
# option dhcp_boot 'ipxe64.efi'
option quietdhcp '1'
option sequential_ip '1'
# enable-tftp
# tftp-lowercase
# dhcp-no-override
# tftp-root=/mnt/sda1/pxeboot
option dhcp_match 'set:iPXE,175'
option dhcp_vendorclass 'set:flag,PXEClient:Arch:00000'
option dhcp_vendorclass 'set:flag,PXEClient:Arch:00006'
option dhcp_vendorclass 'set:flag,PXEClient:Arch:00007'
option dhcp_vendorclass 'set:flag,PXEClient:Arch:00009'
option tag_if 'set:load,tag:!iPXE,tag:flag'
option pxe_prompt '"Press F8 or Enter key for PXE menu.", 5'
# BIOS MENU
option pxe_service 'tag:load,X86PC, "BIOS ipxe undionly", undionly.kpxe'
option pxe_service 'tag:load,X86PC, "BIOS ipxe.pxe", ipxe.pxe'
option pxe_service 'tag:load,X86PC, "BIOS Microsoft PXE", pxeboot.n12'
option pxe_service 'tag:load,X86PC, "boot from local", 0'
# UEFI MENU
option pxe_service 'tag:load,IA32_EFI, "Microsoft UEFI (IA32_EFI)", bootia32.efi'
option pxe_service 'tag:load,X86-64_EFI, "Microsoft UEFI (X86-64_EFI)", bootx64.efi'
option pxe_service 'tag:load,BC_EFI, "Microsoft UEFI(BC-EFI)", bootx64.efi'
option pxe_service 'tag:load,6, "iPXE snponly UEFI32(6)", snponly32.efi'
option pxe_service 'tag:load,7, "iPXE snponly UEFI(7)", snponly.efi'
option pxe_service 'tag:load,9, "iPXE snponly UEFI(9)", snponly.efi'
option pxe_service 'tag:load,06,"iPXE UEFI32(06)", ipxe32.efi'
option pxe_service 'tag:load,07,"iPXE UEFI(07)", ipxe.efi'
option pxe_service 'tag:load,09,"iPXE UEFI(09)", ipxe.efi'
option pxe_service 'tag:load,007,"GRUB2 UEFI(007)", grub2.efi'
option pxe_service 'tag:load,009,"GRUB2 UEFI(009)", grub2.efi'
option dhcp_boot 'tag:iPXE,ipxemenu.txt'
a1379388505 发表于 2019-12-12 14:32
求助openwrt的dnsmasq配置在/etc/config/dhcp中,我改写了一下不生效
把内容写到config dnsmasq段以下
我的是改etc/dnsmasq.conf
另外我不用这个方法了,因为遇到有实体机不兼容
还是用tiny pxe 吧 右键切换配置文件来切换引导 星体投射 发表于 2019-12-12 14:37
我的是改etc/dnsmasq.conf
另外我不用这个方法了,因为遇到有实体机不兼容
还是用tiny pxe 吧 右键切换 ...
非常感谢指导,请问我用的openwrt可以用 tiny pxe吗 我百度经常没找到openwrt 和 tiny pxe在一起的文章 a1379388505 发表于 2019-12-12 14:41
非常感谢指导,请问我用的openwrt可以用 tiny pxe吗 我百度经常没找到openwrt 和 tiny pxe在一起的文章
任何路由器都可以,路由器不用设置,tiny pxe 设置勾选Proxy DHCP即可 本帖最后由 hkkitlee 于 2019-12-12 14:59 编辑
a1379388505 发表于 2019-12-12 14:32
求助openwrt的dnsmasq配置在/etc/config/dhcp中,我改写了一下不生效
把内容写到config dnsmasq段以下
建議在openwrt 的 terminal 輸入 :netstat -tunlp
先看看port有沒有正確啟動,如udp67,69,4011
有的話就可以縮小範圍在下半部的啟動語句部份。
我經驗是ddwrt與linux的config寫法是不同的,互換沒有作用的。(就是亂)
建議你查看一下版本(dnsmasq -v),再找版本語句說明就是。
還有些wrt版的原dnsmasq閹掉了tftp,即沒有編譯進dnsmasq;那時候就要升級一下你的dnsmasq了 星体投射 发表于 2019-12-12 14:42
任何路由器都可以,路由器不用设置,tiny pxe 设置勾选Proxy DHCP即可
我百度到的我用的Tiny PXE Serve是一个exe的windows程序,而我是用的openwrt里面的tftp启动的ipxe来无盘启动的
我就蒙了 这个exe文件用到哪里。。。。