• 搭建PXE服务器安装UEFI启动的centos7


    搭建PXE服务器安装UEFI启动的centos7

    by: 铁乐与猫

    环境

    注: 此文暂不涉及kickstart方式的自动安装。

    pxe-server服务器

    • 虚拟机:VirtualBox

    • 虚拟网卡:VirtualBox Host-Only Network #2

      • 后面和VMware的桥接要用到,注意要关闭dhcp功能

      • 管理-主机网络管理器中不勾选相应网卡的DHCP服务器,如图:

        在这里插入图片描述

    • cpu: 2核

    • 内存:2G

    • 磁盘:40GB

    • 操作系统:centos 7.6

    • 主机名:pxe-server.tielemao.com

    • 镜像:CentOS-7-x86_64-DVD-1611.iso

    • ip:192.168.33.110

    • dhcp: 12:4.2.5-77.el7.centos

    • tftp-server: 5.2-22.el7

    • vsftpd: 3.0.2-25.el7

    • syslinux: 4.05-15.el7

    pxe-client 测试客户端

    • 虚拟机:Vmware

    这里你也可以server和client都使用virtualbox或都使用vmware,网络设置的方式又稍有不同,但原理是一样的.

    同样是保证server和client在同一网络模式且关闭dhcp服务即可。

    • 网卡:自定义模式-桥接外部网卡-桥接到virtualbox的server端所用的网卡,如图:

    在这里插入图片描述

    • cpu: 1核

    • 磁盘:20G

    • 内存:3G或以上!这里我设置了4G.

      • 着重要说一下内存的设置,因为这个我踩了一个大坑,且一般讲述pxe安装系统的各个官网都不会注明,因为那些文档是写给真实环境的,不太可能有低于3G的内存了。我之前设了1G,结果最后会碰到

        /dev/root does not exist的错误,想都想不到这个居然是调整一下虚拟机的内存就可以避免了。

        这里要特别感谢一下以下博客,我是在这里才找到解决的办法的:

        http://m.blog.chinaunix.net/uid-31555782-id-5819768.html

    其它参数就没有什么好注意的了

    搭建PXE服务端

    配置主机名

    [root@localhost ~]# hostnamectl set-hostname pxe-server.tielemao.com
    [root@localhost ~]# hostname
    pxe-server.tielemao.com
    
    • 1
    • 2
    • 3

    配置DHCP服务

    yum install -y dhcp
    
    • 1

    安装完成后进行配置,如下:

    vim /etc/dhcp/dhcpd.conf

    # 不使用DNS动态更新
    ddns-update-style none;
    # 忽略客户端DNS更新
    ignore client-updates;
    
    authoritative;
    
    # 响应客户端的启动查询(开机时发送的DHCP请求)
    allow booting;
    allow bootp;
    allow unknown-clients;
    
    #DHCP configuration for PXE boot server
    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 arch code 93 = unsigned integer 16; # RFC4578
    
    subnet 192.168.33.0 netmask 255.255.255.0 {
      range 192.168.33.100 192.168.33.199;
      # 设置DNS服务器地址
      option domain-name-servers 192.168.33.110;
      # 设置DNS域
      option domain-name "tielemao.com";
      # 设置客户租的默认网关
      option routers 192.168.33.1;
      option broadcast-address 192.168.33.255;
      # 默认租约时间,单位为秒
      default-lease-time 3600;
      # 设置最大租约时间,单位为秒
      max-lease-time 7200;
    
      class "pxeclients" {
              match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
              next-server 192.168.33.110;
    
              # UEFI x86-64 boot (RFC4578 architecture types 7, 8 and 9)
              if option arch = 00:07 {
                  filename "uefi/bootx64.efi";
              } else if option arch = 00:08 {
                  filename "uefi/bootx64.efi";
              } else if option arch = 00:09 {
                  filename "uefi/bootx64.efi";
              } else {
                  filename "pxelinux.0";
              }
      }
    }
    
    • 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

    注:centos6的话可以使用service dhcpd configtest测试文件是否有错误。

    启动并启用dhcpd.service

    [root@pxe-server]# systemctl start dhcpd.service && systemctl enable dhcpd.service
    
    • 1

    允许通过Linux防火墙的DHCP服务。同样,proxy-dhcp端口是传播TFTP服务器IP地址所必需的。

    [root@pxe-server ~]# firewall-cmd --permanent --add-service={dhcp,proxy-dhcp}
    success
    [root@pxe-server ~]# firewall-cmd --reload
    success
    
    • 1
    • 2
    • 3
    • 4

    为某台主机设置IP地址保留,把要保留IP的MAC地址和要保留的IP地址写入dhcpd.conf的配置文件即可,然后设置客户机为自动获取IP。

    例:

    host fantasy {
      hardware ethernet 00:0c:29:74:DF:C5;
      fixed-address 192.168.33.151;
    }
    
    • 1
    • 2
    • 3
    • 4

    配置PXE引导支持基于UEFI的系统:

    这里拆分说明一下全局配置中要增加以下配置以支持UEFI引导centos:

    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 arch code 93 = unsigned integer 16; # RFC4578
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    上面的dhcp的配置,如果不考虑uefi引导的话,是直接如下配就可以的:

      #PXE boot server
      next-server 192.168.33.110;
      filename "pxelinux.0";
    
    • 1
    • 2
    • 3

    因为要到uefi所以配置成如下:

     class "pxeclients" {
              match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
              next-server 192.168.33.110;
    
              # UEFI x86-64 boot (RFC4578 architecture types 7, 8 and 9)
              if option arch = 00:07 {
                  filename "uefi/bootx64.efi";
              } else if option arch = 00:08 {
                  filename "uefi/bootx64.efi";
              } else if option arch = 00:09 {
                  filename "uefi/bootx64.efi";
              } else {
              # PXE boot
                  filename "pxelinux.0";
              }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    当然针对其它系统你还得去查相应的match。我这里只示范centos的。

    重新启动dhcpd.service以应用更改。

    [root@pxe-server ~]# systemctl restart dhcpd.service
    
    • 1

    如果dhcpd.service在启动过程中出现错误,请在其中查找任何可能的语法错误,然后尝试重新启动该服务。

    可以借助systemctl status dhcpd.service 查看。

    另外上面的filename与之后的tftp放的efi引导文件密切相关。

    配置TFTP服务

    yum 安装tftp

    yum install -y tftp-server
    
    • 1

    同样启动并启用tftp.service

    [root@pxe-server ~]# systemctl start tftp.service && systemctl enable tftp.service
    
    • 1

    同样允许linux防火墙通过

    [root@pxe-server ~]# firewall-cmd --permanent --add-service=tftp
    success
    [root@pxe-server ~]# firewall-cmd --reload
    success
    
    • 1
    • 2
    • 3
    • 4

    这里更推荐使用xinetd的方式运行和设置tftp,不过测试环境就从简了,默认tftp的根目录就在/var/lib/tftpboot

    配置FTP服务

    需要FTP服务才能将OS安装介质共享到PXE引导客户端。一些系统管理员使用NFS代替FTP服务。但是,如果我们使用NFS,则当我们要将Microsoft Windows OS安装选项添加到PXE引导服务器时,也必须配置Samba。因此,最好使用一种通用技术来共享不同操作系统的OS安装介质。HTTP也是FTP的良好替代,可用于共享OS安装介质。

    使用yum安装VSFTPD服务器。

    yum install -y vsftpd
    
    • 1

    启动并启用vsftpd.service

    [root@pxe-server ~]# systemctl enable vsftpd.service && systemctl start vsftpd.service
    
    • 1

    允许通过Linux防火墙的FTP服务。

    [root@pxe-server ~]# firewall-cmd --permanent --add-service=ftp
    success
    [root@pxe-server ~]# firewall-cmd --reload
    success
    
    • 1
    • 2
    • 3
    • 4

    以上如果只是为了单机测试,不在生产环境的话,大可systemctl stop firewalld关闭防火墙。

    selinux也可以关闭以防影响。

    安装Syslinux

    Syslinux软件包提供了各种引导程序,包括FAT文件系统,可以引导到Microsoft Windows环境。

    通过yum安装syslinux软件包。

    [root@pxe-server ~]# yum install -y syslinux
    
    • 1

    配置PXE UEFI引导服务器:

    将必要的引导程序(由syslinux提供)复制到**/var/lib/ tftpboot**目录,非必要,主要是针对非uefi的。

    [root@pxe-server ~]# cp -v /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
    
    [root@pxe-server ~]# cp -v /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
    
    [root@pxe-server ~]# cp -v /usr/share/syslinux/mboot.c32 /var/lib/tftpboot/
    
    [root@pxe-server ~]# cp -v /usr/share/syslinux/chain.c32 /var/lib/tftpboot/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 下载centos7 DVD镜像:
    wget http://mirrors.ustc.edu.cn/centos/7.3.1611/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso
    • 挂载第一张DVD镜像:
    # mount -o loop CentOS-7-x86_64-DVD-1611.iso /mnt/centos7
    • 将pxelinux.0等复制到/tftpboot:
    # cp /mnt/centos7/isolinux/{boot.cat,boot.msg,grub.conf,isolinux.bin,splash.png,TRANS.TBL,vesamenu.c32} /var/lib/tftpboot/
    
    • 1
    • 创建必要的目录。这里以centos7为例:

      [root@pxe-server ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
      [root@pxe-server ~]# mkdir -p /var/lib/tftpboot/networkboot/centos7
      [root@pxe-server ~]# mkdir /var/ftp/pub/centos7
      
      • 1
      • 2
      • 3
    • 将安装光盘目录中的启动文件复制到tftpboot(重点):

    # cp /mnt/centos7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/networkboot/centos7
    
    • 1

    从centos7光盘中copy内容到/var/ftp/pub/centos7

    [root@pxe-server ~]# cp -rf /mnt/centos7 /var/ftp/pub/
    
    • 1

    创建一个pxe服务器的默认菜单,针对不是uefi的,传统LEGACY引导

    # vim /var/lib/tftpboot/pxelinux.cfg/default
    
    • 1

    内容可以如下:

    default menu.c32
    prompt 0
    timeout 300
    ONTIMEOUT 1
    
    menu title ########## CentOS 7 PXE Boot Menu ##########
    
    label 1
    menu label ^1) Install CentOS 7
    menu default
    kernel /networkboot/centos7/vmlinuz
    append initrd=/networkboot/centos7/initrd.img inst.repo=ftp://192.168.33.110/pub/centos7 
    
    label 2
    menu label ^2) Boot from local drive
    localboot 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    UEFI引导

    创建用于uefi启动的目录

    mkdir /var/lib/tftpboot/uefi
    
    • 1

    需要复制来自centos7的uefi启动的文件,可以先安装以下rpm包:

    yum install grub2-efi-x64 shim-x64
    
    • 1

    这样会在本地目录中存放有相关uefi的启动文件:

    /boot/efi/EFI/centos/
    /boot/efi/EFI/redhat/
    
    • 1
    • 2

    复制到**/var/lib/tftpboot**目录下的uefi并设置相应属性为755:

    cp -p /boot/efi/EFI/centos/*.efi /var/lib/tftpboot/uefi/
    chmod 755 /var/lib/tftpboot/uefi/*.efi
    
    • 1
    • 2

    同样,bootx64.efi文件我们先安装如下rpm:

    yum install grub2-efi-x64-modules
    
    • 1

    然后构建你自己的启动文件bootx64.efi:

    grub2-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="tftp net efinet linux part_gpt efifwsetup" -o /var/lib/tftpboot/uefi/bootx64.efi
    
    • 1

    The grub2 modules are documented in https://www.linux.org/threads/understanding-the-various-grub-modules.11142/

    创建grub.cfg文件

    我们的PXELINUX菜单不适用于UEFI系统,因此我们必须为UEFI客户端创建另一个菜单。

    uefi/bootx64.efi引导文件将在同一子目录中查找Grub配置文件grub.cfg。使用以下内容创建/var/lib/tftpboot/uefi/grub.cfg

    set default="0"
    function load_video {
      insmod efi_gop
      insmod efi_uga
      insmod video_bochs
      insmod video_cirrus
      insmod all_video
    }
    load_video
    set gfxpayload=keep
    insmod net
    insmod efinet
    insmod tftp
    insmod gzio
    insmod part_gpt
    insmod ext2
    set timeout=60
    menuentry 'Install UEFI CentOS Linux 7' --class fedora --class gnu-linux --class gnu --class os {
      linuxefi (tftp)/uefi/vmlinuz ip=dhcp inst.repo=ftp://192.168.33.110/pub/centos7/
      initrdefi (tftp)/uefi/initrd.img
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    重新启动tftp.service以应用更改:

    [root@pxe-server ~]# systemctl restart tftp.service
    
    • 1

    UEFI配置己完成

    要测试配置,请将基于UEFI的系统连接到网络,然后将其打开。

    注意

    需要检查清楚对应系统镜像的vmlinuz和initrd.img的md5值一不一致。

    来避免一些奇葩问题。比如不一致的话会出现进到pxe安装的时候一直dracut-initqueue timeout的情况。

    参考

    http://m.blog.chinaunix.net/uid-31555782-id-5819768.html

    http://hmli.ustc.edu.cn/doc/linux/centos-autoinstall.htm

  • 相关阅读:
    深入理解java虚拟机:虚拟机字节码执行引擎(1)
    工业自动化编程与数字图像处理技术
    一文带您快速了解工业交换机
    计算机毕业设计 基于Web的视频及游戏管理平台的设计与实现 Java实战项目 附源码+文档+视频讲解
    ADDS:检查 AD Domain 的健康和复制状态
    新版kafka可视化界面组件
    点云从入门到精通技术详解100篇-点云滤波算法及单木信息提取(续)
    【无标题】
    算法竞赛进阶指南 基本算法 0x04 二分与三分
    智能制造行业的工控安全解决方案
  • 原文地址:https://blog.csdn.net/u012145252/article/details/125405273