使用PXE安装CentOS 6

最近在配置一台服务器的时候遇到了一个不大不小的麻烦。有一台 Dell 的服务器需要重新安装系统,然而这台十年前的 Dell 服务器由于光驱和USB接口都出现了未知的故障,从而并不能使用传统的光盘和 USB 磁盘来安装系统。于是唯一能利用的就只有网络,也就是说只能通过 PXE 来引导系统。然而通过 PXE 安装的过程并没有想象中的那么简单。

0x01 什么是PXE?

PXE 是 Preboot eXecution Environment 的缩写,意为“预启动执行环境”,这种机制可以使得计算机通过网络来引导。现在的绝大多数电脑都可以设置通过 PXE 启动。PXE 的工作原理是 PXE Client 通过DHCP获取IP并由DHCP服务器告诉客户端启动文件的位置,再通过TFTP协议传输引导文件,最终引导电脑启动。详细的流程见下图:

pxe

 

0x02 所需要的准备工作

既然PXE是通过DHCP获取引导文件的,那么必须要准备DHCP服务器,同时还必须准备传输引导文件用的TFTP服务器。本次部署将采用一台安装有CentOS的电脑来充当服务器,并且网络拓扑图如下:

network_topological

其中在交换机与公网连接之间存在有DHCP服务器负责地址分配。有人可能会问,既然存在DHCP服务器,那么我们自己搭建的DHCP服务器岂不是没有用了?事实上,这个问题大可不必担心,客户端在向网络中请求DHCP的时候会优先选择就近的DHCP服务器,我们用另一台PC搭建的DHCP服务器显然比交换机外部的DHCP服务器更快地响应来自客户端的DHCP请求。

在引导并启动Linux内核之后客户端就开始通过HTTP/FTP获取安装文件,这时候我们还必须指定安装文件的地址。如果你连接某个镜像站的速度很快的话,可以指定镜像站的地址。而如果条件不允许我们还必须搭建一个HTTP或者FTP服务器。以下以用vsftpd搭建的FTP服务器为例。

0x03 开始配置

在Terminal中执行如下命令安装dhcp、tftp-server、syslinux、vsftpd:

yum install dhcp tftp-server syslinux vsftpd –y

关闭iptables以及SELinux

service iptables stop
setenforce 0

或修改/etc/selinux/config中

SELINUX=disabled

再执行setenforce 0

DHCP服务器配置

vim /etc/dhcpd/dhcp.conf
DHCPD_INTERFACE="eth0";  #设置dhcp服务监听的网卡,一般为eth0,请按实际情况确定
ddns-update-style            none;
ignore client-updates;
option routers               192.168.1.101; #本机IP,以192.168.1.101为例
option domain-name-servers   8.8.8.8, 114.114.114.114;
allow booting;
allow bootp;
#添加子网
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.200; #DHCP分配的IP段,要包含本机IP
        option routers 192.168.1.101;
        filename "pxelinux.0";  #启动文件
        next-server 192.168.1.101; #引导服务器,填本机IP
        default-lease-time 600;
        max-lease-time 7200;
}

接着启动dhcpd服务

service dhcpd start

如果遇到错误,可以通过以下命令查看

tail –n 50 /var/log/messages

tftp服务器配置

tftp服务器需要xinetd的支持,如果没有安装则必须先安装xinetd

查看tftp服务器的配置文件

vim /etc/xinetd.d/tftp
service tftp
{
	disable	= no
	socket_type		= dgram
	protocol		= udp
	wait			= yes
	user			= root
	server			= /usr/sbin/in.tftpd
	server_args		= -s /var/lib/tftpboot
	per_source		= 11
	cps			= 100 2
	flags			= IPv4
}

保持默认即可,注意这里的tftp服务器的根目录是/var/lib/tftpboot

执行

service xinetd start

启动tftp服务器

准备启动文件

cd /var/lib/tftpboot
mkdir pxeboot

复制syslinux的文件到该目录下

cp /usr/share/syslinux/pxelinux.0 ./
cp /usr/share/syslinux/menu.c32 ./
cp /usr/share/syslinux/memdisk ./
cp /usr/share/syslinux/mboot.c32 ./
cp /usr/share/syslinux/chain.c32 ./

接着从要安装的系统镜像中提取内核,可以从安装光盘的images/pxeboot/下找到initrd.img和vmlinuz文件,复制到/var/lib/tftpboot/pxeboot/下面,也可以从镜像站下载(参考:http://mirror-site-url/centos/7/os/x86_64/images/pxeboot/)

配置ftp(如果通过镜像站下载安装文件,则忽略此步骤)

vsftpd默认配置就已经能够满足我们的需要了,直接执行

service vsftpd start

即可启动,ftp的根目录为/var/ftp

可以在其中新建一个os文件夹,只需要把CentOS安装镜像的文件全部复制到其中即可,当然可以mount镜像然后创建软连接,然而实测发现权限设置似乎存在问题导致不能访问,所以还是建议复制。

配置启动菜单

PXE启动的时候通过读取远程目录(即为本机的/var/lib/tftpboot)下的pxelinux.cfg目录中的配置文件显示启动菜单,当然这个启动菜单是可以自定义的,但是我们的任务是装系统而不是欣赏启动菜单,所以能完成基本功能就好。

依次执行

mkdir pxelinux.cfg
cd pxelinux.cfg
vim default

编辑内容为

default menu.c32
prompt 0
timeout 600
ONTIMEOUT local

MENU TITLE PXE Boot Menu

LABEL Install CentOS 6 via FTP
 MENU LABEL Install CentOS 6
 KERNEL images/vmlinuz
 APPEND initrd=images/initrd.img method=ftp://192.168.1.101/os

注:此处URL末尾不能加斜杠。

从启动菜单可以看出,这里的method指向的正是网络上的安装文件路径,如果说使用镜像站下载安装文件便可以改为镜像站的系统路径(参考:http://mirror-site-url/centos/7/os/x86_64/)。

执行安装

接着便可以启动那台Dell的服务器,选择从PXE启动。然后进入我们设定的启动菜单,加载内核并进入安装程序,设置好区域、语言、网络,便从我们指定的地址下载一些img文件,最后可以进入图形化的安装程序。

注意,如果采用从镜像站下载安装文件安装的话,有可能在安装的时候出现不能下载文件的问题,这时必须在安装程序启动之后设置网络之前关闭我们自己搭建的DHCP服务器,让安装程序去真正的DHCP服务器那里获得IP地址并连接到网络,否则可能无法正常下载安装文件。

0x04 参考文献

[1] PXE 安装 CentOS 6.4(CentOS-6.4-x86_64-bin-DVD1.iso) (http://www.javaarm.cn/faces/display.xhtml?tid=2972)
[2] 预启动执行环境——Wikipedia (http://zh.wikipedia.org/zh/%E9%A2%84%E5%90%AF%E5%8A%A8%E6%89%A7%E8%A1%8C%E7%8E%AF%E5%A2%83)
[3] 鳥哥的 Linux 私房菜 — 安裝伺服器與 kickstart(http://linux.vbird.org/linux_enterprise/0120installation.php)
[4] 鳥哥的 Linux 私房菜 — DHCP 伺服器(http://linux.vbird.org/linux_server/0340dhcp.php)
[5] CentOS 6.4下PXE+Kickstart无人值守安装操作系统(http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html)

《使用PXE安装CentOS 6》上有4条评论

    1. 其实应该说是类似于“有人联系我做广告”这种的吧,然后以此来补贴一小部分主机的费用。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注