zoukankan      html  css  js  c++  java
  • PXE

    PXE引导的步骤:
     
    1、开机后选择网络启动,client端向server端的dhcpd发起获取IP地址的dhcp请求。
     
    2、server端分配IP后,dhcpd会同时根据其配置文件,通过TFTP协议发送引导文件给client端,即bootloader。
     
    3、对于传统Legacy BIOS,一般使用syslinux提供的pxelinux.0来引导。对于EFI BIOS,需要使用efi文件引导,一般可使用Grub2。为实现UEFI SecureBoot,大多数Linux使用shim.efi嵌套调用grub.efi来引导。
     
    4、传统Legacy BIOS引导,在pxelinux.0引导后,它会请求并加载server端tftpboot目录中,与pxelinux.0同目录下的pxelinux.cfg目录里的default文件,这个文件就是syslinux的引导配置文件,相当于grub2的grub.cfg。
     
    5、EFI BIOS引导,在shim.efi嵌套引导了grubx64.efi之后,它会请求grubx64.efi同目录下的grub.cfg配置文件,同时加载显示引导菜单。而对于RHEL6来说,它并不支持SecureBoot,所以必须要使用grub-efi 0.97来引导,一般是BOOTX64.efi,同时它会请求同目录下的efidefault配置文件,加载并显示引导菜单。
     
    6、在pxelinux.0/grub加载了引导配置之后,就可以选择引导项安装了,引导项必须要包含内核以及initrd,还可以包含其它的一些引导选项,比如键盘、语言、远程repo、kickstart配置文件等等。
     
    7、内核和initrd加载之后,就可以进到安装界面正常安装了。
     
     
    ——————————————————————————————————————
     
     
    RHEL6/7 PXE安装测试步骤 (Legacy/EFI)
     
    说明:
    RHEL6对EFI支持并不好,所以RHEL6推荐使用Legacy而不是EFI模式来安装。
    RHEL7的grubx64.efi无法引导RHEL6的内核。
    VMWare虚拟机在EFI模式下PXE TFTP传输速度比Legacy模式慢很多。
    本文测试Server端使用RHEL7.3,第二块网卡ens34用作dhcpd,IP为192.168.3.3。
     
     
    1、Server端安装如下软件包:
    yum install xinetd tftp tftp-server dhcpd syslinux
     
    2、配置好本地网卡的IP地址,网段即DHCP服务器的网段,建议使用一张单独的网卡单独的网段用作dhcpd服务。
     
    3、编辑/etc/dhcp/dhcpd.conf文件,参考如下:
    option architecture-type code 93 = unsigned integer 16;
     
    subnet 192.168.3.0 netmask 255.255.255.0
    {
        range 192.168.3.10 192.168.3.20;
        option routers 192.168.3.3;
        next-server 192.168.3.3;
     
        class "pxeclients" {
            match if substring
                (option vendor-class-identifier, 0, 9) =
                "PXEClient";
            if option architecture-type = 00:07 or
                option architecture-type = 00:09 {
                    # EFI BIOS
                    filename "images/shim.efi";
                    # filename "images/BOOTX64.efi";
                } else {
                    # Legacy non-EFI BIOS
                    filename "pxelinux.0";
                }
        }
    }
     
    4、挂载RHEL7安装光盘 RHEL-server-7.3-x86_64-dvd.iso 到 /mnt/rhel7,挂载RHEL6安装光盘 RHEL-server-6.8-x86_64-dvd.iso 到 /mnt/rhel6。
     
    5、准备tftp引导的文件:
    mkdir -p /var/lib/tftpboot/pxelinux.cfg
    mkdir -p /var/lib/tftpboot/images/rhel7
    mkdir -p /var/lib/tftpboot/images/rhel6
     
    cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
    cp /mnt/rhel7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
    cp /mnt/rhel7/isolinux/boot.msg /mnt/rhel7/isolinux/vesamenu.c32 /var/lib/tftpboot/
     
    cp /mnt/rhel7/isolinux/vmlinuz /mnt/rhel7/isolinux/initrd.img /var/lib/tftpboot/images/rhel7/
    cp /mnt/rhel6/isolinux/vmlinuz /mnt/rhel6/isolinux/initrd.img /var/lib/tftpboot/images/rhel6/
     
    touch /var/lib/tftpboot/images/grub.cfg
    touch /var/lib/tftpboot/images/efidefault
    cp /boot/efi/EFI/redhat/shim.efi /var/lib/tftpboot/images/
    cp /boot/efi/EFI/redhat/grubx64.efi /var/lib/tftpboot/images/
    cp /mnt/rhel6/EFI/BOOT/BOOTX64.efi /var/lib/tftpboot/images/
     
    如果当前server不是RHEL7的EFI模式安装的,则需要从RHEL7光盘中提取shim.efi和grubx64.efi:
    cp /mnt/rhel7/Packages/grub2-efi-2.02-0.44.el7.x86_64.rpm  /tmp/
    cp /mnt/rhel7/Packages/shim-0.9-2.el7.x86_64.rpm  /tmp/
    rpm2cpio /tmp/grub2-efi-2.02-0.44.el7.x86_64.rpm | cpio -dimv
    rpm2cpio /tmp/shim-0.9-2.el7.x86_64.rpm | cpio -dimv
    cp /tmp/boot/efi/EFI/redhat/shim.efi /var/lib/tftpboot/images/
    cp /tmp/boot/efi/EFI/redhat/grubx64.efi /var/lib/tftpboot/images/
     
    Server端的tftpboot目录结构参考如下:
    [root@RHEL73 /]# tree /var/lib/tftpboot/
    /var/lib/tftpboot/
    ├── boot.msg
    ├── images
    │   ├── BOOTX64.efi
    │   ├── efidefault
    │   ├── grub.cfg
    │   ├── grubx64.efi
    │   ├── rhel6
    │   │   ├── initrd.img
    │   │   └── vmlinuz
    │   ├── rhel7
    │   │   ├── initrd.img
    │   │   └── vmlinuz
    │   └── shim.efi
    ├── pxelinux.0
    ├── pxelinux.cfg
    │   └── default
    └── vesamenu.c32
     
    4 directories, 13 files
     
    6、编辑xinetd的tftp配置文件,使tftp server生效。
    vim /etc/xinetd.d/tftp
    将disable = yes 改成 disable = no,保存退出
     
    7、将RHEL安装光盘的挂载目录使用NFS export出去。
    vim /etc/exports 
    /mnt/rhel6      *(ro)
    /mnt/rhel7      *(ro)
    /mnt/           *(ro)
     
    8、重启必须的服务。
    systemctl restart dhcpd
    systemctl restart xinetd
    systemctl restart nfs
     
    9、对于Legacy BIOS模式PXE引导安装,client端通过DHCP获取到地址之后,会通过TFTP协议 get pxelinux.0这个引导文件,然后会继续get pxelinux.cfg目录下的default文件,加载之后显示引导菜单。下面给出pxelinux.cfg/default引导配置文件的样例。
     
    如果只是想通过把光盘挂载在远程NFS,通过PXE启动到安装界面手动配置安装,可参考如下:
    label rhel7+pxe
      menu label ^Install RHEL 7.3 via PXE+Kickstart
      menu default
      kernel images/rhel7/vmlinuz
      append initrd=images/rhel7/initrd.img inst.repo=nfs:192.168.3.3:/mnt/rhel7/
     
    label rhel6+pxe
      menu label ^Install RHEL 6.8 via PXE+Kickstart
      # menu default
      kernel images/rhel6/vmlinuz
      append initrd=images/rhel6/initrd.img repo=nfs:192.168.3.3:/mnt/rhel6/ ip=dhcp lang=en keymap=us
     
    在实现了上面的PXE+NFS引导手动安装之后,如果想使用Kickstart全自动安装,则需要对上面的配置稍作修改:
    label rhel7+pxe
      ...
      append initrd=images/rhel7/initrd.img inst.ks=nfs:192.168.3.3:/mnt/ks7.cfg
     
    label rhel6+pxe
      ...
      append initrd=images/rhel6/initrd.img ks=nfs:192.168.3.3:/mnt/ks6.cfg  
     
     
    /mnt/ks7.cfg和ks6.cfg就是Kickstart的配置文件,由于Kickstart配置比较复杂,不在本文讨论范围内。
     
    10、对于EFI模式PXE引导安装,RHEL6和RHEL7是不一样的,这里不推荐RHEL6使用EFI方式安装。
     
    11、对于EFI模式下的RHEL7 PXE引导,需要dhcpd.conf指定filename "images/shim.efi",以支持UEFI SecureBoot。通过TFTP把shim.efi加载后会继续嵌套加载引导同目录下的grubx64.efi,然后grub会获取同目录下的grub.cfg以显示引导菜单。下面给出grub.cfg引导配置文件的样例:
     
    如果只是想通过把光盘挂载在远程NFS,通过PXE启动到安装界面手动配置安装RHEL7,可参考如下:
    menuentry 'Install RHEL 7.3 via [UEFI] PXE+Kickstart' {
        linuxefi images/rhel7/vmlinuz inst.repo=nfs:192.168.3.3:/mnt/rhel7/
        initrdefi images/rhel7/initrd.img
    }
     
    在实现了上面的PXE+NFS引导手动安装之后,如果想使用Kickstart全自动安装RHEL7,可参考如下:
    menuentry 'Install RHEL 7.3 via [UEFI] PXE+Kickstart' {
        linuxefi images/rhel7/vmlinuz inst.ks=nfs:192.168.3.3:/mnt/ks7.cfg
        initrdefi images/rhel7/initrd.img
    }
     
    12、对于EFI模式下RHEL6 PXE引导,需要dhcpd.conf指定filename "images/BOOTX64.efi",它其实是grub 0.97。通过TFTP加载了BOOTX64.efi之后它会继续加载同目录下的efidefault引导配置文件,并显示引导菜单。下面给出efidefault引导配置文件的样例:
    如果只是想通过把光盘挂载在远程NFS,通过PXE启动到安装界面手动配置安装RHEL6,可参考如下:
    default=0
    timeout=3
    title Install RHEL 6.8 via [UEFI] PXE+Kickstart
    root (nd)
    kernel /rhel6/vmlinuz repo=nfs:192.168.3.3:/mnt/rhel6/ ip=dhcp lang=en keymap=us
    initrd /rhel6/initrd.img
     
    在实现了上面的PXE+NFS引导手动安装之后,如果想使用Kickstart全自动安装RHEL6,可参考如下:
    default=0
    timeout=3
    title Install RHEL 6.8 via [UEFI] PXE+Kickstart
    root (nd)
    kernel /rhel6/vmlinuz ks=nfs:192.168.3.3:/mnt/ks6.cfg
    initrd /rhel6/initrd.img
     
    13、启动client端机器,使之和server端网络能通。正常情况下,client端应该能获取到IP地址,并根据TFTP获取到的相应的引导文件,引导到RHEL默认的安装界面,或通过kickstart自动开始安装了。
     
    14、如果整个过程中有问题,可以查看server端的日志,/var/log/messages,dhcpd每次给PXE分配地址、tftp发送文件给client端,以及client端挂载NFS的目录,都会在这个文件里面有记录,一般来说看messages这个文件,大概就能判断出来问题出在什么地方。
     
     
    ——————————————————————————————————————
     
     
    Kickstart配置文件相关
     
    RHEL提供了一个图形化的配置工具system-config-kickstart,默认没有安装,需要手动安装。但是这个工具在编辑硬盘分区时,不支持使用LVM,这个比较麻烦,而对于服务器使用的Linux来说LVM管理磁盘是必不可少的。
     
    不过好在RHEL6/7的kickstart都提供了自动LVM分区,实测同时能在Legacy和EFI模式下正常分区。实际上这个自动分区,跟图形安装界面中默认的自动分区方式是完全一样的。下面是ks文件的引导和自动分区部分的样例:
    # Use NFS installation media
    nfs --server=192.168.3.3 --dir=/mnt/rhel7
    # System bootloader configuration
    bootloader --location=mbr
    # Clear the Master Boot Record
    zerombr
    # Partition clearing information
    clearpart --all --initlabel
    # Disk partitioning information
    autopart
     
    如果想生成当前系统的配置,可以使用命令 system-config-kickstart --generate ks.cfg,这会在当前目录生成一个ks.cfg的配置,当然生成的这个基本上是没法直接用的,还是需要用图形界面的system-config-kickstart根据具体需求修改刚生成的ks.cfg。
     
    不管用哪种方式安装完成RHEL后,其安装程序anaconda都会自动生成一个kickstart的配置文件,位于/root/anaconda-ks.cfg。
     
     
  • 相关阅读:
    字符,字符串,字节
    111
    串口通信
    字符编码
    枚举和结构体
    参数数组
    .Net垃圾回收机制
    try{ } catch{ } finally{ }
    LVS 工作原理图文讲解
    自动化运维工具—Ansible常用模块二
  • 原文地址:https://www.cnblogs.com/flintlovesam/p/11412782.html
Copyright © 2011-2022 走看看