之前录制的视频教程
首先纠正视频里面的一个错误
0:30这个地方的配置,不要手动编辑这个文件,而且编辑了也不一定对,openwrt不同的版本有的可行有的不可行
#######################################################################
今天重新弄ipxe,重新写一下吧
我的配置文件下载地址是https://www.rongyaozhilian.com/download/ipxe.zip
里面包含了我自己编译的一个文件undionly-boot.kpxe 这个文件里面我指定了自动从boot.ipxe这个配置文件启动
里面还有示例的配置文件,可以用我的配置文件当模板,制作各种启动脚本
如果就是想简单的从BIOS启动ipxe,可以直接用我编译的这个文件
(这种编译好的文件配置方式非常简单,不需要DHCP做什么设置,但是缺点就是只能从BIOS引导,现在的新主板都支持UEFI了,推荐还是用uefi比较好)
如果想从uefi启动ipxe,需要指定启动文件是ipxe.efi,这个文件我没有编译,也不推荐大家去编译了,也没有必要
直接使用ipxe官方提供的undionly.kpxe和ipxe.efi这两个文件
https://boot.ipxe.org/undionly.kpxe
https://boot.ipxe.org/ipxe.efi
然后通过设置DHCP就可以实现BIOS和UEFI同时可用
https://ipxe.org/howto/chainloading这个页面有linux和windows主流DHCP服务器的配置方式
不过我用的是dnsmasq,我写一下dnsmasq的配置方式吧
下面是是直接编辑/etc/dnsmasq.conf的方式
enable-tftp
tftp-root=/etc/dnsmasq.d/tftp/ipxe
dhcp-match=set:bios,option:client-arch,0
dhcp-match=set:ipxe,175
dhcp-boot=tag:!ipxe,tag:bios,undionly.kpxe
dhcp-boot=tag:!ipxe,tag:!bios,ipxe.efi
dhcp-boot=tag:ipxe,boot.ipxe
如果你用的是openwrt
推荐先在网页里面开启tftp,只指定tftp的目录,不要填写启动文件
然后在/etc/dnsmasq.conf下面填写
dhcp-match=set:bios,option:client-arch,0
dhcp-match=set:ipxe,175
dhcp-boot=tag:!ipxe,tag:bios,undionly.kpxe
dhcp-boot=tag:!ipxe,tag:!bios,ipxe.efi
dhcp-boot=tag:ipxe,boot.ipxe
然后重启dnsmasq就可以了
(openwrt就是这么麻烦,既要在网页里面开启tftp,又要手动编辑配置文件)
我现在用的openwrt版本是22.03.0-rc6,如果不在网页开启tftp而是直接在配置文件里面指定tftp目录,dnsmasq会启动失败,提示信息是tftp目录没有访问权限,很坑爹(当时录制教程的时候这样做是没问题的,也不知道新版本更新了什么)
顺便再补充个22.03.0-rc6的dnsmasq设置方面的知识
这个版本默认会自动读取/var/dnsmasq.d/这个目录下所有的文件作为配置文件,但是/var这个目录是个内存盘,重启里面所有资料丢失,所以我的做法是创建目录/root/dnsmasq.d/,然后在这个目录下存放配置文件,然后在开机执行脚本里面用脚本把配置文件复制过去
cp -r /root/dnsmasq.d/* /var/dnsmasq.d/
实测这样没问题,重启以后配置文件也会被读取,猜测估计是这个启动脚本先于dnsmasq启动
上面是配置方式,下面讲讲ipxe和DHCP配合的过程
首先,电脑开机以后从网卡启动,网卡自动从DHCP获取IP,然后DHCP按照配置顺序挨个执行
第一条:如果是bios的方式就打标bios
第二条:如果有175选项,就打标ipxe
第三条:如果标签是bios就从undionly.kpxe启动
第四条:如果标签既不是ipxe也不是bios,则从ipxe.efi启动
第五条:如果标签是ipxe,就从配置文件boot.ipxe启动
上面五条执行完毕就进入了ipxe环境了(要么是bios要么是UEFI总有一个)
然后在ipxe环境下会再次发送DHCP请求,服务器收到请求会再执行一遍
第一条:如果是bios的方式就打标bios (因为已经在ipxe环境下了,不会发送这个信息,所以这个不匹配)
第二条:如果175选项有就打标ipxe (ipxe环境下有175选项,所以这个匹配了,本次被标记为ipxe)
第三条:如果标签是bios就从undionly.kpxe启动 (这个不匹配)
第四条:如果标签既不是ipxe也不是bios,则从ipxe.efi启动(这个不匹配)
第五条:如果标签是ipxe,就从配置文件boot.ipxe启动 (这个匹配了,开始读取配置文件)
然后客户端就按照配置文件执行了
最后再补充一个扩容openwrt硬盘的方法
原版的OP只有100M空间,根本不够用
扩容方法:
下载gparted:
https://gparted.org/download.php
下载这个镜像文件
https://downloads.sourceforge.net/gparted/gparted-live-1.4.0-5-amd64.iso
然后虚拟机关机,光驱用这个ISO
并设置从光驱启动
内存设置为1024M
编辑硬盘,扩展到1G或者更高容量
然后启动虚拟机
进系统以后直接用鼠标操作扩容就行了,实测成功
扩容的时候 提示有错误点修复就行了 第一次点的忽略,结果扩容失败 第二次先修复再扩容成功以后 然后关机 去掉ISO,把内存改回256M,然后启动 成功了,/目录就是1G大小了