一、源码与链接
几个相关链接
相关源码
二、编译一个带 iSCSI 和 COMBOOT 功能的 iPXE 固件
这个参考 ipxe 官网或 iPXE 编译增加功能与自定义脚本 进行编译,在我的源码 netboot-tftp 中有编译好可用的 kpxe 文件
三、群晖 NAS 里配置 DCHP、TFTP 和 WEB 服务器
先按同胞网友写的教程 Part 1 配置好群晖的 iSCSI、DCHP、TFTP 和 WEB 服务器
开启 TFTP 服务
将 netboot-tftp 源码里全部文件上传到 /PXE/Grub 文件夹下
开启 DHCP 服务
开启 PXE 并设置启动文件
网络启动测试
在 BIOS 的 BOOT 选项里将从网络启动调整到第一位,各主板 BIOS 操作不一样,请自行查阅主板 BIOS 说明
开启 WEB 服务
开启群晖 web station 并设置虚拟主机用来加载一些系统的引导文件
四、在群晖配置 iSCSI target 和 iSCSI LUN
五、修改 tftp 根目录中的文件
六、通过网卡 DHCP 启动机器安装系统
在 menu.ipxe 的一些网络地址没问题的话,就能进入 ESXi 的安装界面了
这里安装的时候硬盘选择界面会出现 iSCSI 的硬盘,如果有其他硬盘的话别选错了
如果没有出现 iSCSI 硬盘,那肯定是加载出错了。
七、安装完成启动系统
八、关于 DHCP 与 TFTP 服务器
按照上面的教程是在内网开启了两个 DHCP 服务器,一个是主路由的,我这里是 ROS,一个是群晖的。
这样会导致有些时候网络启动后 iPXE DHCP 获取到的结果不是想要的结果,比如 next-server 地址错误
会导致加载不到启动脚本而进不了菜单,这里建议内网只有一个 DHCP 服务器,这样就不会有 DHCP 服务干扰了
下面介绍使用 ROS、LEDE 的 DHCP 和 TFTP 服务器
ROS 的 DHCP 与 TFTP 设置
将 netboot-tftp 源码上传到 ROS 的 files,然后 ip -> TFTP 开启 ROS 的 TFTP 服务
DHCP server 里配置 next server 和 boot file name
LEDE 的 DHCP 与 TFTP 设置
如果是使用 LEDE 的 DHCP 和 TFTP 服务器,则将 netboot-tftp 源码上传到 lede 路由上
然后在 网络 -> DHCP/DNS 下进行配置 TFTP 服务
九、对特殊电脑做特别设置
脚本是支持多个电脑启动不同的系统到电脑对应系统的 iSCSI LUN
这就是上面创建 iSCSI target 的时候 target 名称为什么要用 主机名.系统名
* 设置电脑网卡 mac 地址脚本
比如要让电脑 A(网卡 MAC 地址为 00:12:34:56:78:90) 启动到 mini.系统名 的 iSCSI
那就是设置电脑 A 的主机名为 mini
如果使用群晖的 DHCP,则可以在群群晖 DHCP 客户端列表里给 MAC 地址设置主机名
如果一些不能设置主机名的 DHCP 服务器,如 ROS,如果不用做特殊设置,则 hostname 为空
这样脚本会找 mac 地址.系统名 的 iSCSI, 这样就会取不到 iSCSI, 除非你 iSCSI target 用 mac 地址.系统名 命名
在 netboot-tftp 源码目录下有一个 boot 文件夹,这个文件夹就是放置对应主机或 MAC 地址特殊脚本的目录
在 boot 目录下创建文件, 文件的命名格式为 mac-mac 地址去掉冒号字母小写.ipxe
例如 mac-001234567890.ipxe
在文件里添加脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14#!ipxe
echo
# 设置这个mac地址的主机名
set hostname mini
set initiator-iqn ${base-iqn}:${hostname}
echo Booting ${hostname}
# 这里还可以设置默认进入的菜单和在菜单上的等待时间
# 比如装好系统后设置 default 为 esxi ,timeout 为1秒或更短
# 这样就可以直接进入esxi系统,省去选择菜单步骤。在装好系统不要用菜单的时候很有用
set menu-default esxi
set menu-timeout 10000
chain --replace --autofree ${menu-url}
十、折腾过程中遇到的坑
关于 iscsi 的坑
仔细看 netboot-tftp 里菜单命令会发现有一条命令 sanhook \${root-path}
是扫描加载 iSCSI 的
全路径是这样的
sanhook iscsi:192.168.1.252::::iqn.iqn.2000-01.com.synology:mini.ESXi
iPXE 官方文档有对这个进行说明:
1iscsi:::::
我们把其中的 protocol、prot、LUN 都省略了,所以成了::::
其中 LUN 是一个坑,官方文档中有对 LUN 的介绍是这个样的
1 is the SCSI LUN of the boot disk, in hexadecimal. It can be left empty, in which case the default LUN (0) will be used.
LUN 是指要加载 iSCSI target 中哪个 LUN,值是 LUN 的编号 ,关键信息是 默认值 为 0。
使用我的脚本加载 DS3617xs 中的 iSCSI 一切正常
但是用这个脚本加载 DS918+ 的中 iSCSI 就会加载不到
研究了几个小才发现
在我在 DS3617xs 中 iSCSI target 第一个 LUN 的编号为 0
而 DS918+ 中 iSCSI target 第一个 LUN 的编号为 1
所以如果发现自己 iSCSI target 第一个 LUN 的编号为 1 的,请修改 netboot-tftp 源码中的 boot.ipxe.cfg 文件
将
1set base-iscsi iscsi:${iscsi-server}::::${base-iqn}
改成
1set base-iscsi iscsi:${iscsi-server}:::1:${base-iqn}