用RouterOS PXE启动Linux(GRUB,支持SecureBoot)

PXE关键两个步骤:

  1. 启动一个TFTP服务器,放置相应的启动文件
  2. 在DHCP服务器上设置启动文件

因为TFTP在使用控制端口连接上以后会重选任意端口来传送文件,所以TFTP服务器必须在DHCP服务器上(或者设置DMZ主机),单纯转发控制端口是无效的。

准备启动文件

需要两个文件:

SecureBoot shim

这边给出了用Ubuntu下载的示例。其它发行版或系统请自行拆包。

然后从 ./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服务器:

最后配置TFTP服务器权限:

(用图形界面配置RouterOS的话,注意 allow-rollover 这一字段在WinBox和网页端是没有的,必须通过命令行设置。对于较大文件建议设为 yes 不然有可能导致客户端下载失败。)

这样就大功告成啦。

在局域网段内启动PXE设备,然后就会看到熟悉的GRUB界面:

至于如何用这个GRUB来联网引导并安装操作系统,参见本系列的下一篇文章

已知问题

在一些老旧的PXE ROM(例如VMWare Workstation带的Intel虚拟网卡ROM)上,由于启动文件太大,会报错:

Surface 3上触摸屏和UEFI固件画的触摸键盘无法被GRUB识别,因此还是要插键盘。


 

参考资料:

发表评论