gPXE/iPXE 初探

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/这一目录结构下面下载vmlinuzinitrd.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中定义的KERNELinitrd项目一致。
至此引导用的服务器配置基本完成。

客户端的配置

进入 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。
接着就可以通过你配置好的服务器启动并安装了。

参考

中国科学技术大学网络启动服务
iPXE – open source boot firmware [start]

发布者

hcl

TechOtaku站长。

发表评论

电子邮件地址不会被公开。 必填项已用*标注