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的服务;
且其中:
- DHCP服务必须要能够提供客户端的网络参数,还要告知客户端TFTP所在的位置;
- TFTP则提供客户端的boot loader及kernel file下载路径。
还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文档(安装镜像的解压文档),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务。
2. PXE流程
如下图:图片来源于网络,虽不易理解,但细节描述的很好。
-
Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将pxe环境下的Boot loader文档pxelinux.0的位置信息传送给Client。
-
Client向PXE Server上的TFTP请求pxelinux.0,TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0。
-
Client执行接收到的pxelinux.0文档。
-
Client向TFTP请求pxelinux.cfg文档(其实它是目录,里面放置的是是启动菜单,即grub的配置文档),TFTP将配置文档发回Client,继而Client根据配置文档执行后续操作。
-
Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文档发送给Client。
-
Client向TFTP发送根文档请求信息,TFTP接收到消息之后返回Linux根文档系统。
-
Client加载Linux内核(启动参数已经在4中的配置文档中设置好了)。
-
Client通过nfs/ftp/http下载系统安装文档进行安装。如果在4中的配置文档指定了kickstart路径,则会根据此文档自动应答安装系统。
2) 部署PXE
1. 部署环境说明
如下图,172.16.192.137是PXE服务器,提供dhcp+tftp+nfs服务。其他该网段内的主机为待安装系统的主机羣。
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
然后vim /etc/selinux/config
,将SELINUX=enforce
改为SELINUX=disabled
启动DHCP服务,并将它设为开机自启动,也重启一下dhcp服务
$ /etc/init.d/dhcpd start
$ service dhcpd restart
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
4. 将Linux内核文档放到相应目录
在这里我们应该挂载我们的安装光盘,我这里的安装光盘已经挂载好了:
首先在/media下创建一个cdrom目录,然后再挂载
$ mkdir /media/cdrom
$ mount -r /dev/cdrom1/ /media/cdrom
现在我们从刚挂载的光盘中开始复制内核文件以及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/
还要复制一个叫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
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/
绑定后还得要启用我们的httpd服务,别忘记了,而后查看有没有80端口:
$ service httpd start
$ ss -tnl
这样子文件共享服务就设定OK了,可以用http://本机服务器IP地址/centos6.5
,这样就可以访问得到了,安装树就这样OK了。
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里面的配置跟我们设定好的一致,要不然找不到文件路径:
$ vim /var/www/html/ks.cfg
改好了保存退出
怎么让启动时加载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
改好后:wq!强行写入,退出即可
7. 关闭防火墙
$ service iptables stop
好了,到这里我们算是配置好了我们的自动化安装环境了,那就创建一个虚拟机来试验一下,看看我们的自动化安装界面可以启动了没有~
3) 开机测试
1. 创建虚机时选择稍后安装操作系统,这将创建一个空白硬盘的虚机
2. 嘿嘿,空白硬盘也能见到熟悉的界面啦~
3. 等待完成
4. 系统安装完毕,这样我们就实现了PXE+kickstart无人值守安装CentOS的全过程
4) 总结
- 对Linux系统不是特别熟悉的同学,遇到问题时,可以打开新的terminal输入如下命令查看动态日志信息,对理解问题发生的根源是非常有帮助的:
$ tail -F /var/log/messages
- 这个自动化安装功能还是非常便捷的,就好像windows AD部署利用组策略自动安装软件一样。感谢经验丰富的同事jintai、Sean,他们的亲手指导以及他们写的文档都能让自己学习更多知识!