PXE+Kickstart无人值守安装CentOS

1) 前言

主机系统大家都装过,大部分安装过程很简易,光盘/U盘不一会时间就搞定了。但如果要给几十台或上百台客户端主机安装操作系统,每一台都拿张安装光盘去装系统就太不现实了,在生产环境中也不会被允许的,要实现为多台主机自动安装操作系统,我们怎么实现自动化安装呢?

这就要来讲讲PXE了,PXE就是为这种给多台主机自动化安装操作系统而生的,那接下来我们就来基于DHCP完成自动化为多台主机安装操作系统。

说明:本文环境是基于CentOS6.5系统,不同操作系统或版本使用的命令会有些许差别;实验环境为VMware Workstation 12 Pro,为不影响实验结果,关闭了虚拟网络编辑器中NAT模式的DHCP功能。

2) 什么是PXE

1. PXE说明

所谓的PXE是Preboot Execution Environment的缩写,字面上的意思是开机前的执行环境。

要达成PXE必须要有两个环节:

(1)一个是客户端的网卡必须要支持PXE用户端功能,并且开机时选择从网卡启动,这样系统才会以网卡进入PXE客户端的进程;

(2)一个是PXE服务器必须要提供至少含有DHCP以及TFTP的服务;

且其中:

还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文档(安装镜像的解压文档),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务。

2. PXE流程

如下图:图片来源于网络,虽不易理解,但细节描述的很好。

流程

2) 部署PXE

1. 部署环境说明

如下图,172.16.192.137是PXE服务器,提供dhcp+tftp+nfs服务。其他该网段内的主机为待安装系统的主机羣。

host

2. 部署DHCP服务

安装DHCP和httpd服务,没安装有就得安装,安装有了就不用再装了,这步就不多说了:

$ yum -y install dhcp

安装好dhcp之后,就去配置dhcp服务里的一些参数了,能让dhcp服务告诉客户端主机tftp服务器在什么位置,用net-server IP设定,还要设定文件名为pxelinux.0

编辑/etc/dhcp/dhcpd.conf

$ vim /etc/dhcp/dhcpd.conf

配置文件

配置完成后,需要关闭SELINUX,首先

$ setenforce 0

setenforce

然后vim /etc/selinux/config,将SELINUX=enforce改为SELINUX=disabled

selinux

启动DHCP服务,并将它设为开机自启动,也重启一下dhcp服务

$ /etc/init.d/dhcpd start
$ service dhcpd restart

start dhcp

3. 部署TFTP

安装tftp服务,但由于tftp服务由xinetd服务管理并由xinetd来唤醒的,所以也要安装xinetd服务,tftp-server是服务器端要安装的,tftp是客户端要安装的。

$ yum -y install tftp-server
$ yum -y install xinetd

然后启动这两个服务:

$ service xinetd restart
$ chkconfig tftp on

xinetd restart

4. 将Linux内核文档放到相应目录

在这里我们应该挂载我们的安装光盘,我这里的安装光盘已经挂载好了:

首先在/media下创建一个cdrom目录,然后再挂载

$ mkdir /media/cdrom
$ mount -r /dev/cdrom1/ /media/cdrom

mount media

现在我们从刚挂载的光盘中开始复制内核文件以及init等一些文件到/tftp/lib/tftpboot目录下:

$ cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
$ cp /media/cdrom/isolinux/boot.msg /var/lib/tftpboot/
$ cp /media/cdrom/isolinux/splash.jpg /var/lib/tftpboot/
$ cp /media/cdrom/isolinux/vesamenu.c32 /var/lib/tftpboot/

copykernel

还要复制一个叫pxelinux.0这个文件,这个文件是由syslinux提供的,要安装这个程序包才会有这个文件,那我们就装吧!

$ yum -y install syslinux

安装好了之后就复制这个文件吧:

$ cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

在这里pxelinux.0取代了isolinux,他工作时要依赖的配置文件叫isolinux.cfg,虽然pxelinux.0取代了isolinux,但是依然需要一个配置文件,这样我们就复制isolinux.cfg到/var/lib/tftpboot/pxelinux.cfg/目录下,这里pxelinux.cfg目录要我们事先创建好,同时复制过来的配置文件要改名为default:

$ mkdir pxelinux.cfg
$ cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

pxelinuxcfg

5. 创建安装树

到这里我们还没有完成,他还不能让我们的系统自动化安装,因为我们还没有ks自动应答文件,也没有安装树,在安装时必须提供所依赖的各种rpm包,我们知道HTTP可以向外提供安装树,那就用到我们的httpd了,我这里已经安装好了httpd服务了,如果没有就得安装哦,httpd的服务路径在/var/www/html下,这时我们可以绑定我们之前挂载好的光盘到这里来,这样不就有安装树了么,当然在html下创建个目录会好点,这里我们创建成centos:

$ mkdir /var/www/html/centos6.5
$ mount --bind /media/cdrom/ /var/www/html/centos6.5/

bind

绑定后还得要启用我们的httpd服务,别忘记了,而后查看有没有80端口:

$ service httpd start
$ ss -tnl

httpdstart

这样子文件共享服务就设定OK了,可以用http://本机服务器IP地址/centos6.5,这样就可以访问得到了,安装树就这样OK了。

localhost/centos6.5

6. Kickstart

而后我们就开始复制Kickstart文件了,这个文件在/root/目录下,叫anaconda-ks.cfg,我们把他复制到/var/www/html/下,改名为ks.cfg

$ cp /root/anaconda-ks.cfg /var/www/html/ks.cfg

由于这个文件只有管理员可以访问,复制过来之后要给个可读的权限他:

$ chmod +r /var/www/html/ks.cfg

ks.cfg

再编辑一个这个ks.cfg里面的配置跟我们设定好的一致,要不然找不到文件路径:

$ vim /var/www/html/ks.cfg    

ks.cfg1

ks.cfg2

改好了保存退出

怎么让启动时加载kickstartk呢,那就要在/var/lib/tftpboot/pxelinux.cfg/defaule文件的label为linux下的append后面补上 ks=http://172.16.192.137/ks.cfg

编辑/var/lib/tftpboot/pxelinux.cfg/defaule

$ vim /var/lib/tftpboot/pxelinux.cfg/default

ks.cfg3

改好后:wq!强行写入,退出即可

7. 关闭防火墙

$ service iptables stop

iptablesstop

好了,到这里我们算是配置好了我们的自动化安装环境了,那就创建一个虚拟机来试验一下,看看我们的自动化安装界面可以启动了没有~

3) 开机测试

1. 创建虚机时选择稍后安装操作系统,这将创建一个空白硬盘的虚机

nocd

2. 嘿嘿,空白硬盘也能见到熟悉的界面啦~

installation

3. 等待完成

installation1

4. 系统安装完毕,这样我们就实现了PXE+kickstart无人值守安装CentOS的全过程

finished

4) 总结

$ tail -F /var/log/messages
Table of Contents