首页 > 代码库 > PXE+HTTP+tftp+kickstart 网络自动化安装centos6.5

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


基本流程:

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

wKioL1PZHxyDbErcAAEmL9U3QCM324.jpg


# 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/images/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配置文件进行修改,则需要查看其权限,保证其有可执行权限,anaconda-ks.cfg默认为600,如果权限不够,会提示找不到ks文件。

# 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     # 测试是否可以正常下载。

配置文件基本格式

# 命令段
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      #不安装的包,但如果被依赖,也会被安装

 
# 脚本段
  %pre        #安装前脚本
  %post       #安装后脚本
  
 %end