一、简介

1.1 什么是PXE

    PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户?)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux等。


PXE启动原理:

   当计算机引导时,BIOS把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。


PXE的工作过程:

1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;

2. DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;

3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;

4. PXE Client 取得pxelinux.0 文件后之执行该文件;

5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;

6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;

详细工作流程,请参考下面这幅图:

wKioL1cPbd3xTNWmAAEmg4Ghu5o451.jpg

1.2 什么是Kickstart

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

PXE+Kickstart 无人值守安装操作系统完整过程如下:

wKiom1cPbV_gWeUBAADwdrQw35U403.jpg

二、实验环境

实验环境:VMware Workstation 11

系统平台:CentOS release 6.7 (最小化安装)

网络模式:NAT模式(共享主机的IP地址)

DHCP / TFTP IP:192.168.0.100

HTTP / FTP / NFS IP:192.168.0.100

安装 httpd TFTP DHCP 服务

关闭防火墙,关闭SELINUX:

# service iptables stop
# chkconfig iptables off
# vim /etc/selinux/config 
SELINUX=disabled
# setenforce 0

系统的安装方式可以选择HTTP、FTP、 NFS,我选择用HTTP方式的安装。

三、配置HTTP Server

3.1 安装httpd

# yum –y install httpd

3.2 开启服务并设置开机启动

# service httpd start
# chkconfig --level 35 httpd on

3.3 加载ISO镜像

在虚拟机中设置加载ISO镜像。

wKioL1cPb8vi8sPJAAFB__piUCI009.jpg


3.4  将iso文件挂载至/mnt/cdrom

[root@dhcp ~]# mkdir  /mnt/cdrom
[root@dhcp ~]# mount /dev/cdrom /mnt/cdrom/

4.4 复制光盘全部内容至http 的根目录/var/www/html/ 下

# cp -r /mnt/cdrom/ /var/www/html/
# 检查:
[root@dhcp ~]# du -h /var/www/html/cdrom/
40M      /var/www/html/cdrom/isolinux
3.4G     /var/www/html/cdrom/Packages
39M      /var/www/html/cdrom/p_w_picpaths/pxeboot
229M    /var/www/html/cdrom/p_w_picpaths
268K    /var/www/html/cdrom/EFI/BOOT
276K    /var/www/html/cdrom/EFI
27M      /var/www/html/cdrom/repodata
3.7G     /var/www/html/cdrom/
[root@dhcp ~]# du -h /mnt/cdrom/
254K    /mnt/cdrom/EFI/BOOT
256K    /mnt/cdrom/EFI
39M      /mnt/cdrom/p_w_picpaths/pxeboot
229M    /mnt/cdrom/p_w_picpaths
40M      /mnt/cdrom/isolinux
3.4G     /mnt/cdrom/Packages
27M      /mnt/cdrom/repodata
3.7G     /mnt/cdrom/

HTTP部分设置完毕。


四、配置TFTP

4.1 安装tftp-server

# yum –y install tftp-server

4.2 启用tftp 服务

启动tftp服务由于tftp是瞬时守护进程,依赖于xinetd来监听,所以启动tftp,必须要重启xinetd来是让配置生效,启动tftp两种方式:

1

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

2.  chkconfig命令

# chkconfig tftp on

注意,两种方式任选其一都可以实现,但是必须要重启xinetd

重启xinetd:
# service xinetd restart
设置开机启动xinetd:
# chkconfig xinetd on
查看udp 69端口是否监听:
# ss -unl | grep :69

五、配置支持PXE的启动程序

5.1 启动镜像文件pxelinux.0的准备

获取这个文件,需要安装syslinux包,然后将pxelinux.0复制到/var/lib/tftpboot目录

#  yum -y install syslinux
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

说明:syslinux是一个功能强大的引导加载程序,而且兼容各种介质。更加确切地说:SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。

5.2 复制pxe启动所需要的文件到tftp目录下

# cp /var/www/html/cdrom/p_w_picpaths/pxeboot/{vmlinuz,initrd.img}/var/lib/tftpboot/
# cp /var/www/html/cdrom/isolinux/boot.msg/var/lib/tftpboot/
# cp /var/www/html/cdrom/isolinux/vesamenu.c32/var/lib/tftpboot/
# cp /var/www/html/cdrom/isolinux/splash.jpg/var/lib/tftpboot/
# cp /usr/share/syslinux/pxelinux.0/var/lib/tftpboot/
# mkdir /var/lib/tftpboot/pxelinux.cfg
# cp /var/www/html/cdrom/isolinux/isolinux.cfg/var/lib/tftpboot/pxelinux.cfg/default

5.3 设置文件权限:

# chmod 755 /var/lib/tftpboot/ -R

5.4 修改default文件

# vim /var/lib/tftpboot/pxelinux.cfg/default
 
 
# 添加ks=http://192.168.0.100/ks.cfg
default vesamenu.c32
#prompt 1
timeout 60
 
display boot.msg
 
menu background splash.jpg
menu title Welcome to CentOS 6.7!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
 
label linux
  menu label ^Install or upgrade anexisting system
  menu default
  kernel vmlinuz
  append initrd=initrd.imgks=http://192.168.0.100/ks.cfg
label vesa
  menu label Install system with^basic video driver
  kernel vmlinuz
  append initrd=initrd.img nomodeset
label rescue
  menu label ^Rescue installedsystem
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
  menu label Boot from ^local drive
  localboot 0xffff
label memtest86
  menu label ^Memory test
  kernel memtest
  append -

六、配置DHCP

6.1 安装DHCP服务

# yum -y install dhcp*

6.2 修改/etc/dhcp/dhcpd.conf 配置文件:

# vim /etc/dhcp/dhcpd.conf 
#先全部注释,然后再把下面内容插入:
ddns-update-style interim;
ignore client-updates;
allow booting;
allowbootp;
subnet 192.168.0.0 netmask 255.255.255.0
{
option routers 192.168.0.2;
option domain-name "DHCP.com";
option domain-name-servers 192.168.0.100;
option subnet-mask 255.255.255.0;
option time-offset -18000;
default-lease-time 21600;
max-lease-time 43200;
range dynamic-bootp 192.168.0.110 192.168.0.250;
filename "pxelinux.0";
next-server 192.168.0.100;
}

6.3 启动DHCP服务

[root@dhcp ~]# service dhcpd start
[root@dhcp ~]# chkconfig --add dhcpd
[root@dhcp ~]# chkconfig  dhcpd on
查看udp 67号端口:
[root@dhcp ~]# netstat -unlp
Active Internetconnections (only servers)
Proto Recv-QSend-Q Local Address              Foreign Address            State       PID/Program name   
udp        0     0 0.0.0.0:67                  0.0.0.0:*                               29205/dhcpd         
udp        0     0 0.0.0.0:69                 0.0.0.0:*                              2226/xinetd

七、生成ks.cfg 文件

7.1 安装Kickstart

生成ks.cfg 文件需要kickstart 工具,而此工具依赖于X Windows,所以我们需要安装X Windows,操作如下:

# yum groupinstall "XWindow System"
# yum groupinstall Desktop
# yum installsystem-config-kickstart
#reboot

7.2 启动X Windows 环境

# startx

7.3 配置Kickstart

wKiom1cPcd7D7-wcAACrdNj_6rI185.jpg

1. 设置语言,键盘,时区,Root密码,安装完毕后重启等。

wKioL1cPcpawPM9LAAFw15tpMKM559.jpg

2. 设置安装方式,这里介绍的是HTTP方式的安装,故选择HTTP

wKioL1cPcpaR8nbMAADDwwzIG3c153.png

3. 安装MBR

wKiom1cPcd_Bt-TyAAELDd7h8z0436.jpg

4. 设置分区

wKiom1cPcd-jOD0dAAGik1iiVlo859.png

wKioL1cPcpihd1KjAAGG5DZtl7Q619.png

wKioL1cPcpmwE7RHAAGvBZ0Cabw657.png

5. 分区总览

wKioL1cPcprAjwsmAAH93e8cYQA084.png

6. 配置网络

wKiom1cPcebRaZcqAAHsAPIrmV0389.png

7. 认证配置

wKioL1cPcp_Rf6ZGAAEZahzdJ1A350.jpg

wKioL1cPcp-BA8BaAAEKb4E9-EY742.jpg

8. 关闭SELinux 和防火墙

wKiom1cPceiRgt50AADcgN5b1Ys590.jpg

9. 图形环境配置

wKioL1cPc8DyebFNAADcgN5b1Ys709.jpg

10. 软件包安装选择

wKiom1cPcemh0ooiAAF5FPJlyfA757.png

wKioL1cPcqHREJ-TAAFDa_0nqJ4202.png

wKioL1cPcqKDzdNDAAFZ5ZnotHo522.png

11. 预览

wKiom1cPcevAlqFvAAFu429KVPE090.png

12. 生成ks.cfg 文件,保存在/var/www/html/ 文件夹下

wKiom1cPceuSsk0IAAEkvSHggqM104.jpg

保存以后退出软件。

7.4 查看ks.cfg文件

打开/var/www/html/ks.cfg文件进行查看。

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

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.0.100/cdrom"
# Root password
rootpw --iscrypted $1$c9M7OoLX$qicLSDDaziytrWGv/ctx/.
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone  Asia/Shanghai
# Network information
network  --bootproto=dhcp--device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext4" --size=200
part swap --fstype="swap" --size=2048
part / --fstype="ext4" --size=20480
 
%packages
@base
@compat-libraries
@debugging
@development
%end

八、测试安装

8.1 准备新的机器

自动化安装系统配置完毕,下面启动一台新的机器进行测试:

这里一定要选择自定义(高级)的方式来新建虚拟机。

wKioL1cPjtLAOFdIAACwa1wFvTs018.jpg

wKioL1cPjtPArJVBAACxoyaEWvY737.jpg

wKiom1cPjhvhtXwjAAConlIDzaE289.jpg

wKioL1cPjteSc_hdAACozbmnjmI523.jpg

wKiom1cPjiDwL0scAACNCtrRhfw042.jpg

wKioL1cPjtmjFICFAACCwuVn9PI073.jpg

wKiom1cPjiOAkk2-AAC0VNE_ZQA726.jpg

wKiom1cPjiSQ27uJAADLhzid2Ek158.jpg

wKioL1cPjt2T9cQKAACWNpQ8CGY447.jpg

wKiom1cPjibiGhH7AAB3KUIEynA475.jpg

wKioL1cPjt6x7RmnAADMXfAoElY073.jpg

wKioL1cQVEnTRqwrAAD_yKpX8MQ591.jpg

wKioL1cPjuCSMhliAACejsPX9Jk497.jpg

wKioL1cPjuGyEu5IAAC27yZBVs8694.jpg

wKiom1cQU6HC7VexAADDSMDN7UE347.jpg

8.2 启动虚拟机

DHCP 服务器正在给客户机分配IP地址。

wKioL1cPj8aRAMI8AACeFvicKXo918.jpg

wKioL1cPj8jC5NrjAADUqrFhWhY751.jpg

开始下载vmlinuz initrd.img

wKiom1cPjxDig66NAAA6BFn9t7M976.jpg

自动安装过程:

wKioL1cPj87ABNvhAAC-nuDB5Dw644.jpg

wKiom1cPjxaA3czOAACK70dBZjA863.jpg

wKioL1cPj8-yWvO7AAD0o3BOmag458.jpg


wKiom1cPjxjxzodiAADcYATz9NY527.jpg

8.3 安装完毕

系统安装完成后,自动重启后,进入登录界面:

wKiom1cPjxmQdq32AAAyErqWKcc559.jpg

wKioL1cPj9HTnphJAAA-_japPZY505.jpg

ip地址一般从地址池设定的第一个开始:

由于我们在dhcp服务器中设定的地址池为range dynamic-bootp 192.168.0.110192.168.0.250;所以第一台机器的分配的ip192.168.0.111,实际生产环境中最好是根据需要安装的机器台数来确定range ip地址范围,这样我们可以直接利用ssh工具登录进去。

wKioL1cPj9Tx-ylnAAFfViciiB4268.jpg

wKiom1cPjyST0nRuAAJJm3OKuIw886.jpg

登录系统查看,磁盘分区和我们在ks.cfg 文件中设定的一样。

wKioL1cPj-CRoIJhAAJm__25h5k364.jpg

PXE+Kickstart 无人值守安装操作系统环境搭建完毕。


特别注意:

在生产环境中,新服务器跟kickstart服务器要在同一个网中,并且要独立分配ip地址段,不要跟生产服务器在同一网络中,以防止生产服务器万一重启了会自动获取dhcp而重装系统


参考原文:http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html