在大规模的Linux应用环境中,如Web群集、分布式计算等,服务器往往并不配置光驱设备,在这种情况我们就要使用PXE批量装机,而传统的USB光驱、移动硬盘等安装方法显然已经力所不逮。


PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并加载安装文件或者整个操作系统。而要搭建PXE网络体系,必须满足几个前提条件:1.客户机的网卡支持PXE协议(集成BOOTROM芯片),且主板支持网络引导;2.网络中有一台DHCP服务器以便为客户机自动分配IP地址、指定引导文件位置;3.服务器通过TFTP(Trivial Transfer Protocol,简单文件传输协议)提供引导镜像文件的下载。


下面让我们一起完成CentOS7.4上PXE网络体系的架构,并尝试配置Kickstart无人值守装机


  • PXE网络体系架构


一、 安装所需的服务器(tftp-server/dhcp/ftp)


安装tftp-server服务,存放网络启动所需文件:

[root@CentOS7-1 yum.repos.d]# yum install tftp-server -y
[root@CentOS7-1 yum.repos.d]# vim /etc/xinetd.d/tftp 
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot -c     ##指定存储路径 -c:允许上传
        disable                 = no                          ##修改为no开启服务
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}


安装dhcp服务,来自动分配IP地址:

[root@CentOS7-1 yum.repos.d]# yum install dhcp -y
[root@CentOS7-1 yum.repos.d]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf    ##复制配置模板到主配置文件
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
[root@CentOS7-1 dhcp]# vim /etc/dhcp/dhcpd.conf 
##省略部分信息##
option domain-name "PXE.com";    ##指定一个域名
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
# Use this to enble / disable dynamic dns updates globally.
# Use this to enble / disable dynamic dns updates globally.
ddns-update-style none;        ##支持DNS动态更新,一般选择关闭
# No service will be given on this subnet, but declaring it helps the 
# DHCP server to understand the network topology.

next-server 192.168.100.201;       ##指定TFTP服务器地址
filename "/pxelinux.0";             ##引导文件TFTP上的位置

subnet 192.168.100.0 netmask 255.255.255.0 {   ##配置子网及子网掩码
  range 192.168.100.100 192.168.100.200;       ##分配出去的地址网段
  option routers 192.168.100.201;           ##选择路由
}


安装vsftp服务:

[root@CentOS7-1 dhcp]# yum install vsftpd -y
[root@CentOS7-1 dhcp]# mount /dev/cdrom /var/ftp/pub   ##挂载光盘镜像到ftp服务器的根目录
mount: /dev/sr0 写保护,将以只读方式挂载



二、 复制网络启动所需要的文件到TFTP服务器的根目录中

[root@CentOS7-1 dhcp]# yum install syslinux -y      ##安装引导加载程序
[root@CentOS7-1 dhcp]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@CentOS7-1 dhcp]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@CentOS7-1 dhcp]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  ##安装菜单
[root@CentOS7-1 pxelinux.cfg]# cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/  ##linux引导加载模块
[root@CentOS7-1 pxelinux.cfg]# cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/    ##压缩内核
[root@CentOS7-1 pxelinux.cfg]# cp /mnt/isolinux/vesamenu.c32 /var/lib/tftpboot/    ##图形化安装菜单


三、 启动所有服务器并关闭防火墙

[root@CentOS7-1 tftpboot]# systemctl restart dhcpd.service
[root@CentOS7-1 tftpboot]# systemctl restart vsftpd.service
[root@CentOS7-1 tftpboot]# systemctl restart tftp.service
[root@CentOS7-1 tftpboot]# systemctl stop firewalld.service
[root@CentOS7-1 tftpboot]# setenforce 0


四、 配置Kickstart完成无人值守安装


安装kickstart软件包:

[root@CentOS7-1 tftpboot]# yum -y install system-config-kickstart

为了方便我们可以在图形化界面配置完成配置再将ks.cfg放到ftp站点中:

部署PXE远程安装系统并通过Kickstart无人值守装机_自动装机

部署PXE远程安装系统并通过Kickstart无人值守装机_PXE_02

部署PXE远程安装系统并通过Kickstart无人值守装机_Kickstart_03

此时我们可以创建一个ftp目录下的站点,并把配置文件保存过去:

部署PXE远程安装系统并通过Kickstart无人值守装机_自动装机_04


重新编辑配置:

[root@CentOS7-1 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default 

##省略部分信息##

label linux
  menu label ^Install CentOS 7
  menu default  ##添加这行
  kernel vmlinuz
  append ks=ftp://192.168.100.201/centos7/ks.cfg ##添加kickstart配置文件 initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet


此时我们可以测试一下,创建一台新的虚拟机:

部署PXE远程安装系统并通过Kickstart无人值守装机_服务_05


可以看到,我们的kickstart正在完成自动装机,且不需要自己操作!