PXE关键两个步骤:
- 启动一个TFTP服务器,放置相应的启动文件
- 在DHCP服务器上设置启动文件
因为TFTP在使用控制端口连接上以后会重选任意端口来传送文件,所以TFTP服务器必须在DHCP服务器上(或者设置DMZ主机),单纯转发控制端口是无效的。
准备启动文件
需要两个文件:
SecureBoot shim
这边给出了用Ubuntu下载的示例。其它发行版或系统请自行拆包。
1 |
apt-get source shim-signed |
然后从 ./shim-signed-xxx ( xxx 为版本号)提取出 shim.efi.signed 文件,重命名为 bootx64.efi 。
GRUB netboot
下载 http://archive.ubuntu.com/ubuntu/dists/xenial/main/uefi/grub2-amd64/current/grubnetx64.efi.signed ,重命名为 grubx64.efi 。
配置RouterOS
首先我们把准备的两个文件传送到RouterOS上磁盘任意位置(可以是外接的USB存储设备或者SD卡):
然后配置DHCP服务器:
1 2 3 |
/ip dhcp-server set 0 bootp-support=dynamic network set 0 boot-file-name=bootx64.efi |
最后配置TFTP服务器权限:
1 2 3 |
/ip tftp add allow-rollover=yes ip-addresses=<你的内网网段> real-filename=<上传的文件位置>/bootx64.efi req-filename=bootx64.efi add allow-rollover=yes ip-addresses=<你的内网网段> real-filename=<上传的文件位置>/grubx64.efi req-filename=grubx64.efi |
(用图形界面配置RouterOS的话,注意 allow-rollover 这一字段在WinBox和网页端是没有的,必须通过命令行设置。对于较大文件建议设为 yes 不然有可能导致客户端下载失败。)
这样就大功告成啦。
在局域网段内启动PXE设备,然后就会看到熟悉的GRUB界面:
至于如何用这个GRUB来联网引导并安装操作系统,参见本系列的下一篇文章。
已知问题
在一些老旧的PXE ROM(例如VMWare Workstation带的Intel虚拟网卡ROM)上,由于启动文件太大,会报错:
1 2 3 |
PXE-E79: NBP is too big to fit in free base memory PXE-M0F: Exiting Intel PXE ROM Operating System not found |
Surface 3上触摸屏和UEFI固件画的触摸键盘无法被GRUB识别,因此还是要插键盘。
参考资料: