zoukankan      html  css  js  c++  java
  • CentOS 7 PXE+Kickstart+TFTP+VSFTP+BIOS+UEFI

    前言

    一般情况下,新服务器上架。都需要系统管理员手工安装系统,配置IP地址,然后远程登陆服务器进行软件安装、配置之类的管理。这种方式,在服务器数量还不多的情况下,是正常的。试想,如果一次上架上百台服务器,再依次安装操作系统,将是一种灾难。很难在规定的时间内将服务器顺利上架并配置完毕。

    这就需要在大型机房中,以DHCP+DNS模式管理服务器IP地址和主机名。服务器上架前,以其MAC地址为依据,在DHCP中配置主机保留并分配主机名。DHCP结合TFTP提供的PXE服务,提供PXE引导Linux内核和启动镜像,通过自动应答文件来实现操作系统的自动安装和配置。就Linux来说,安装后启动saltstack客户端salt-minion服务即可实现新服务器的自动受控。其余的安装服务便可以通过saltstack来完成。自始至终,将不用通过ssh形式登陆新服务器,且可以实现软件包的自动化安装和配置管理。

    理论描述

    自动启动安装过程

    服务器从第一次加电到连接到salt-master主机,受其集中管理,将经过以下一系列过程:

    1. 系统管理员在DHCP服务器中将其MAC地址绑定到特定IP地址和主机名,并指定PXE启动文件。
    2. 服务器加电启动,通过PXE获取IP地址并加载PXEClient,以TFTP的形式获取Linux内核和初始化启动映像。
    3. 服务器加载自动应答脚本,通过网络获取软件包,来自动安装Linux系统。安装并开机启动salt-minion服务。
    4. 服务器安装完成并重新启动后,自动获取IP地址,连接salt-master请求受控。
    5. salt-master控制新服务器后,以管理员配置模板自动安装软件包配置服务,管理新主机。

    以上过程我们需要架设的服务有DNS、DHCP、TFTP、HTTP/FTP服务。其中,DHCP和DNS提供地址和主机名分配,TFTP提供PXE启动映像,HTTP/FTP作为Linux软件仓库提供安装过程中需要的软件包。

    DHCP Option 60

      DHCP Option 60 Vendor class identifier为厂商类标识符。这个选项作用于客户端可选地识别客户端厂商类型和配置。这个信息是N个8位编码,由DHCP服务端解析。厂商可能会为客户端选择定义特殊的厂商类标识符信息,以便表达特殊的配置或者其他关于客户端的信息。比如:这个标识符可能编码了客户端的硬件配置。客户端发送过来的服务器不能解析的类规范信息必须被忽略(尽管可能会有报告)。服务器响应厂商规范信息到客户端应该仅仅通过Option 43来完成。

    此信息需要在DHCP服务器上定义,DHCP服务器通过其判断客户端是不是PXEClient。并通过其Arch代码来判断其平台,以此为依据提供不同的PXE引导程序给客户端。

    PXE和gPXE

      PXE:

        (preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统。在启动过程中,BIOS把PXEClient调入内存中执行,然后由PXEClient向DHCP服务器请求分配IP地址,再用TFTP或MTFTP协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。

      gPXE:

        是一个开源的网络启动器。它提供了一个直接的PXE替代方案,并且提供DNS、HTTP、iSCSI等多种额外功能。另外,由于gPXE存在商业收购风险。其开发者又启动了一个名为iPXE的开源项目。作为gPXE的一个分支。iPXE支持HTTP、ISCSI、FCoE、Wi-Fi、InfiniBand等多种启动方式。且支持通过脚本来控制启动过程。

    BIOS和UEFI

      BIOS:

        (Basic Input/Output System的缩写、中文:基本输入输出系统),在IBM PC兼容机上,是一种业界标准的固件接口。BIOS这个字眼是在1975第一次由CP/M操作系统中出现。BIOS是个人电脑启动时加载的第一个软件。

    BIOS用于计算机开机时执行系统各部分的的自检,并启动引导程序或装载在内存的操作系统。此外,BIOS还向操作系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS服务而不是直接访问硬件。现代操作系统会忽略BIOS提供的抽象层并直接访问硬件组件。

      

      UEFI:

        全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface),是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动操作环境,加载到一种操作系统上。

    可扩展固件接口(Extensible Firmware Interface,EFI)是 Intel 为 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看作是有近20多年历史的 BIOS 的继任者。

    另外,由于UEFI不支持32位,所以UEFI部分只讨论x64平台。由于没有实验环境,不支持安腾架构。

    安装所需全部服务

    yum install tftp tftp-server dhcp xinetd syslinux

    dhcpd配置文件

    option space PXE;
    option PXE.mtftp-ip code 1 = ip-address;
    option PXE.mtftp-cport code 2 = unsigned integer 16;
    option PXE.mtftp-sport code 3 = unsigned integer 16;
    option PXE.mtftp-tmout code 4 = unsigned integer 8;
    option PXE.mtftp-delay code 5 = unsigned integer 8;
    option client-system-arch code 93 = unsigned integer 16;

    allow booting;
    allow bootp;

    default-lease-time 6000;
    max-lease-time 72000;

    subnet 10.1.1.0 netmask 255.255.255.0 {
      range 10.1.1.50 10.1.1.70;
      option routers 10.1.1.11;
      class "pxeclients" {
        match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
        next-server 10.1.1.11;
        if option client-system-arch = 00:07 or option client-system-arch = 00:09 {
          filename "BOOTX64.efi";
        } else {
         filename "pxelinux.0";
        }
      }
    }

    tftp配置文件

      sed -i '/disable/s/yes/no/' /etc/xinetd.d/tftp

    {
        socket_type        = dgram
        protocol        = udp
        wait            = yes
        user            = root
        server            = /usr/sbin/in.tftpd
        server_args        = -s /var/lib/tftpboot
        disable            = no
        per_source        = 11
        cps            = 100 2
        flags            = IPv4
    }

    在 tftpboot 中创建需要的目录

    • mkdir /var/lib/tftpboot/pxelinux.cfg/  
      • BIOS引导所使用的 default  菜单文件目录
      •  1 UI pxelinux.cfg/vesamenu.c32
         2 prompt 1
         3 timeout 60
         4 
         5 display pxelinux.cfg/boot.msg
         6 menu background pxelinux.cfg/splash.jpg
         7 menu title Welcome to PXE+kickstart auto install systems
         8 menu color border 0 #ffffffff #00000000
         9 menu color sel 7 #ffffffff #ff000000
        10 menu color title 0 #ffffffff #00000000
        11 menu color tabmsg 0 #ffffffff #00000000
        12 menu color unsel 0 #ffffffff #00000000
        13 menu color hotsel 0 #ff000000 #ffffffff
        14 menu color hotkey 7 #ffffffff #ff000000
        15 menu color scrollbar 0 #ffffffff #00000000
        16 
        17 
        18 label linux
        19   menu label ^Install CentOS7.4 Minimal
        20   menu default
        21   kernel cores/CentOS/7.4/vmlinuz
        22   append initrd=cores/CentOS/7.4/initrd.img ip=dhcp inst.repo=ftp://10.1.1.11/CentOS/7.4 inst.ks=ftp://10.1.1.11/kickstart.cfgs/CentOS-7.x-min.cfg
        23 
        24 label linux
        25   menu label ^Install CentOS6.9 Minimal
        26   kernel cores/CentOS/6.9/vmlinuz
        27   append initrd=CentOS6/initrd.img ip=dhcp repo=ftp://10.1.1.11/CentOS/6.9 ks=ftp://10.1.1.11/kickstart.cfgs/CentOS-6.x-min.cfg
        28 
        29 label linux
        30   menu label ^Install Windows10
        31   kernel memdisk raw iso
        32   append initrd=ftp://10.1.1.11/Windows/10/W10X32_CN_PE.iso
        33 
        34 label local
        35   menu label Boot from ^local drive
        36   localboot 0xffff
        default 内容
    • mkdir -p /var/lib/tftpboot/cores/{CentOS,Ubuntu,Windows}
      • 各的系统的内核文件目录
      • cd /var/lib/tftpboot/cores/
      • mkdir CentOS/{6.9,7.4}
      • mkdir Ubuntu/{16,17}
      • mkdir Windows/{7,10}

    这里只例举无人职守CentOS 7 Minimaul

    挂载镜像文件

    mount /dev/cdrom /mnt

    复制内核文件

    cp -rf /mnt/isolinux/{initrd.img,vmlinuz}  /var/lib/tftpboot/cores/CentOS/7.4

    BIOS

    复制需要的文件到/var/lib/tftpboot/目录下

    cp /usr/share/syslinux/{pxelinux.0,vesamenu.c32,memdisk,gpxelinux.0} /var/lib/tftpboot/

    • pxelinux.0  即为PXE启动引导程序,
    • gpxelinux  为gPXE引导程序
      • 通过它可以使用快速的HTTP协议,而非较慢的TFTP协议来下载Linux镜像,以加速安装。不过有些硬件对gPXE支持不好。例如,IBM X3650 M4。
    • memdisk  用来引导ISO文件
    • vasamenu.c32  用来在绘制PXE菜单

     

    UEFI

    复制Centos6 中的 BOOTX64.efi 、BOOTX64.conf 、splash.xpm.gz , conf 文件改名为efidefault也就是UEFI的引导菜单

    (Centos7 中用是grub2的方式)

    • BOOTX64.efi
    • efidefault
      • default=0
        splashimage=(nd)/splash.xpm.gz
        timeout 10
        hiddenmenu
        
        title CentOS 7.4 UEFI 
                root (nd)
                kernel /cores/CentOS/7.4/vmlinuz ip=dhcp ks=ftp://10.1.1.11/kickstart.cfgs/CentOS-7.x-min_UEFI.cfg repo=ftp://10.1.1.11/CentOS/7.4
                initrd /cores/CentOS/7.4/initrd.img
        
        title CentOS 6.9 UEFI
                root (nd)
                kernel /cores/CentOS/6.9/vmlinuz ip=dhcp ks=ftp://10.1.1.11/kickstart.cfgs/CentOS-6.x-min_UEFI.cfg repo=ftp://10.1.1.11/CentOS/6.9
                initrd /cores/CentOS/6.9/initrd.img
        
        title Install system with basic video driver
                kernel /images/pxeboot/vmlinuz nomodeset askmethod
                initrd /images/pxeboot/initrd.img
        
        title rescue
                kernel /images/pxeboot/vmlinuz rescue askmethod
                initrd /images/pxeboot/initrd.img
        efidefault 内容
    • splash.xpm.gz

    vsftp

    创建需要的系统目录

    • mkdir -p /var/ftp/{CentOS,Ubuntu,Windows,cfgs}
    • cd /var/ftp
    • mkdir CentOS/{6.9,7.4}
    • mkdir Ubuntu/{16,17}
    • mkdir Windows/{7,10}

    复制完整的镜像文件

    cp -rf /mnt/* /var/tfp/CentOS/7.4

    二级目录结构

    tree /var/ftp
    .
    ├── CentOS
    │   ├── 6.9
    │   └── 7.4
    ├── kickstart.cfgs
    ├── Ubuntu
    │   ├── 16
    │   └── 17
    └── Windows
        ├── 10
        └── 7

     

     

    Kickstart

     1 install
     2 url --url=ftp://10.1.1.104/CentOS/7.4
     3 text
     4 lang en_US.UTF-8
     5 keyboard us
     6 zerombr
     7 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder=sda
     8 network  --bootproto=dhcp --device=enp0s3 --onboot=yes --noipv6 --hostname=CentOS7
     9 timezone --utc Asia/Shanghai
    10 authconfig --enableshadow --passalgo=sha512
    11 rootpw  --iscrypted $6$Ivywr2J3hw9DVOyM$YSNpObpKiJ7iRvOL9wpJf/mEY29cAuMG3drIvcXc56pQkyQIR68RuwfonNVSkt2CZMcgLwITASS/tlX98SfTZ0
    12 clearpart --all --initlabel
    13 part /boot --fstype xfs --size 1024 
    14 part swap --size 1024    
    15 part / --fstype xfs --size 8192
    16 part /home --fstype xfs --size 1 --grow
    17 services --enabled="chronyd"
    18 firstboot --disable
    19 selinux --disabled
    20 firewall --disabled
    21 logging --level=info
    22 reboot
    23 
    24 %packages            
    25 @^minimal
    26 @core
    27 chrony
    28 kexec-tools
    29 
    30 %end
    BIOS MBR分区 ks 文件
     1 install
     2 url --url=ftp://10.1.1.11/CentOS/7.4
     3 text
     4 keyboard us
     5 lang en_US.UTF-8
     6 bootloader --location=mbr            
     7 zerombr
     8 clearpart --all --initlabel
     9 part /boot/efi --fstype efi --size 200 --asprimary --ondisk sda
    10 part /boot --fstype xfs --size 500 --ondisk sda
    11 part swap --size 1024 --ondisk sda
    12 part / --fstype xfs --size 8192 --ondisk sda
    13 part /home --fstype xfs --size 1 --grow --ondisk sda
    14 network  --bootproto=dhcp --device=enp0s3 --onboot=yes --noipv6 --hostname=CentOS7
    15 timezone --utc Asia/Shanghai
    16 authconfig --enableshadow --passalgo=sha512
    17 rootpw  --iscrypted $6$Ivywr2J3hw9DVOyM$YSNpObpKiJ7iRvOL9wpJf/mEY29cAuMG3drIvcXc56pQkyQIR68RuwfonNVSkt2CZMcgLwITASS/tlX98SfTZ0
    18 logging --level=info
    19 
    20 %pre
    21 parted -s /dev/sda mklabel gpt
    22 %end
    23 
    24 %packages            
    25 @^minimal
    26 @core
    27 chrony
    28 kexec-tools
    29 %end
    30 
    31 reboot
    UEFI GTP分区 ks 文件

    因详细的kickstart配置文件参数过多,这里不一一表明。

    tftp结构目录

    tree /var/lib/tftpboot

    .
    ├── BOOTX64.efi
    ├── cores
    │   ├── CentOS
    │   │   ├── 6.9
    │   │   │   ├── initrd.img
    │   │   │   └── vmlinuz
    │   │   └── 7.4
    │   │   ├── initrd.img
    │   │   └── vmlinuz
    │   ├── Ubuntu
    │   │   ├── 16
    │   │   └── 17
    │   └── Windows
    │   ├── 10
    │   └── 7
    ├── efidefault
    ├── gpxelinux.0
    ├── memdisk
    ├── pxelinux.0
    ├── pxelinux.cfg
    │   ├── boot.msg
    │   ├── default
    │   ├── splash.jpg
    │   └── vesamenu.c32
    └── splash.xpm.gz

     

    启动服务

    • systemctl start dhcpd
    • systemctl start tftp
    • systemctl start xinetd
    • systemctl start vsftpd

     加入开机自启动

    • systemctl enable dhcpd
    • systemctl enable tftp
    • systemctl enable xinetd
    • systemctl enable vsftpd

    经过测试CentOS7 PXE无人职守安装并无问题,BIOS 和 UEFI 均可。

  • 相关阅读:
    感性的记录一次生活
    CF 696 A Lorenzo Von Matterhorn(二叉树,map)
    UVA 673 Parentheses Balance(栈)
    POJ 1363 Rails(栈)
    HDU 1314 Numerically Speaking(大数加减乘除+另类二十六进制互相转换)
    UVA 540 Team Queue(模拟+队列)
    HDU 1276 士兵队列训练问题(模拟)
    CF 480 B Long Jumps (map标记)
    UVA 136 Ugly Numbers
    HDU 1027 Ignatius and the Princess II
  • 原文地址:https://www.cnblogs.com/IMxY/p/8955411.html
Copyright © 2011-2022 走看看