1、什么是KickStart

KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。

2、PXE技术的基本原理

(1)客户端开机后,PXE BootROM(自启动芯片)获得控制权之前执行自我测试,然后以广播形式发出一个请求FIND帧。
(2)如果服务器收到客户端所送出的要求,就会送回DHCP回应,包括用户端的IP地址、预设通信通道,以及开机映像文件;否则服务器会忽略这个要求。
(3)客户端收到服务器发回的响应后则会回应一个帧,以请求传送启动所需文件,并把自己的MAC地址写到服务器端的Netnames.db文件中。
(4)将有更多的消息在客户端与服务器之间应答,用于决定启动参数。BootROM由TFTP通信协议从服务器下载开机映像文档。客户端使用TFTP协议接收启动文件后,将控制权转交启动块以引导操作系统,完成远程启动。

3、配置步骤

(1)配置DHCP服务器:用于给客户端提供IP地址及其它信息

Linux下KickStart+PXE无人值守装机服务器的配置_装机
[root@localhost ~]# more /etc/dhcp/dhcpd.conf  ddns-update-style interim; ignore client-updates; log-facility local7; allow booting; allow bootp;  subnet 192.168.244.0 netmask 255.255.255.0 { # 192.168.244.0是我设定的装机网段         option routers 192.168.244.200;         option subnet-mask 255.255.255.0;         option domain-name-servers 192.168.244.200; 
# 指定装机网段的IP地址范围         range dynamic
-bootp 192.168.244.100192.168.244.150;         default-lease-time21000;         max-lease-time43200;
# 指定TFTP服务器的IP地址(一般情况下TFTP服务器和DHCP服务器为同一台)                 next-server 192.168.244.200;         filename "/pxelinux.0"; }
Linux下KickStart+PXE无人值守装机服务器的配置_装机

(2)配置TFTP服务器:用于客户端PXE引导所需要的文件

Linux下KickStart+PXE无人值守装机服务器的配置_装机
[root@localhost ~]# mkdir /tftpboot  [root@localhost ~]# more /etc/xinetd.d/tftp  service tftp {         socket_type             = dgram         protocol                = udp         wait                    = yes         user                    = root         server                  = /usr/sbin/in.tftpd         server_args             = -u nobody -s /tftpboot         disable                 = no         per_source              = 11         cps                     = 1002         flags                   = IPv4 }
Linux下KickStart+PXE无人值守装机服务器的配置_装机

(3)web服务器的配置以及ks文件的修改

这里选择以web方式读取系统镜像,也可以选择搭建NFS或者FTP服务器。

DocumentRoot "/var/www/html"

mkdir -p /var/www/html/systemiso/centos/6.0/i386/
cp /root/anaconda-ks.cfg /var/www/html/systemiso/centos/6.0/i386/ks.cfg

将centos6.0-i386的系统镜像解压放到网站对应目录下面,修改ks.cfg

Linux下KickStart+PXE无人值守装机服务器的配置_装机
[root@localhost ~]# more /var/www/html/systemiso/centos/6.0/i386/ks.cfg  # Kickstart file automatically generated by anaconda.  #version=RHEL6 install #text #cdrom url --url http://192.168.244.200/systemiso/centos/6.0/i386/
lang en_US.UTF-8 keyboard us rootpw  --iscrypted $6$SFBKXp0kSytxgoWU$Xkq9FOUQ9slHzrcGbr3RIZEw47nPggdp.m2vnaalyq..fmKtd8v7.6sShxriiYbB0g5Y9PYOY8yKfiFD6td.Y/ firewall --service=ssh authconfig --enableshadow --passalgo=sha512 --enablefingerprint selinux --enforcing timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work #clearpart --none --drives=sda clearpart --all --initlabel  part /boot --fstype=ext4 --asprimary --size=100 part /var --fstype=ext4 --size=30000 part / --fstype=ext4 --size=10000  part swap --size=1000  #repo --name="centos"  --baseurl=file:///mnt/source --cost=100

%packages @chinese-support @core @server-policy %end
Linux下KickStart+PXE无人值守装机服务器的配置_装机

(4)PXE引导配置

PXE启动映像文件由syslinux提供,安装完syslinux之后,会生成一个pxelinux.0的文件,复制到/tftpboot目录下。

Linux下KickStart+PXE无人值守装机服务器的配置_装机
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /tftpboot/ [root@localhost ~]# mkdir /tftpboot/pxelinux.cfg/ [root@localhost ~]# mount /dev/cdrom /mnt/cdrom [root@localhost ~]# cp /mnt/cdrom/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
[root@localhost ~]# mkdir /tftpboot/CentOS-6.0-i386
[root@localhost ~]# cp /mnt/cdrom/isolinux/initrd.img vmlinuz /tftpboot/CentOS-6.0-i386 [root@localhost
~]# more /tftpboot/pxelinux.cfg/default  default menu.c32 prompt 0 menu title PXE Boot Menu MENU AUTOBOOT Starting Local System in # seconds      LABEL bootlocal       menu label <^0> Boot from local disk        menu default       KERNEL chain.c32 hd0        timeout 600  LABEL CentOS-6.0-i386         MENU LABEL <^1> CentOS-6.0-i386 System install         KERNEL CentOS-6.0-i386/vmlinuz         APPEND initrd=CentOS-6.0-i386/initrd.img ks=http://192.168.244.200/systemiso/centos/6.0/i386/ks.cfg        TEXT HELP         instll CentOS-6.0-i386 system         ENDTEXT  LABEL show-IP_MAC         MENU LABEL <^3> press [Tab] to show DHCP IP,gateway,MAC         IPAPPEND 3         TEXT HELP         ip=<dhcp-ip>:<dhcp-server-ip>:<gateway>:<netmask> BOOTIF=<MAC>         ENDTEXT  LABEL reboot         MENU LABEL <^4> reboot system         KERNEL reboot.c32         IPAPPEND 3         TEXT HELP         ENDTEXT
## 如果没有menu.c32、chain.c32这两个文件,请从光盘中拷贝,放到/tftpboot下面,这两个文件与装机菜单有关
Linux下KickStart+PXE无人值守装机服务器的配置_装机

(5)注意事项及后记

pxeserver需要关闭selinux和iptables,否则会在DHCP获取IP之后,不能从tftp下载到引导文件。我在这里跌倒了不止一次,提醒一下后来人!

kickstart装机可以定制的东西很多,包括装机菜单,是自动化运维的一个很好的工具。后期完善可以结合浏览器,开发一个装机平台,通过浏览器设置装机参数,在装机结束后返回各项信息到浏览器中。

写的比较仓促,很多细节方面没有考虑到,只是把重要的地方写出来。如果有写错的地方,还请各位看官留言指出来,帮助我补充完善。予人玫瑰,手留余香。