基本流程:

    1、网卡作为可引导的启动设备

    2、BIOS找到引导设置网卡,激活网卡的PXE功能

    3、客户端通过PXE的内置dhcp客户端尝试DHCP广播请求,从DHCP服务器获取IP地址、掩码、网关、网络属性 

    4、DHCP服务器告知客户端tftp服务器地址(next-server),将 "filename "pxelinux.0";" 参数中指定的文件(pxelinux.0)推送给客户端;

    5、PXE的内置tftp客户端到指定tftp服务器下载启动镜像文件pxelinux.0后,在内存展开启动文件。

    6、客户端 pxelinux.0 程序读取 tftp 服务器上的配置文件default(通常是 /tftpboot/pxelinux.cfg/default)

    7、先读取vmlinuz、initrd.img,然后加载安装管理程序anaconda-ks.cfg脚本配置文件

        8、anaconda程序根据脚本配置文件查找安装源(HTTP,NFS,FTP)

        9、anaconda按需执行自动化安装


    本文实验环境 :

# uname -r
   2.6.32-431.el6.x86_64
# cat /etc/system-release
   CentOS release 6.5 (Final)
# setenforce 0 # 临时关闭SELinux
  # 修改文件永久生效使/etc/sysconfig/selinux的 SELINUX=disabled
# service iptables stop    # 关闭iptables


DHCP服务器配置

    1、配置dhcp服务

    DHCP服务器服务端口为UDP67,客户端服务端口为UDP68

    DHCP基本工作原理:

PXE+HTTP+tftp+kickstart 网络自动化安装centos6.5_ kickstart

# yum -y install dhcp
# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf  #复制dhcpd的示例配置文件
#修改配置文件为/etc/dhcp/dhcpd.conf
    
# dhcpd.conf
option domain-name "magedu.com";        # 指定网域域名
option domain-name-servers 172.16.0.1,8.8.8.8;    # 域名服务器ip,多个IP用逗号分隔。
    
default-lease-time 6000;                # 默认租约时长,时间为秒        
max-lease-time 8000;                    # 最大租约时间
    
log-facility local7;                    # log日志设备类型
    
subnet 172.16.0.0 netmask 255.255.0.0 {        # DHCP服务器自身网段及子网掩码
   range 172.16.19.50 172.16.19.100;            # 地址池,动态分配IP地址的范围
   option routers 172.16.0.1;          # 路由地址
   next-server 172.16.19.2;            # TFTP服务器ip地址
   filename "pxelinux.0";              # PXE启动引导文件
   }
    
# service dhcpd configtest        # 检查配置文件是否有语法错误
# service dhcpd start             # 重启DHCP服务
# ss -utnl |grep 67               # 查看DHCP的67端口是否打开


TFTP服务器相关配置

    2、配置TFTP

# yum -y install tftp-server tftp    # 安装tftp-server和tftp
# chkconfig tftp on                  # 加入开机自启动
# service xinetd restart             # 重新启动xinetd服务
# ss -unl | grep :69                 # 查看69端口是否打开


      TFTP服务器端口号为69,UDP协议。

     配置文件默认即可,tftp 服务的默认根目录是/var/lib/tftpboot/ 

     #在centos5默认根目录是/ftfpboot,且需要修改配置文件/etc/xinetd.d/tftp 的一项disabled=no

     #在cetnos7和cetnos6.5一样无需配置,根目录相同。


     配置文件其中的一项:server_args= -s /var/lib/tftpboot

        -s :指定tftp服务器的根目录

        -v 指定把日志输出到/var/log/messages中


    3、提供PXE的工作环境

    pxelinux 是一个由 syslinux 派生出的支持 PXE 环境的 bootloader,它可以从网络引导一个Linux操作系统。

启动引导文件pxelinux.0

# yum -y install syslinux(默认已安装)
# rpm -ql syslinux  |grep pxelinux.0               # 查找启动引导文件pxelinux.0
# cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/        #复制到tftp根目录下


    4、提供引导内核等文件

        启动镜像pxelinux.0文件在执行过程中,会读取配置文件以确定它应该载入什么Linux内核文件来运行。

        所有的配置文件都放在启动服务器的/var/lib/tftpboot/pxelinux.cfg/目录下,此目录需要手动创建。

        pxelinux.0根据一定的规则来搜索合适的配置文件名。

# mount /dev/cdrom /media/cdrom/         #挂载光盘
# cp /media/cdrom/p_w_picpaths/pxeboot/{vmlinuz,initrd.img}  /var/lib/tftpboot/
    # 复制内核相关文件
# cp /media/cdrom/isolinux/{splash.jpg,vesamenu.c32,boot.msg}  /var/lib/tftpboot
    # 复制启动图形菜单界面相关文件
    
# mkdir /var/lib/tftpboot/pxelinux.cfg/
# cp /media/cdrom/isolinux/isolinux.cfg  /var/lib/tftpboot/pxelinux.cfg/default
    # 启动配置文件
/var/lib/tftpboot/目录树    1 directory, 7 files
    ├── boot.msg        # Linux启动菜单配置信息,可手动修改。
    ├── initrd.img      # 内存虚拟文件系统。用来临时的引导硬件到内核vmlinuz。
    ├── pxelinux.0      # PXE的启动引导文件,
    ├── pxelinux.cfg    # 启动配置文件目录,手动创建,载入什么Linux内核文件来运行
    │   └── default     # /medir/cdrom/isolinux/isolinux.cfg
    ├── splash.jpg      # 图形界面的背景图片,图片格式 640*480  jpg/png
    ├── vesamenu.c32    # 菜单主程序,启动图形界面,不可修改。
    └── vmlinuz         # 是可引导的、压缩的内核文件

启动配置文件default

# /var/lib/tftpboot/pxelinux.cfg/ default 
default vesamenu.c32            # 默认加载菜单主引导程序
#prompt 1
timeout 600                     # 设置超时时间
display boot.msg                # 显示主菜单
menu background splash.jpg                   # 设置菜单背景图片
menu title Welcome to CentOS 6.5!            # 设置菜单标题
menu color border 0 #ffffffff #00000000      # 设置菜单字体颜色
...      ...    ...
label linux                                            # 设置标签
  menu label ^Install or upgrade an existing system    # 设置菜单标签
  menu default                                         # 设置默认选择菜单
  kernel vmlinuz                       # 设置内核文件位置,根目录为TFTP服务器根目录
  append initrd=initrd.img ks=http://172.16.19.2/centos6.cfg        
                           # 设置启动时加载kickstart文件
  ...     ...    ....
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
..............


HTTP服务器

    5、提供安装源

    本文基于http服务实现,使用光盘的镜像文件作为安装源。

# yum -y install httpd
# mkdir -pv /var/www/html/centos6     # 创建安装源目录
# mount --bind /media/cdrom /var/www/html/centos6/
    # 绑定目录, 是将一个目录中的内容挂载到另一个目录上
# service httpd restart               # 重启服务
# ss -tnl |grep 80                    # 查看http服务是否监听


 kickstart

    6、提供ks.cfg文件

    可以使用命令system-config-kickstart命令(使用Xshell远程ssh工具,安装Xmanger包)打开,打开图形窗口,按需定制操作系统,最后保存配置文件。

注意如果使用root根目录下面的anaconda-ks.cfg配置文件进行修改,则需要查看其权限,保证其有可读权限,604即可。anaconda-ks.cfg默认为600,如果权限不够,会提示找不到ks文件。

  Kickstart基本步骤:

     1、创建Kickstart文件

         使用system-config-kickstart

         使用文本编辑器手动编辑

     2、为安装程序提供Kickstart文件

         网络服务器:FTP、HTTP和NFS

        DHCP/TFTP服务器

        USB磁盘 或 CD-ROM

        本地硬盘    

     3、引导安装程序

        安装磁盘

        PXE

        boot.iso

     4、使安装程序指向Kickstart文件

        ks=http|ftp://server/dir/file

        ks=nfs:server:/dir/file

        ks=hd:device:/dir/file

        ks=cdrom:/dir/file

    

基于isolinux目录创建引导盘:

 # mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.5 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/


安装与配置:

# yum install system-config-kickstart    # 安装包 
# system-config-kickstart                # 配置命令。
    # 本文使用本机上已存在的anaconda-ks.cfg作为模板编辑,另存为centos6.cfg
# ksvalidator /root/centos6.cfg          # 配置完成后的语法检查命令
# chmod 601 /root/centos6.cfg
# cp /root/centos6.cfg /var/www/html/    # 复制到http的根目录下,为客户端提供自动化安装。
# wget  http://172.16.19.2/centos6/ks.cfg  # 测试是否可以正常下载。

ks配置文件基本格式

# 命令段
install
    # 指定安装源
url --url=http://172.16.19.2/centos6/
repo --name="CentOS" --baseurl=http://172.16.19.2/centos6/
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6


# Reboot after installation
 reboot
 firewall --disabled
 authconfig --useshadow  --passalgo=sha512
 selinux --disabled
 timezone Asia/Shanghai

# 硬盘分区信息
 part /boot --fstype=ext4 --size=200
 part pv.008002 --size=61440
 volgroup vg0 --pesize=8192 pv.008002
 logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480
 logvol swap --name=swap --vgname=vg0 --size=2048
 logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240
 logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480

# 软件包段
 %packages
 @Base
 @Core
 @base
 @client-mgmt-tools
 @core
 @desktop-platform
 ...  ...   ...
 pack_name
 @group
 -pack_name      #不安装的包,但如果被依赖,也会被安装
 %end            #与上一个%开头的对应 
 
 # 脚本段
 %post       #安装后脚本 
 sed -i '1,$s@id:[0-9]:initdefault:@id:3:initdefault:@g' /etc/inittab 
 %end