基本流程:

    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基本工作原理:

# 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.confoption 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 1timeout 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-8keyboard usnetwork --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