视频介绍

经过研究,终于可以将ESXI的系统通过IPXE网络启动安装到无盘的软路由或者PC上了,当然也可以通过这种方法安装window、linux等等其他的系统。


一、编译IPXE增加功能与自定义脚本

一、iPXE 概要

iPXE 官网的介绍是这样的:iPXE 是领先的开源网络启动固件。它提供了一个完整的 PXE 实现,增强了其他功能,例如通过 HTTP 从 Web 服务器启动、从 iSCSI SAN 启动 等等.

二、下载 iPXE 源码并编译(编译环境ubuntu)

官方编译文档:
http://ipxe.org/download
http://ipxe.org/appnote/buildtargets#special_targets

git 下载 iPXE 源码

git clone git://git.ipxe.org/ipxe.git

git clone https://github.com/ipxe/ipxe.git

make 编译

cd ipxe/src
make bin/undionly.kpxe

编译后会在 bin 目录下生成 undionly.kpxe 文件,这个就是 iPXE 网络启动固件

make 编译64位

官网说明文档:http://ipxe.org/appnote/buildtargets#special_targets

cd ipxe/src
make bin-x86_64-pcbios/undionly.kpxe

编译前先安装这些依赖环境
gcc (version 3 or later)
binutils (version 2.18 or later)
make
perl
liblzma or xz header files
mtools
mkisofs (needed only for building .iso images)
syslinux (for isolinux, needed only for building .iso images)

开启其他功能

编译好以后默认开启的功能有
DNS、HTTP、iSCSI、TFTP、AoE、ELF、MBOOT、PXE、bzImage、Menu、PXEXT
在上图的启动界面可以看到。

 如果要加载 HTTPS web 的内容,那就要开启 HTTPS
还有一些系统启动需要开启 COMBOOT 功能
下面以开启 HTTPS 和 COMBOOT 功能为例进行编译
 修改源码下 src/config/general.h 文件

vi config/general.h

找到 DOWNLOAD_PROTO_HTTPS,将 DOWNLOAD_PROTO_HTTPS 前面有#undef 改成 #define
找到 IMAGE_COMBOOT 将前面的注释去掉

#define DOWNLOAD_PROTO_HTTPS
#define IMAGE_COMBOO

或者将上面的代码添加到源码目录 src/config/local/general.h 文件里

修改完用前面的 make bin/undionly.kpxe 重新编译即可

现在用新生成的 undionly.kpxe 固件网络启动后就多了 HTTPS 和 COMBOOT

添加自定义脚本

官方文档:http://ipxe.org/embed

默认编译启动后按 Ctrl+B 进入命令模式
可以输入下面的命令进入到外国友人做的 menu 界面
注:首先你网络启动的 DHCP 服务器设置的 DNS 能访问网络

dhcp
chain --autofree https://boot.netboot.xyz

进入后如图

如果想网络启动后直接进入 menu 界面,而不通过命令行输入命令,那就需要编译的时候加入自定义脚本
我们把上面的进入 menu 的代码编译进固件

在源码 src 目录下新建脚本文件 script.ipxe,将上面的命令 copy 到文件

vi script.ipxe
#!ipxe
dhcp
chain --autofree https://boot.netboot.xyz

重新编译增加参数 EMBED=script.ipxe

make bin/undionly.kpxe EMBED=script.ipxe

使用新的 undionly.kpxe 网络引导,直接会进入 netboot.xyz 的 menu 界面

也可以使用自己的菜单界面
加入下面的自定义脚本

vi script.ipxe
#!ipxe
dhcp
chain --autofree tftp://${next-server}/boot.ipxe

网络启动后就能进入自己的菜单了

开启debug模式

有时候会遇到一些奇葩问题不知道如何解决,这时候可以开启debug模式,这里以开启iSCSI的debug为例

在编译的时候增加 DEBUG=iscsi 参数

ake bin/undionly.kpxe EMBED=script.ipxe DEBUG=iscsi

编译后用新固件引导启动,在sanhook iscsi命令的时候就会出现debug日志信息

已经编译好的包,直接可用

https://github.com/veelove/netboot-tftp

二、在群晖NAS里面开启ISCIS功能

三、群晖里面设置DHCP、TFTP和WEB服务器

开启 TFTP 服务

在PXE文件夹中创建两个文件夹 Grub和www

开启 PXE 并设置启动文件

网络启动测试

开启 WEB 服务

开启群晖 web station 并设置虚拟主机用来加载一些系统的引导文件

四、修改 tftp 根目录中的文件

五、通过网卡 DHCP 启动机器安装系统

六、安装完成启动系统

七、ROS 的 DHCP 

八、一些排查问题的命令

测试是否可以加载到iso文件安装包

命令:
initrd
例子: initrd http://10.10.10.250:88/Install/ESXI/123.iso # ip地址及端口号及路径改为你自己的

测试是否可以去读取上面加载到的安装包

chain memdisk iso raw

测试是否连接到群晖的ISCSI

由于群晖机型不同,ISCSI的LUN的序号默认也不同,这里举例 918+和3617+ ,3617默认的就是0 而918+默认的则是1

ISCSI LUN默认是0的代码:

sanhook iscsi:10.10.10.250::::ESXi:iqn.2000-01.com.synology:ipxe.ESXI

ISCSI LUN默认是0的代码:

sanhook iscsi:10.10.10.250:::1:iqn.2000-01.com.synology:ipxe.ESXI