无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 35799|回复: 102

[原创] dnsmasq设置bios和uefi双启动多引导菜单(完美)

  [复制链接]
发表于 2019-10-9 13:50:44 | 显示全部楼层 |阅读模式
本帖最后由 星体投射 于 2019-10-11 07:48 编辑

按F8手动选菜单,不按自动加载第一项,并实现自动ipxe加载菜单(网启目录下放ipxemenu.txt),ipxe可以直接用官方的文件,无需编译内置菜单

dnsmasq的UEFI网启非常古怪,反复捉摸网上的各种别人写的菜单,最终总结只能这么写

小技巧:openwrt 路由器上一般都是u盘和sd卡上放网启目录,可以把该目录软链接到/www下就实现了http服务,方便用ipxe的http启动
  1.        ln -s /mnt/sda1/pxeboot /www/pxeboot
复制代码


dnsmasq版本2.76以上
dnsmasq.conf配置
  1. enable-tftp
  2. tftp-lowercase
  3. dhcp-no-override
  4. tftp-root=/mnt/sda1/pxeboot

  5. dhcp-match=set:iPXE,175

  6. dhcp-vendorclass=set:flag,PXEClient:Arch:00000
  7. dhcp-vendorclass=set:flag,PXEClient:Arch:00006
  8. dhcp-vendorclass=set:flag,PXEClient:Arch:00007
  9. dhcp-vendorclass=set:flag,PXEClient:Arch:00009

  10. tag-if=set:load,tag:!iPXE,tag:flag

  11. pxe-prompt="Press F8 or Enter key for PXE menu.", 5
  12. #BIOS MENU
  13. pxe-service=tag:load,X86PC, "BIOS ipxe undionly", undionly.kpxe
  14. pxe-service=tag:load,X86PC, "BIOS ipxe.pxe", ipxe.pxe
  15. pxe-service=tag:load,X86PC, "BIOS Microsoft PXE", pxeboot.n12
  16. pxe-service=tag:load,X86PC, "boot from local", 0
  17. #UEFI MENU
  18. pxe-service=tag:load,IA32_EFI, "Microsoft UEFI (IA32_EFI)", bootia32.efi
  19. pxe-service=tag:load,X86-64_EFI, "Microsoft UEFI (X86-64_EFI)", bootx64.efi
  20. pxe-service=tag:load,BC_EFI, "Microsoft UEFI(BC-EFI)", bootx64.efi
  21. pxe-service=tag:load,6, "iPXE snponly UEFI32(6)", snponly32.efi
  22. pxe-service=tag:load,7, "iPXE snponly UEFI(7)", snponly.efi
  23. pxe-service=tag:load,9, "iPXE snponly UEFI(9)", snponly.efi
  24. pxe-service=tag:load,06,  "iPXE UEFI32(06)", ipxe32.efi
  25. pxe-service=tag:load,07,  "iPXE UEFI(07)", ipxe.efi
  26. pxe-service=tag:load,09,  "iPXE UEFI(09)", ipxe.efi

  27. 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

评分

参与人数 1无忧币 +1 收起 理由
tansuo + 1 为不断探索学习赞一个!

查看全部评分

发表于 2019-10-9 15:36:48 | 显示全部楼层
前来学习
回复

使用道具 举报

发表于 2019-10-9 15:51:39 | 显示全部楼层
感谢大神
回复

使用道具 举报

发表于 2019-10-10 08:25:08 | 显示全部楼层
这个我琢磨半天没搞出来, 谢谢分享
回复

使用道具 举报

发表于 2019-10-10 17:07:27 | 显示全部楼层
正在研究,不知道文件目录要怎么放
回复

使用道具 举报

发表于 2019-10-10 17:09:05 | 显示全部楼层
这下子不管是新电脑还是老电脑都可以方便启动了,太感谢了
回复

使用道具 举报

发表于 2019-10-10 17:40:00 | 显示全部楼层
这下子不管是新电脑还是老电脑都可以方便启动了,太感谢了
回复

使用道具 举报

发表于 2019-10-10 18:49:27 | 显示全部楼层
http://bbs.wuyou.net/forum.php?m ... &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

回复

使用道具 举报

发表于 2019-10-11 14:39:32 | 显示全部楼层
本帖最后由 chenall 于 2019-10-11 16:15 编辑

我目前使用的配置.(后面的192.168.103.15是因为我DHCP和TFTP服务器是分开的,同一台可以不用)

使用VMWARE测试 BIOS /EFI32/EFI64都可以正常启动,实机测试BIOS和EFI64都可以,EFI32的机器没有找到.


  1. dhcp-match=set:x86pc,option:client-arch,0
  2. dhcp-match=set:IA32_EFI,option:client-arch,6
  3. dhcp-match=set:x86_64-uefi,option:client-arch,7
  4. dhcp-match=set:x86_64-uefi,option:client-arch,9
  5. dhcp-match=set:ipxe,77,"iPXE"

  6. dhcp-boot=tag:x86pc,ipxe/undionly.kpxe,,192.168.103.15
  7. dhcp-boot=tag:x86_64-uefi,ipxe/snponly64.efi,,192.168.103.15
  8. dhcp-boot=tag:IA32_EFI,ipxe/snponly32.efi,,192.168.103.15
  9. dhcp-boot=tag:ipxe,boot.ipxe,,192.168.103.15
复制代码


@hkkitlee 这种方式我也有试过,感觉兼容性不好,不知是我配置有问题还是其它,只有BIOS可以正常启动.EFI不行.

点评

dhcp-vendorclass跟dhcp-match有啥区别 我看语法有点差别但是功能都一样 我群晖内置的默认是dhcp-vendorclass 我纠结是按照dhcp-vendorclass继续写还是都注释掉改成dhcp-match  详情 回复 发表于 2019-12-26 22:04
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", ue  详情 回复 发表于 2019-10-11 17:53
他写的EFI根本不会引导,EFI想要出菜单,只能按我的方法写 必须至少写两项才行,X86-64_EFI和7,单独写其中一个都不会引导,非常神奇  详情 回复 发表于 2019-10-11 15:06
回复

使用道具 举报

 楼主| 发表于 2019-10-11 15:06:09 | 显示全部楼层
chenall 发表于 2019-10-11 14:39
我目前使用的配置.(后面的192.168.103.15是因为我DHCP和TFTP服务器是分开的,同一台可以不用)

使用VMWARE ...

他写的EFI根本不会引导,EFI想要出菜单,只能按我的方法写
必须至少写两项才行,X86-64_EFI和7,单独写其中一个都不会引导,非常神奇
回复

使用道具 举报

发表于 2019-10-11 17:53:26 | 显示全部楼层
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
回复

使用道具 举报

发表于 2019-10-11 17:56:21 | 显示全部楼层
这个东西我也折腾了好多天,最后是开启log,开启webserver
然后从http访问这个log,实时观测客户端是怎么取文件,再判断哪步出了错
回复

使用道具 举报

发表于 2019-10-11 19:06:34 | 显示全部楼层
本帖最后由 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.78  Copyright (c) 2000-2017 Simon Kelley
回复

使用道具 举报

 楼主| 发表于 2019-10-11 19:53:49 | 显示全部楼层
cckp 发表于 2019-10-11 19:03
dnsmasq对pxe的支持比较差,那个菜单什么的,没啥用。现在有ipxe grub等各种loader更高级的菜单 抛弃旧的吧

这菜单是在加载引导文件之前就给你选择,很有用的,已知ipxe的efi引导文件在某些机器上加载会死机(你有更高级的菜单也无用武之地了),这时就可以马上重启机器换别的引导文件,而不用跑服务器上去改引导文件,而且不受secure boot开关影响
回复

使用道具 举报

发表于 2019-10-11 20:39:40 | 显示全部楼层
cckp 发表于 2019-10-11 19:03
dnsmasq对pxe的支持比较差,那个菜单什么的,没啥用。现在有ipxe grub等各种loader更高级的菜单 抛弃旧的吧

那个菜单是挺有用的,兼容性最好的就是pxemenu,别的loader因为高级所以各种黑屏和不兼容
回复

使用道具 举报

发表于 2019-10-11 21:04:28 | 显示全部楼层
cckp 发表于 2019-10-11 21:02
有时确实有用吧。我只是在vmware测试,很少用实机启动,所以没怎么研究兼容性问题。

pxemenu在ipxe中也 ...

从ipxe启动的pxemenu貌似是带热键选项,前面有标记ABCD的
回复

使用道具 举报

发表于 2019-10-11 21:09:06 | 显示全部楼层
111111.png 我有时候还在用这个,当年都是用这个兼容性打遍天下

win环境,efi下不知道有没有工具可以出类似的菜单
回复

使用道具 举报

发表于 2019-10-11 23:28:47 来自手机 | 显示全部楼层
本帖最后由 友联电脑 于 2019-10-11 23:38 编辑

uefi和legacy一网混合启动,在dhcp时,判断类型,legacy,efi32,efi64在分别去调用相应的tftp下引导文件,进而再去加载菜单,不知道这样好不好,楼主这个F8,需要在出始化后手动一下哈

点评

手动是备胎制度,有些环境没必要关安全启动用来启bootmgrfw.efi 有些环境要启grub2.efi,有些环境要启ipxe.efi,  详情 回复 发表于 2019-10-12 10:05
不好意思,点不动,卡住了一下  发表于 2019-10-12 09:55
F8,不知道继续加载什么,为什么要这样做,不明白  发表于 2019-10-12 09:54
F8,不知道继续加载什么,为什么要这样做,不明白  发表于 2019-10-12 09:54
F8,不知道继续加载什么,为什么要这样做,不明白  发表于 2019-10-12 09:54
回复

使用道具 举报

发表于 2019-10-12 10:05:43 | 显示全部楼层
本帖最后由 江南一根葱 于 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:15
回复

使用道具 举报

发表于 2019-10-12 10:15:42 | 显示全部楼层
江南一根葱 发表于 2019-10-12 10:05
手动是备胎制度,有些环境没必要关安全启动用来启bootmgrfw.efi
有些环境要启grub2.efi,有些环境要启i ...

假如在没有关闭安全启动时,网络初始化时,可以手动选择一下,调用哪个去引导。是这么个情况

点评

安全啟動沒關係 F8只是切入手動選擇啟動程式,也可以設timeout作「預選擇」自動化啟動  详情 回复 发表于 2019-10-12 12:42
回复

使用道具 举报

发表于 2019-10-12 12:42:22 | 显示全部楼层
友联电脑 发表于 2019-10-12 10:15
假如在没有关闭安全启动时,网络初始化时,可以手动选择一下,调用哪个去引导。是这么个情况

安全啟動沒關係

F8只是切入手動選擇啟動程式,也可以設timeout作「預選擇」自動化啟動

点评

嗯嗯,给失败时多一种选择得,省的去调整默认值,了解,了解。  详情 回复 发表于 2019-10-12 13:47
回复

使用道具 举报

发表于 2019-10-12 13:47:19 来自手机 | 显示全部楼层
hkkitlee 发表于 2019-10-12 12:42
安全啟動沒關係

F8只是切入手動選擇啟動程式,也可以設timeout作「預選擇」自動化啟動

嗯嗯,给失败时多一种选择得,省的去调整默认值,了解,了解。
回复

使用道具 举报

发表于 2019-10-13 12:13:19 | 显示全部楼层
cckp 发表于 2019-10-12 17:34
很有用。感觉大多数时候用不上 白白增加几秒钟

另一個角度看,不同loader有其不同長處:
grub2沒https
Ipxe下幾個載入方法(pxe,kpxe,kkpxe)也有分別
回复

使用道具 举报

发表于 2019-10-13 22:47:12 来自手机 | 显示全部楼层
本帖最后由 江南一根葱 于 2019-10-14 15:26 编辑





f8通常是到不同场景用作调试用的,调试完了如果客户端比较多,还是会改下默认值的,不会浪费,
回复

使用道具 举报

发表于 2019-12-12 14:32:22 | 显示全部楼层
求助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'


点评

建議在openwrt 的 terminal 輸入 :netstat -tunlp 先看看port有沒有正確啟動,如udp67,69,4011 有的話就可以縮小範圍在下半部的啟動語句部份。 我經驗是ddwrt與linux的config寫法是不同的,互換沒有作用  详情 回复 发表于 2019-12-12 14:57
我的是改etc/dnsmasq.conf 另外我不用这个方法了,因为遇到有实体机不兼容 还是用tiny pxe 吧 右键切换配置文件来切换引导  详情 回复 发表于 2019-12-12 14:37
回复

使用道具 举报

 楼主| 发表于 2019-12-12 14:37:55 | 显示全部楼层
a1379388505 发表于 2019-12-12 14:32
求助openwrt的dnsmasq配置在/etc/config/dhcp中,我改写了一下不生效
把内容写到config dnsmasq段以下

我的是改etc/dnsmasq.conf
另外我不用这个方法了,因为遇到有实体机不兼容
还是用tiny pxe 吧 右键切换配置文件来切换引导
回复

使用道具 举报

发表于 2019-12-12 14:41:17 | 显示全部楼层
星体投射 发表于 2019-12-12 14:37
我的是改etc/dnsmasq.conf
另外我不用这个方法了,因为遇到有实体机不兼容
还是用tiny pxe 吧 右键切换 ...

非常感谢指导,请问我用的openwrt  可以用 tiny pxe吗 我百度经常没找到openwrt 和 tiny pxe在一起的文章

点评

任何路由器都可以,路由器不用设置,tiny pxe 设置勾选Proxy DHCP即可  详情 回复 发表于 2019-12-12 14:42
回复

使用道具 举报

 楼主| 发表于 2019-12-12 14:42:42 | 显示全部楼层
a1379388505 发表于 2019-12-12 14:41
非常感谢指导,请问我用的openwrt  可以用 tiny pxe吗 我百度经常没找到openwrt 和 tiny pxe在一起的文章

任何路由器都可以,路由器不用设置,tiny pxe 设置勾选Proxy DHCP即可
回复

使用道具 举报

发表于 2019-12-12 14:57:45 | 显示全部楼层
本帖最后由 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:58:38 | 显示全部楼层
星体投射 发表于 2019-12-12 14:42
任何路由器都可以,路由器不用设置,tiny pxe 设置勾选Proxy DHCP即可

我百度到的我用的Tiny PXE Serve是一个exe的windows程序,而我是用的openwrt里面的tftp启动的ipxe来无盘启动的
我就蒙了 这个exe文件用到哪里。。。。

点评

那你用9楼的那个方法吧,我不用openwrt是因为切换引导不方便  详情 回复 发表于 2019-12-12 15:02
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-22 05:14

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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