无忧启动论坛

标题: 8.4更新。IPXE启动文件,启动快速!!含源码, [打印本页]

作者: huaqingyuan    时间: 2019-8-1 12:34
标题: 8.4更新。IPXE启动文件,启动快速!!含源码,
本帖最后由 huaqingyuan 于 2019-8-7 17:31 编辑

8.7更新
1.添加next-server完全不能获取时候使用DHCP服务器
2,细微调整,启动不成功添加菜单

undionlyOK.7z (66.9 KB, 下载次数: 260)

8.4再次更新

1.还是启用next-server变量,这样大多数情况下不用再去编辑启动菜单文件
2.不成功情况下添加快捷键n,手动设置服务器IP
3.添加了等待按键时候的倒计时
undionly1.7z (66.25 KB, 下载次数: 43)

8.1
测试了各种DHCP环境,均能正确启动IPXE.TXT
注意IPXE.TXT中,使用${bs}代替${next-server}
启动顺序是1.proxydhcp服务器,2.第一次获取启动文件服务器,3,获取到的next-server

undionly.7z (66.09 KB, 下载次数: 45)

欢迎测试
作者: huaqingyuan    时间: 2019-8-1 12:38
这是特意不放启动文件的图!


作者: huaqingyuan    时间: 2019-8-1 12:42
next-server修改为BS代替



作者: ♂竇豆♂    时间: 2019-8-1 12:59
下载测试下
作者: huaqingyuan    时间: 2019-8-2 21:55


使用PXE服务。也就是DHCP使用路由器的,仍然成功获取到IPXE.TXT




作者: huaqingyuan    时间: 2019-8-4 17:35

8.4更新

1.还是启用next-server变量,这样大多数情况下不用再去编辑启动菜单文件
2.不成功情况下天降快捷键n,手动设置服务器IP

undionly1.7z (66.16 KB, 下载次数: 12)

作者: huaqingyuan    时间: 2019-8-4 19:49
8.4再次更新

1.还是启用next-server变量,这样大多数情况下不用再去编辑启动菜单文件
2.不成功情况下添加快捷键n,手动设置服务器IP
3.添加了等待按键时候的倒计时
[attach]398234[/attach]
作者: 江南一根葱    时间: 2019-8-7 09:22
最近折腾的dnsmasq默认不发送next-server,ipxe里看变量值是空的,是dhcp-server
作者: 江南一根葱    时间: 2019-8-7 09:26
#!ipxe
ifopen net0
ifstat


set getfile tinycore.ipxe

   set menu-timeout 8000
   set menu-default dhcpserver
:boot
dhcp
prompt --key 0x02 --timeout 2000 Press Ctrl-B for the iPXE command line... && shell ||
chain file:/pxeboot/${getfile} || goto netboot

:netboot
set bootfile ${filename}
set serverip ${dhcp-server}|${proxydhcp/dhcp-server}|${proxydhcp/next-server}
chain tftp://${dhcp-server}/${getfile} || chain tftp://${proxydhcp/dhcp-server}/${getfile} ||
goto start


:menu

goto start

:start
  menu Choose An Existing Server!  Serverip:${serverip}  bootfile: ${getfile}
  item --gap --             --------------------------------PXE BOOT-----------------------------
  item dhcpserver        ${dhcp-server}
  item proxydhcp         ${proxydhcp/dhcp-server}
  item gitcloud          Cloud Boot
  item retry             set filename   

  item --gap --             ---------------------------- Advanced options -----------------------
  item --key c config       Configure settings                                   -- c
  item --key p pxelinux     Load PXELinux menu                                   -- p
  item shell                Drop to iPXE shell
  item reboot               Reboot computer
  item --key x exit         Exit iPXE and continue BIOS boot                     -- x
  choose --timeout ${menu-timeout} --default ${menu-default} selected
  goto ${selected}

:dhcpserver
echo ${dhcp-server}/${getfile}
chain tftp://${dhcp-server}/${getfile} || set menu-default proxydhcp ||
goto start

:proxydhcp
echo ${proxydhcp/dhcp-server}/${getfile}
chain tftp://${proxydhcp/dhcp-server}/${getfile} || set menu-default gitcloud ||
goto start

:gitcloud
echo Cloud Boot
chain https://raw.githubusercontent.com/zwj4031/netboot/master/${getfile} || set menu-default retry ||
goto start



:retry
console
echo set Filename
read getfile
set menu-default dhcpserver
goto start

:shell
  echo Type 'exit' to get the back to the menu
  shell
  goto start

:failed
  echo Booting failed, dropping to shell
  goto shell

:reboot
  reboot

:exit
  exit

:config
  config
  goto start


这是我这几天琢磨的脚本,在研究研究有没有可以改进的。
作者: huaqingyuan    时间: 2019-8-7 11:33
本帖最后由 huaqingyuan 于 2019-8-7 11:42 编辑

我比较追求快速启动成功,所以我一般不能成功才出菜单,或者等待按键:
我的脚本你可以参考一下!




#!ipxe
isset ${next-server} && set bs ${next-server} || set bs ${dhcp-server} || set error next-server
isset ${dhcp-server} && set ds ${dhcp-server} || set error ${error}+dhcp-server
isset ${hostname} && set hn ${hostname} || set error ${error}+hostname
isset ${root-path} && set rt ${root-path} || set error ${error}+rt
set priority 1
:retry
dhcp || goto retry
set keep-san 1
isset ${next-server} && set ns ${next-server}
isset ${hn} && set hostname ${hn} || set error ${error}+hn
isset ${rt} && set root-path ${rt} || set error ${error}+rt
echo next-server=${next-server} ip=${ip} mac=${mac}
isset ${proxydhcp/next-server} && set next-server ${proxydhcp/next-server} && echo boot from ${next-server}/ipxe.txt && chain tftp://${next-server}/ipxe.txt ||
isset ${bs} && set next-server ${bs} && echo boot from ${next-server}/ipxe.txt && chain tftp://${next-server}/ipxe.txt ||
isset ${ns} && set next-server ${ns} && echo boot from ${next-server}/ipxe.txt && chain tftp://${next-server}/ipxe.txt || set idx:int32 5
:lp1
iseq ${idx} 0 && goto lp1_done ||
prompt --key n --timeout 1000 Press 'n' input next-server...${idx} && echo -n Please enter next-server: && read next-server && chain tftp://
${next-server}/ipxe.txt && set idx:int32 4 ||
inc idx -1 && goto lp1
:lp1_done
set idx:int32 5
:lp2
iseq ${idx} 0 && goto lp2_done ||
prompt --key 0x02 --timeout 1000 Press Ctrl-B for the iPXE command line...${idx} && shell && set idx:int32 5 ||
inc idx -1 && goto lp2
:lp2_done
reboot
有些文字修饰符可能不能显示,但不影响阅读!


作者: huaqingyuan    时间: 2019-8-7 11:35
DHCP之前的信息往往是对的,所以在之前我保留了很多变量。
作者: huaqingyuan    时间: 2019-8-7 17:31
江南一根葱 发表于 2019-8-7 09:26
#!ipxe
ifopen net0
ifstat

8.7更新
1.添加next-server完全不能获取时候使用DHCP服务器
2,细微调整,启动不成功添加菜单
undionlyOK.7z (66.9 KB, 下载次数: 11)

用我这个测试一下!


作者: huaqingyuan    时间: 2019-8-7 23:47
测试环境建议打开路由dHCP或者多开几个DHCP
作者: 江南一根葱    时间: 2019-8-9 09:01
isset ${next-server} || set next-server ${dhcp-server}
isset ${proxydhcp/next-server} || set proxydhcp/next-server ${proxydhcp/dhcp-server}

这个语法有没有对的,我打算统一用next-server
作者: huaqingyuan    时间: 2019-8-9 09:34
本帖最后由 huaqingyuan 于 2019-8-9 10:07 编辑
江南一根葱 发表于 2019-8-9 09:01
isset ${next-server} || set next-server ${dhcp-server}
isset ${proxydhcp/next-server} || set proxyd ...


isset ${proxydhcp/next-server} || set proxydhcp/next-server ${proxydhcp/dhcp-server},这行一看就有问题吧!
感觉{proxydhcp/next-server}大多数情况是对的,我觉得你可以这样写:


isset  ${proxydhcp/next-server} && set next-server  ${proxydhcp/next-server} || isset  ${next-server} || set next-server ${dhcp-server}


顺序:proxydhcp/next-server , next-server , dhcp-server,谁存在用谁!
作者: hkkitlee    时间: 2019-8-9 10:13
PXE NBPs
PXE NBPs such as Windows Deployment Service's wdsnbp.com or pxelinux.0 will attempt to retrieve the contents of the various DHCP packets used by iPXE (via the PXENV_GET_CACHED_INFO API call). For example, wdsnbp.com will examine these DHCP packets to determine which TFTP server address to use.
There are three packets that may be requested by the PXE NBP: DHCPDISCOVER, DHCPACK and BINL. iPXE will construct packets for the PXE NBP based on a combination of the actual DHCP packets and settings provided by other means (such as the set command).
The scoping rules for the PXE NBP packets are slightly different from the logical hierarchy of settings scopes used within iPXE:
For the DHCPACK packet, any settings within the network device scope (e.g. netX/next-server) will override any top-level settings (e.g. next-server).
For the BINL packet, any settings present in the ProxyDHCPACK (e.g. proxydhcp/next-server) or in the Boot Server Reply (e.g. pxebs/next-server) will override any top-level settings (e.g. next-server).

http://ipxe.org/settings

建議保留原iPXE的[變量內容]。使用是沒問題;但更改過的話,往後排錯增難度
作者: huaqingyuan    时间: 2019-8-9 10:33
本帖最后由 huaqingyuan 于 2019-8-9 10:35 编辑
hkkitlee 发表于 2019-8-9 10:13
PXE NBPs
PXE NBPs such as Windows Deployment Service's wdsnbp.com or pxelinux.0 will attempt to ret ...


是的,所以还是觉得引入BS 变量,作为启动服务器比较好,服务器的其他变量都还在。但是如果要使用别人的菜单文件,就要做小修改了!

isset  ${proxydhcp/next-server} && set bs ${proxydhcp/next-server} || isset  ${bs}  &&  set  bs ${next-server}  || set bs ${dhcp-server}
作者: 江南一根葱    时间: 2019-8-9 11:03
本帖最后由 江南一根葱 于 2019-8-9 11:06 编辑

我在dnsmasq下默认配置不存在next-server,自然也不存在proxydhcp/next-server,所以不存在就从dhcp-server取了

我目前是不存在就取,不存在就保留next-server变量
存在proxydhcp就优先从proxydhcp上取文件
作者: 江南一根葱    时间: 2019-8-9 11:34
hkkitlee 发表于 2019-8-9 10:13
PXE NBPs
PXE NBPs such as Windows Deployment Service's wdsnbp.com or pxelinux.0 will attempt to ret ...

这样的话对我来说好像更好,我正愁dnsmasq下ipxe启grldr后不能使用ipxe chain grub2,好像没proxydhcp/next-server就是瓶颈
作者: 江南一根葱    时间: 2019-8-9 11:53
hkkitlee 发表于 2019-8-9 10:13
PXE NBPs
PXE NBPs such as Windows Deployment Service's wdsnbp.com or pxelinux.0 will attempt to ret ...

对了,你帖中dnsmasq的配置好像怎么都启不来efi文件,不知道是不是我vmware版本原因,能列表的是BC_EFI,但启不来,网启后回到固件开机选单页面
但我用另一帖http://bbs.wuyou.net/forum.php?mod=viewthread&tid=368988中7楼的方案可以启动成功,

还有就是kernel ipxe.kkpxe是不是个坑啊,我用生成的ipxe.lkrn才可以这么操做
作者: hkkitlee    时间: 2019-8-9 12:18
huaqingyuan 发表于 2019-8-9 10:33
是的,所以还是觉得引入BS 变量,作为启动服务器比较好,服务器的其他变量都还在。但是如果要使用别人 ...

我的簡單思路,未測:

chain tftp://${proxydhcp/next-server}/ipxe.txt ||
chain tftp://${next-server}/ipxe.txt ||
shell

應該無需加入dhcp server,因為此腳本由pxe啟動的話,iPXE是由next server傳給客戶機。
作者: hkkitlee    时间: 2019-8-9 12:22
江南一根葱 发表于 2019-8-9 11:03
我在dnsmasq下默认配置不存在next-server,自然也不存在proxydhcp/next-server,所以不存在就从dhcp-server ...

這該是你啟動ipxe腳本時,用了命令「dhcp」更新客戶機網絡設定。導致一部份不是「必須的設定值如pxe next server」經dhcp server 再重設了(不是proxydhcp)。

你再進入iPXE介面時已經覆寫了設定,所以看不見。
作者: hkkitlee    时间: 2019-8-9 12:33
本帖最后由 hkkitlee 于 2019-8-9 12:51 编辑
江南一根葱 发表于 2019-8-9 11:53
对了,你帖中dnsmasq的配置好像怎么都启不来efi文件,不知道是不是我vmware版本原因,能列表的是BC_EFI, ...


印象中你加了#在設定檔[關於Arch 9 BC_EFI回應]
改回你的檔名,刪除除#號,重啟dnsmasq應該可以

#0
pxe-service=X86PC, "kkpxe for Legacy BIOS", undionly.kkpxe
pxe-service=X86PC, "kpxe for Legacy BIOS", undionly.kpxe
pxe-service=X86PC, "pxe for Legacy BIOS", undionly.pxe

#2
pxe-service=IA64_EFI, "Boot IA64_EFI", uefi/ipxe64.efi

#6
pxe-service=IA32_EFI, "Boot IA32_EFI", uefi/ipxe32.efi

#7
pxe-service=X86-64_EFI, "Boot X86-64_EFI", uefi/ipxe64.efi

#8
pxe-service=Xscale_EFI, "Boot BC_EFI", uefi/ipxe64.efi

#9
pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe64.efi







kkpxe/kpxe/pxe是真實模式下pxe執行格式,使用不同的載入模式
lkrn是經媒體引導(grub2等)的可啟動核心,多裝載在u盤/光盤。
作者: huaqingyuan    时间: 2019-8-9 12:36
hkkitlee 发表于 2019-8-9 12:18
我的簡單思路,未測:

chain tftp://${proxydhcp/next-server}/ipxe.txt ||

经过判断明显有优势,你这样${proxydhcp/next-server}不存在时候,客户机器会去尝试tftp:///ipxe.txt,耗时很久!
作者: hkkitlee    时间: 2019-8-9 12:41
huaqingyuan 发表于 2019-8-9 12:36
经过判断明显有优势,你这样${proxydhcp/next-server}不存在时候,客户机器会去尝试tftp:///ipxe.txt,耗 ...

收到,謝測

真的未有機器試
作者: huaqingyuan    时间: 2019-8-9 12:46
江南一根葱 发表于 2019-8-9 11:03
我在dnsmasq下默认配置不存在next-server,自然也不存在proxydhcp/next-server,所以不存在就从dhcp-server ...

用原版的IPXE启动文件!在DHCP之前到命令行,然后查看next-server,试试有没有值!
作者: 江南一根葱    时间: 2019-8-9 13:18
hkkitlee 发表于 2019-8-9 12:33
印象中你加了#在設定檔[關於Arch 9 BC_EFI回應]
改回你的檔名,刪除除#號,重啟dnsmasq應該可以

搞定了,我折腾半天果断开启了日志,原来是efi下也是请求xxx.efi.0,郁闷
作者: 江南一根葱    时间: 2019-8-9 13:21
huaqingyuan 发表于 2019-8-9 12:46
用原版的IPXE启动文件!在DHCP之前到命令行,然后查看next-server,试试有没有值!

pxe启动,没有的,不过我给dhcp-option后是有了,但还是加了dhcp-server以防万一
这么一想,tinypxe的next-server原来可以设定成别的值,也就是别的启动器由pxe启动后也许没有这个值
作者: hkkitlee    时间: 2019-8-9 14:40
本帖最后由 hkkitlee 于 2019-8-9 14:43 编辑
江南一根葱 发表于 2019-8-9 13:21
pxe启动,没有的,不过我给dhcp-option后是有了,但还是加了dhcp-server以防万一
这么一想,tinypxe的ne ...


樓主先多包涵,有點偏離了主題,但剛討論到next server才回答蔥師兄的問題。有需要請聯絡刪除。

Dnsmasq指派非預設的tftp作next server:

pxe-service=BC_EFI, "Boot BC_EFI", uefi/ipxe64.efi,[machine name],192.168.X.X

[machine name]=任意,好像不能有空格,也可留空不填
192.168.X.X=任意,同網段即可
作者: jxyun99    时间: 2019-8-31 23:55
表示不知道怎么用,LZ来个完整包呗
作者: key0327    时间: 2019-12-13 10:24
启动文件怎么编译? 怎么查看?教一下
作者: 0070317    时间: 2019-12-17 19:05
留个记号

作者: 友联电脑    时间: 2020-2-19 08:23
支持一下
作者: FunSKY    时间: 2020-2-27 04:01
不知道支不支持UEFI引导
作者: cbl    时间: 2020-2-29 18:43

作者: sss8865858    时间: 2020-5-25 18:30
赞一个
作者: luy-wong    时间: 2022-8-18 00:23
使用路由器 没有next-server 没有文件名 怎么下载IPXE下来执行后面的操作?
作者: lp4584894    时间: 2023-7-14 22:39
多谢多谢
作者: 2011夹克油    时间: 2023-7-16 19:03
学习中,老 了,学起来困难!




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3