gPXE/iPXE 是一个相对于多数主板自带 PXE 更高级的,支持更多功能的,基于 GPL 自由且开源的 PXE。而 iPXE 是 gPXE 的官方后继者。
在之前的文章《使用PXE安装CentOS 6》中,我们是直接利用主板自带的 PXE 对系统安装进行引导,但是这一 PXE 显得过于简单,根据文章中的介绍,其只能支持从本地网络的 DNS 服务器获取 IP 地址以及引导文件所存放的 TFTP 服务器。这里就存在着很多在实际情况中不方便进行操作的情况,比如放置于机房的服务器在一般情况下,就很有可能不能对机房的网络设置进行轻易的修改,那么在使用 PXE 进行网络引导的过程中,就可能需要更多的自定义的设置。gPXE/iPXE 自然就提供了这样的可能性。
起源
当然,最初接触到 gPXE 则是源自于一台 KVM 虚拟化的 VPS。一般情况下,KVM 虚拟化的 VPS 除了提供一般的操作系统的安装之外,还会提供一些操作系统的安装镜像,可供用户手动挂载进行安装。但是,一些 VPS 可能并不会提供上传镜像的渠道,只能提供有限的镜像。手上的某台 VPS 就是这样的情况。在 VPS 提供的 VNC 中,偶然看到了启动过程中一闪而过的 gPXE 的提示,于是就想到是否能够通过网络启动自定义镜像。而通过对 gPXE/iPXE 相关资料的查找,也确实发现这是一种可行的方法。
gPXE/iPXE 的使用
gPXE/iPXE 最大的特点就是支持 http 甚至 https 引导,这样就极大地提高了PXE网络启动的灵活性。
引导服务器的配置
引导服务器的配置上,首先仍然需要安装syslinux
组件,对于 CentOS,执行
yum install syslinux -y
接着准备一个引导用文件的目录,这里选择在大多数发行版默认的 Webroot下面建立一个netboot
目录,/var/www/netboot
。无论使用nginx还是Apache httpd等 Web 服务器程序,请确保可以通过http://{YOUR BOOT SERVER IP}/netboot
访问到这一目录下面的内容。这里对于 Web 服务器的配置不再赘述。
接着将引导所需要的文件放到这一目录之下
cp /usr/share/syslinux/pxelinux.0 /var/www/netboot/
cp /usr/share/syslinux/menu.c32 /var/www/netboot/
cp /usr/share/syslinux/memdisk /var/www/netboot/
cp /usr/share/syslinux/mboot.c32 /var/www/netboot/
cp /usr/share/syslinux/chain.c32 /var/www/netboot/
然后建立一个新的文件夹pxelinux.cfg
,用于存放启动所需要的启动菜单配置
mkdir -p /var/www/netboot/pxelinux.cfg
在下面建立一个新的文件default
,里面填写启动菜单配置,这里以网络启动 CentOS 的安装程序为例
default menu.c32
MENU TITLE Netboot Server
default menu.c32
prompt 0
timeout 600
ONTIMEOUT local
LABEL el7
MENU LABEL Install CentOS 7 x86_64
KERNEL images/vmlinuz
APPEND initrd=images/initrd.img inst.repo={CENTOS REPO ADDRESS} ip=dhcp
注意到配置里面,应当将{CENTOS REPO ADDRESS}
替换为CentOS系统仓库的地址,如果你计划使用速度较快的CentOS镜像站,则填写地址如下
http://mirror.centos.org/centos/7/os/x86_64/
如果你计划使用本地的ISO,可以在/var/www/netboot
下面建立一个文件夹centos7
,然后将安装CentOS所使用的ISO文件挂载到这一目录下。
mount /path/to/iso/CentOS-7-x86_64-DVD-1708.iso /var/www/netboot/centos7
然后将地址填写为
http://{YOUR BOOT SERVER IP}/netboot/centos7/
其中注意把{YOUR BOOT SERVER IP}
替换为此服务器的IP。
接下来在/var/www/netboot/
下面新建一个文件夹images
用于存放引导用的内核
mkdir -p /var/www/netboot/images
从任意CentOS镜像站的/7/os/x86_64/images/pxeboot/
这一目录结构下面下载vmlinuz
和initrd.img
,以官方镜像站为例
cd /var/www/netboot/images
wget http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/initrd.img
wget http://mirror.centos.org/centos/7/os/x86_64/images/pxeboot/vmlinuz
注意这两个文件的位置与pxelinux.cfg/default
中定义的KERNEL
、initrd
项目一致。
至此引导用的服务器配置基本完成。
客户端的配置
进入 gPXE/iPXE Shell
对于自带 gPXE/iPXE 的主板或者就类似于之前提到的 KVM 虚拟机,可以直接通过热键进入 gPXE/iPXE Shell,可以跳过这一部分。
对于没有自带 gPXE/iPXE 的主板,可以从 这里 下载一个小型的可启动的 ISO 文件用来引导。甚至可以通过EFI的模式进行引导。就如同一个安装系统用的镜像。
使用 gPXE/iPXE 引导安装程序
进入 gPXE/iPXE Shell 之后,依次键入如下命令并执行
dhcp
set 210:string http://{YOUR BOOT SERVER IP}/netboot/
chain ${210:string}pxelinux.0
注意将{YOUR BOOT SERVER IP}
替换为配置好的启动服务器的IP。
接着就可以通过你配置好的服务器启动并安装了。
您好,请问如何在没有自带 gPXE/iPXE 的主板的客户端上添加的引导程序
iPXE本身提供了可以引导的ISO和USB[1]。如果只是为了通过网络安装系统,也可以尝试使用更加方便的Netboot.xyz提供的光盘ISO引导[2]或USB引导[3]。
[1]: https://ipxe.org/download
[2]: https://netboot.xyz/docs/booting/iso
[3]: https://netboot.xyz/docs/booting/usb