@cdmonkey
2015-05-20T09:26:51.000000Z
字数 9555
阅读 2180
未分类
Kickstart自动化部署安装服务器:
随着公司业务不断增加,经常需要采购新的服务器,并要求安装Linux系统,并且要求Linux版本要一致,方便日后的维护和管理。但每次人工安装Linux系统都会花费很多的时间,如果我们有办法能够节省一次次的系统安装时间岂不更好。大中型互联网公司一次采购服务器上百台,如果采用人工手动一台一台的进行安装,一个人得搞坏N张安装光盘,得多少个加班加点才能完成这项『艰巨』的任务呢?我们可以看到,完全手动来完成这样的工作太浪费时间和人力了,有没有自动化的安装平台呢?通过一台已经存在的系统然后克隆或者复制到新的服务器呢?
Kickstart可以毫不费力的完成这项工作。
虚拟机克隆操作:
sed -i '/^UUID/d; /^HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth0>/etc/udev/rules.d/70-persistent-net.rulesreboot
PXE(Preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远程服务器下载镜像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP协议下载一个启动软件包到本机内存中执行。
要使用Kickstart安装平台,包括的完整安装架构为:
Kickstart+DHCP+FTP+TFTP+PXE,从架构可以看出,大致需要安装的服务。
PXE环境的配置预热:
关闭防火墙和SELinux。
[root@Linux-M ~]# sestatusSELinux status: disabled[root@Linux-M ~]# /etc/init.d/iptables statusiptables: Firewall is not running.#经确认, 防火墙以及SELinux都被关闭了。
Kickstart怎么和PXE有联系?PXE是什么东西?
Kickstart无人值守安装CentOS,也就是通过网络安装CentOS系统,而且在安装的过程不需要人工干预系统的安装。系统会按照你配置好的步骤进行安装,而网络安装CentOS系统必须需要网卡的支持。
网卡要想去下载远程服务器上的相关系统镜像文件,必须支持PXE。
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel设计的协议,它可以使计算机通过网络启动。该协议分为客户端(Client)和服务器端(Server),PXE客户端在网卡的ROM中,当计算机引导时,BIOS把PXE客户端调入内存执行,并显示出命令菜单,经用户选择后,PXE客户端将放置在远端的操作系统通过网络下载到本地运行。
既然是通过网络传输,就需要IP地址。也就是说在其启动过程中,客户端请求服务器分配IP地址之后,PXE客户端使用TFTP Client通过TFT协议下载启动安装程序所需的文件。
简单地说PXE网络安装,客户机通过支持PXE的网卡向网络中发送请求DHCP信息的广播,请求IP地址等信息,DHCP服务器给客户端提供IP地址和其它信息(TFTP服务器、启动文件等),之后请求并下载安装需要的文件。在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。
下图中介绍了Linux中自动安装系统的详细工作过程:

第一步:PXE Client向DHCP发送请求
首先,将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,选择基本所有的网卡都支持网络启动。通过PXE BootROM(自启动芯片)会以UDP方式发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。
第二步:DHCP服务器提供信息
DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个『提供』响应,这个响应中包含了为客户端分配的IP地址、PXELinux启动程序(TFTP)位置,以及配置文件所在位置。
第三步:PXE客户端请求下载启动文件
客户端收到DHCP服务器的『回应』后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:
pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
第四步:Boot Server响应客户端请求并传送文件
当服务器收到客户端的请求后,他们之间将有更多的信息在客户端与服务器之间作应答,用以决定启动参数。BootROM由TFTP通讯协议从Boot Server下载启动安装程序所必须的文件(上一步提到的)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。
第五步:请求下载自动应答文件
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装Linux。如果是通过网络安装(NFS/FTP/HTTP),则会在这个时候初始化网络,并定位安装源位置。或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。
接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
第六步:客户端安装操作系统
将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包(系统镜像)。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。
以上就是PXE网络启动的整个过程,下面我们开始正式的配置。
下面安装的所有服务均位于同一台主机上,即通过一台模板机来完成整个无人值守安装。对于DHCP服务器的安装请参阅相关文档。
CentOS的无人值守安装需要DHCP服务器的配合使用,并且还需要对DHCP服务进行特殊配置。
配置之前要确认下本机的IP地址,因为DHCP服务提供的地址池要和本机的IP地址在同一个网段内。
# dhcpd.confddns-update-style interim; #动态协商。ignore client-updates;allow booting;allow bootp;subnet 172.16.1.0 netmask 255.255.255.0 {range dynamic-bootp 172.16.1.35 172.16.1.65;option domain-name-servers 8.8.8.8;option routers 172.16.1.2;option subnet-mask 255.255.255.0;option time-offset -18000;#添加TFTP服务器的地址,以及客户端所要获取到的配置文件名称。next-server 172.16.1.30; #PXE client will try to connect the nextserver for bootstrap.filename "pxelinux.0";host ns {hardware ethernet 00:0C:29:73:BB:A6;fixed-address 172.16.1.31;}}#必须要存在的指令是subnet,至少有一个,后面跟网段以及子网掩码,后面大括号中的内容是针对该网段的相关配置。#在subnet之外的配置内容都是针对全局的配置。
#配置完成后需要检测配置文件的语法:[root@Linux-M ~]# /etc/init.d/dhcpd configtestSyntax: OK#然后就可以启动DHCP服务了。[root@Linux-M tftpboot]# /etc/init.d/dhcpd startStarting dhcpd: [ OK ]#设置为开机自启动。[root@Linux-M ~]# chkconfig dhcpd on
我们新建一台虚拟机(仅仅是创建,并不安装系统,过程略),然后开机按F2键,进入BIOS设置,如图所示:

切换至Boot选项卡,将NetWork boot from Intel E1000条目移动到最上端。保存并重新启动主机,然后我们就可以通过DHCP服务器获取到相关的配置内容了:

TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。此协议设计的目的是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证。
PXE启动映像文件由syslinux提供,我们只要安装syslinux,就会生成一个pxelinux.0文件,只需要将该文件复制到TFTP根目录即可。
pxelinux.0文件的作用是加载系统引导文件。
[root@Linux-M ~]# yum install -y tftp-server syslinux#查看syslinux安装后,所生成的文档:[root@Linux-M ~]# rpm -ql syslinux |grep pxe*/usr/share/doc/syslinux-4.04/pxelinux.txt#拷贝pxelinux.0文件到TFTP服务器的根目录:[root@Linux-M ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
#修改TFTP的配置文件,将其上传和下载的权限开启(默认是不启用的):[root@Linux-M ~]# sed -i 's#= yes#= no#g' /etc/xinetd.d/tftp[root@Linux-M ~]# vim /etc/xinetd.d/tftpservice tftp{socket_type = dgramprotocol = udpwait = nouser = rootserver = /usr/sbin/in.tftpdserver_args = -s /var/lib/tftpbootdisable = noper_source = 11cps = 100 2flags = IPv4}#启动服务,并设置为开机自启动:[root@Linux-M ~]# /etc/init.d/xinetd startStarting xinetd: [ OK ][root@Linux-M ~]# chkconfig xinetd on
以上我们把pxelinux.0文件已经复制到TFTP的根目录下。要实现远程安装系统,就需要在tftpboot目录下复制有关系统内核和系统安装时的相关文件。这些文件我们可以通过CentOS镜像网站进行下载,比如国内的阿里云网站,截图演示如下:

当然也可以通过把本地的镜像文件进行挂载使用,本实验我们是先把本地的镜像文件进行挂载:
[root@Linux-M ~]# mount /dev/cdrom /mntmount: block device /dev/sr0 is write-protected, mounting read-only[root@Linux-M ~]# ls /mnt/isolinux/boot.cat grub.conf isolinux.bin memtest TRANS.TBL vmlinuzboot.msg initrd.img isolinux.cfg splash.jpg vesamenu.c32
isolinux目录中主要是存放光盘启动时的安装界面信息,在这里面有几个文件是我们需要的。
boot.msg:引导模块的菜单选项
splash.jpg:启动时的背景文件
vesamenu.c32:用于设置菜单模块
vmlinuz:是可引导的、压缩的内核文件。
initrd.img:在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程的文件系统。
[root@Linux-M ~]# cp -rp /mnt/isolinux/* /var/lib/tftpboot/
以上文件复制完毕后,我们来创建pxelinux.cfg目录(主要是用来存放default文件)及default(主要是用来系统正常引导后的相关配置)文件。
[root@Linux-M ~]# mkdir /var/lib/tftpboot/pxelinux.cfg#因为default文件的内容格式比较复杂,所以在此我们不建议手工创建。系统镜像文件中已经为我们提供了一个模版:/var/lib/tftpboot/isolinux.cfg#拷贝default文件:[root@Linux-M ~]# cp /var/lib/tftpboot/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default#在修改该文件之前,我们下查看下内容(内容略):[root@Linux-M ~]# less /var/lib/tftpboot/pxelinux.cfg/default#可以发现,default文件的内容非常多。其实有很多是我们不需要的。修改该配置文件,只保留如下内容:------------------------default vesamenu.c32#prompt 1timeout 600display boot.msgmenu background splash.jpgmenu title Welcome to install CentOS 6.5!menu title Welcome to CentOS 6.5!menu color border 0 #ffffffff #00000000menu color sel 7 #ffffffff #ff000000menu color title 0 #ffffffff #00000000menu color tabmsg 0 #ffffffff #00000000menu color unsel 0 #ffffffff #00000000menu color hotsel 0 #ff000000 #ffffffffmenu color hotkey 7 #ffffffff #ff000000menu color scrollbar 0 #ffffffff #00000000label linuxmenu label ^Install or upgrade an existing systemmenu defaultkernel vmlinuzappend initrd=initrd.img ks=ftp://172.16.1.30/ks.cfg------------------------#其中最后一行是我们需要注意的。这里指定的是需要kickstart生成的配置文件,而且是使用的ftp方式访问该文件。#我们先把该文件的名称填写进来。
远程安装系统,客户端需要下载安装过程中所需要的软件包,所以需要使用NFS、HTTP或者FTP的方式提供下载。我们这里使用FTP的方式。
[root@Linux-M ~]# yum install -y vsftpd autofs[root@Linux-M ~]# mkdir /data#创建存放镜像文件的目录。#然后我们就可以将镜像文件上传到该目录下(可以通过WinSCP工具):[root@Linux-M ~]# du -sh /data/*4.2G /data/CentOS-6.5-x86_64-bin-DVD1.iso
[root@Linux-M ~]# echo "/var/ftp/pub /etc/auto.ftp" >>/etc/auto.master#auto.ftp这个文件默认是不存在的,下面创建该文件并添加相应内容:[root@Linux-M ~]# vim /etc/auto.ftpc65 -fstype=iso9660,ro,loop :/data/CentOS-6.5-x86_64-bin-DVD1.iso#重启服务:[root@Linux-M ~]# /etc/init.d/autofs restartLoading autofs4: [ OK ]Starting automount: [ OK ]#查看一下挂载情况:[root@Linux-M ~]# df -ThFilesystem Type Size Used Avail Use% Mounted on.../data/CentOS-6.5-x86_64-bin-DVD1.iso iso9660 4.2G 4.2G 0 100% /var/ftp/pub/c65-----------------#Start vsftpd service:[root@Linux-M ~]# /etc/init.d/vsftpd startStarting vsftpd for vsftpd: [ OK ]
[root@Linux-M ~]# adduser -g ftp -s /sbin/nologin test[root@Linux-M ~]# passwd test#编辑用户列表文件,允许test用户访问FTP:[root@Linux-M ~]# echo "test" >>/etc/vsftpd/user_list
首先要安装Kickstart软件包。安装完毕后,你会在/root目录下生成anaconda-ks.cfg文件。该文件就是Kickstart自动应答文件的一个模版。
[root@Linux-M ~]# yum -y install system-config-kickstart[root@Linux-M ~]# lltotal 44-rw-------. 1 root root 1127 Nov 13 17:46 anaconda-ks.cfg...
如果你对这个配置文件比较熟悉的话,你可以直接把该文件复制一份到/var/ftp/pub目录下,并重命名为ks.cfg。修改保存后,就可以去启动客户端。但是对于不熟悉该自动应答配置文件的童鞋来说,还是通过图形界面方式来生成自动应答文件吧。
注意:图形界面生成Kickstart自动应答文件,一定要在Kickstart服务器上安装图形界面。
请参考:自动应答文件详解
[root@Linux-M ~]# vim anaconda-ks.cfg# Kickstart file automatically generated by anaconda.#version=DEVELinstall#Use Network installationurl --url="ftp://172.16.1.30/pub/c65"lang en_US.UTF-8keyboard usnetwork --onboot no --device eth0 --bootproto dhcp --noipv6#设置root密码,这里明文的,服务器安装成功后自行修改:rootpw 123456#关闭防火墙:firewall --disabled#认证加密方法:authconfig --enableshadow --passalgo=sha512textselinux --disabledreboottimezone --utc Asia/Shanghai#指定引导装载程序怎样被安装,对于安装和升级,这个选项都是必需的。bootloader --location=mbr --driveorder=sdazerombr#下面是分区信息:#在创建新分区之前,从系统上删除分区。默认不会删除任何分区。clearpart --all --initlabelpart /boot --fstype=ext4 --asprimary --size=200part swap --asprimary --size=2048part / --fstype=ext4 --grow --asprimary --size=200#服务器上安装哪些软件包:%packages --nobase@base@compat-libraries@core@debugging@development@dial-up@hardware-monitoring@performance@server-platform@server-policy@workstation-policypaxsgpiodevice-mapper-persistent-datasystemtap-client%end
应答文件支持预安装脚本和安装后脚本。如果是安装后脚本(例如系统完成安装后执行的优化脚本),那么这部分内容必须在应答文件的最后而且用“%post”命令开头。
http://blog.debugo.com/kickstart-install-centos/
...%post --interpreter=/bin/bash(cd /tmp/usr/bin/wget ftp://172.16.1.30/Install.sh/bin/bash /tmp/Install.sh)2>&1 >> /root/post-install.log%end
#拷贝应答文件:[root@Linux-M ~]# cp anaconda-ks.cfg /var/ftp/ks.cfg
至此,
上述配置完毕后,我们就可以启动客户端来进行CentOS的网络安装,在客户端的BIOS中需要配置PXE启动。


如果此时遇到“PXE-E32:TFTP OPen timeout”的报错,可以进行下面的服务重启操作:
[root@Moban ~]# /etc/init.d/xinetd restartStopping xinetd: [ OK ]Starting xinetd: [ OK ]
然后,在读取应答文件时遇到了错误:

出现了Unable to download the kickstart file说明我的所有配置都正确了,但是却无法读取到自动应答文件。是不是权限的问题?
[root@Linux-M ~]# ll /var/ftp/ks.cfg-rw------- 1 root root 810 Dec 2 19:34 /var/ftp/ks.cfg[root@Linux-M ~]# chmod 555 /var/ftp/ks.cfg[root@Linux-M ~]# ll /var/ftp/ks.cfg-r-xr-xr-x 1 root root 810 Dec 2 19:34 /var/ftp/ks.cfg
权限修改完成后,通过浏览器可以正常的读取到应答文件ks.cfg(如图所示),看来权限的确有问题,因为之前通过浏览器无法读取该文件,总是报550 failed to change directory的错误。

重新启动客户端,顺利的读取到了应答文件,这回一切正常了:

关于安装过程中出现“Unsupported Hardware Detected”的错误:
http://lvii.github.io/system/2014/06/07/centos-6.3-kickstart-install-unsupport-hardware-detected/