pxe知识点

2021-01-20  本文已影响0人  逗比的一生

原文链接:https://www.cnblogs.com/boowii/p/6475921.html
搭建步骤:https://www.cnblogs.com/IMxY/p/8955411.html

理论描述

自动启动安装过程

服务器从第一次加电到连接到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平台。

安装PXELINUX

pxelinux.0即为PXE启动引导程序,gpxelinux为gPXE引导程序。memdisk用来引导ISO文件,vasamenu.c32用来在绘制PXE菜单。
pxelinux.0默认使用pxelinux.cfg文件夹作为其配置文件夹。其配置文件的格式与isolinux相同。pxelinux通过以下步骤查找其配置文件:

首先,若其PXE协议栈提供了固件的UUID,则查找其UUID为文件名的配置文件。如果BIOS没有提供可用的UUID,则使用ffffffff-ffff-ffff-ffff-ffffffffffff。UUID为标准的小写十六进制字母格式。例如,b8945908-d6a6-41a9-611d-74a6ab80b83d。

其次,寻找其短划线分割的小写十六进制MAC地址为文件名的配置文件。例如,如果其MAC地址为88:99:AA:BB:CC:DD,则寻找文件名为01-88-99-aa-bb-cc-dd的配置文件。

再次,查找以大写十六进制格式的IP地址为文件名的配置文件。例如192.0.2.91的大写十六进制IP为C000025B。
最后,如果配置文件依旧没找到,则会删除IP地址的一个末位十六进制数字,再次重试。最终会查找一个文件名为小写default的配置文件。

例如,如果启动文件路径为/var/lib/tftpboot/pxelinux.0(/var/lib/tftpboot/为TFTP根目录),UUID为b8945908-d6a6-41a9-611d-74a6ab80b83d,MAC地址为88:99:AA:BB:CC:DD,IP地址为192.0.2.91,则pxelinux会依次尝试如下文件:

/pxelinux.cfg/b8945908-d6a6-41a9-611d-74a6ab80b83d
/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/pxelinux.cfg/C000025B
/pxelinux.cfg/C000025
/pxelinux.cfg/C00002
/pxelinux.cfg/C0000
/pxelinux.cfg/C000
/pxelinux.cfg/C00
/pxelinux.cfg/C0
/pxelinux.cfg/C
/pxelinux.cfg/default

接下来仅讨论其默认配置文件default。default配置文件的格式与isolinux一样。可以照搬isolinux的配置文件

创建pxelinux.0使用的配置文件夹pxelinux.cfg,并下载其依赖的其他配置文件。

安装BOOTX64.EFI

UEFI模式下,无法用pxelinux进行引导,因其不包含相关硬件抽象层的驱动。以CentOS考虑, UEFI引导程序可以从其x86_64的安装镜像里获取。

cd /var/lib/tftpboot/
wget http://10.17.26.68/linux/centos/6/os/x86_64/EFI/BOOT/{BOOTX64.efi,BOOTX64.conf,splash.xpm.gz}
 

配置BOOTX64.EFI
bootx64.efi使用默认配置文件efidefault,其格式与grub配置文件格式类似。修改其配置文件如下:

[root@dhcp ~]# cd /var/lib/tftpboot/
[root@dhcp ~]# mv BOOTX64.conf efidefault
[root@dhcp ~]# cat efidefault
#debug --graphics
default=0
splashimage=(nd)/splash.xpm.gz
timeout 10
hiddenmenu
title Auto Install 64bit CentOS System
    root (nd)
    kernel pxelinux.cfg/6/x86_64/vmlinuz ks=http://10.17.26.68/linux/ks/CentOS-6-x86_64-UEFI-100GLVM-New-AutoInstall-ks.cfg
    initrd pxelinux.cfg/6/x86_64/initrd.img
title rescue
    root (nd)
    kernel pxelinux.cfg/6/x86_64/vmlinuz rescue askmethod
    initrd pxelinux.cfg/6/x86_64/initrd.img
 

至此,所有需要准备的引导程序和及其配置文件都已经准备完毕,此时/var/lib/tftpboot目录的结构如下所示:

[root@dhcp ~]# tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── BOOTX64.efi
├── efidefault
├── gpxelinux.0
├── memdisk
├── pxelinux.0
├── pxelinux.cfg
│  ├── 5
│  │  ├── i386
│  │  │  ├── initrd.img
│  │  │  └── vmlinuz
│  │  └── x86_64
│  │    ├── initrd.img
│  │    └── vmlinuz
│  ├── 6
│  │  ├── i386
│  │  │  ├── initrd.img
│  │  │  └── vmlinuz
│  │  └── x86_64
│  │    ├── initrd.img
│  │    └── vmlinuz
│  ├── 7
│  │  └── x86_64
│  │    ├── initrd.img
│  │    └── vmlinuz
│  ├── boot.msg
│  ├── default
│  ├── memtest
│  ├── splash.jpg
│  └── vesamenu.c32
└── splash.xpm.gz

9 directories, 21 files
上一篇下一篇

猜你喜欢

热点阅读