PXE概述

PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。工作在Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统

PXE优点

1、规模化:可以同时装配多台服务器;
2、自动化:安装系统、配置各种服务;
3、远程实现:不需要光盘、U盘等介质进行安装

实现PXE安装条件

1、客户机的网卡需要支持PXE协议,且主板支持网络引导。一般服务器都支持,只需要进入BIOS设置允许从Network或LAN启动即可
2、网络中有一台DHCP服务器以便为客户机自动分配IP地址,指定引导文件位置。
3、服务器要通过(简单文件传输协议)服务来提供系统内核和引导镜像文件的下载。

注意事项

安装成功的最关键因素在于kS脚本的编写,其他nginx tftp dhcp只是辅助用于客户机访问ks,源,传输用的

安装步骤

安装组件功能介绍

Kickstart : 将安装过程的参数写入到ks.cfg文件,实现自动安装配置达到无人值守自动安装
: 支持PXE 引导的网卡中从服务器端下载pxelinux.0文件、vmlinuz、initrd.img等内核引导文件
DHCP : PXE引导过程中先获取IP地址,并提供pxelinux.0文件位置
HTTP : 用于下载ks.cfg以及系统镜像文件

配置nginx

  • 安装nginx
    可以源码编译安装,如果源里面有需要的版本可以yum安装
    1
    yum install -y nginx 
  • 挂载镜像
    1
    mkdir /data/centos/7/os/x86_64 -p
    将centos7最小化镜像挂载到目录
    1
    mount CentOS-7-x86_64-Minimal-2009.iso   /data/centos/7/os/x86_64
  • 修改nginx配置
    挂载/data目录
    1
    2
    3
    4
    5
    6
    7
    8
    9
    server {
    listen 80;
    server_name localhost;
    location / {
    root /data;
    index index.html index.php index.htm;
    autoindex on; # 允许显示目录
    }
    }
  • 启动nginx
    1
    systemctl enable --now nginx
  • 验证结果
    访问http://192.168.42.132/centos/7/os/x86_64,最终实现可以访问到centos挂载的内容

配置dhcp服务

  • 安装软件
    1
    yum install -y dhcp
  • 修改主机名
    1
    systemctl set-hostname pxe.com
  • 修改配置
    修改/etc/dhcp/dhcpd.conf,对自己的一张网卡设置ip地址为192.168.1.100(具体可以自定义)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 设置租约时间和最大租约时间
    default-lease-time 600;
    max-lease-time 7200;
    # 定义域名
    option domain-name "pxe.com";
    # 定义地址池的子网、掩码、网关和地址池范围,定义地址
    subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.10 192.168.1.20;
    option routers 192.168.1.1;
    next-server 192.168.1.100;
    filename "pxelinux.0";
    }
  • 启动服务
    1
    systemctl enable --now dhcpd

编写KS脚本

每个系统安装完毕之后在/root下都有一个anaconda-ks.cfg文件,这其实就是当前系统安装时用的脚本,我们可以根据此文件进行修改,也可以自己重头来写,也可以安装system-config-kickstart此软件进行图形化编写,如果不会就先安装一遍系统然后根据系统的学习

  • 设置新系统root密码
    这个密码需要替换到ks脚本里面的rootpw,作为新系统的密码
    1
    python -c 'import crypt;print crypt.crypt("niubi.ks")'
  • 存放ks脚本
    1
    2
    3
    mkdir /data/ksdir
    touch /data/ksdir/ks7-mini.cfg
    chmod +r /data/ksdir/ks7-mini.cfg
  • ks脚本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #version=DEVEL
    # System authorization information
    auth --enableshadow --passalgo=sha512
    # Use pxe install
    url --url=http://192.168.1.100/centos/7/os/x86_64
    # Use graphical install
    graphical
    # Run the Setup Agent on first boot
    firstboot --disable
    ignoredisk --only-use=sda
    # Keyboard layouts
    keyboard --vckeymap=us --xlayouts='us'
    # System language
    lang en_US.UTF-8

    # Network information
    network --bootproto=dhcp --device=eth0 --onboot=off --ipv6=auto --no-activate
    network --hostname=localhost.localdomain

    # Root password
    rootpw --iscrypted $6$9SJ2mbfniIe1xZMv$vQGhIJeDNIX7MeIgAV36vew9ptH.F8VuHloW3eacdKAxwDFVAa8TViUZlN8SpZgu22EEySuyegRsPlRLRoftN1
    # System services
    services --enabled="chronyd"
    # System timezone
    timezone Asia/Shanghai --isUtc
    # System bootloader configuration
    bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
    # Partition clearing information
    clearpart --none --initlabel
    # Disk partitioning information
    part /boot/efi --fstype="efi" --ondisk=sda --size=200 --fsoptions="umask=0077,shortname=winnt"
    part pv.156 --fstype="lvmpv" --ondisk=sda --size=49974
    part /boot --fstype="ext4" --ondisk=sda --size=1024
    volgroup centos --pesize=4096 pv.156
    logvol swap --fstype="swap" --size=2048 --name=swap --vgname=centos
    logvol / --fstype="ext4" --grow --maxsize=51200 --size=1024 --name=root --vgname=centos

    %packages
    @^minimal
    @core
    chrony
    kexec-tools

    %end

    %addon com_redhat_kdump --enable --reserve-mb='auto'

    %end

    %anaconda
    pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
    pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
    %end

配置tftp

  • 安装软件
    1
    yum install -y  tftp-server syslinux xinetd
  • 修改tftp配置
    1
    vim /etc/xinetd.d/tftp 
    修改如下
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    service 
    {
    socket_type = dgram
    protocol = udp
    wait = yes
    user = root
    server = /usr/sbin/in.d
    server_args = -s /var/lib/boot
    disable = no
    per_source = 11
    cps = 100 2
    flags = IPv4
    }
  • 拷贝文件
    1
    2
    3
    4
    cd /var/lib/tftpboot
    mkdir 7 pxelinux.cfg
    cp /usr/share/syslinux/{pxelinux.0,menu.c32} .
    cp /data/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img} 7
  • 修改pxe启动项
    1
    vim /var/lib/tftpboot/pxelinux.cfg/default
    内容如下,请确保http://192.168.1.100/ksdir/ks7-mini.cfg可以访问
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 如果将值修改为正文mini标签的话,默认选择mini标签,不会让用户选择
    default menu.c32
    timeout 600
    # 背景标题
    menu title ########## GXM-PXE Boot Menu ##########
    label mini7
    menu label install centos mini 7
    kernel 7/vmlinuz
    append initrd=7/initrd.img ks=http://192.168.1.100/ksdir/ks7-mini.cfg
    label local
    menu default
    menu label ^Boot from local drive
    localboot 0xffff
  • 启动服务
    1
    systemctl enable --now xinetd tftp

客户端网络引导启动

设置客户端系统为网络启动,查看开机引导画面测试