红帽7系统(UEFI)PXE环境的搭建

因为工作过程中需要装机的机器比较多,所以想搭建一个PXE的服务来简化平时的工作量。在这期间也踩到很多坑。足足花了我一个星期的时间才给搭建好。所以写个文章记录一下。

搭建PXE服务所用到的服务

我所用到的是服务是:DHCP+TFTP+HTTP

DHCP(未pxe客户端分配地址)

TFTP(给pxe客户端提供下载的文件)

HTTP(给pxe客户端提供镜像)

1.挂载yum源,配置yum仓库

mkdir /mnt/mount #创建挂载的地址
mount /dev/cdrom /mnt/mount/  #挂载镜像

配置yum仓库
cat > /etc/yum.repos.d/pxe.repo << EOF
> [development]  #仓库的名字必须是这个命令,否在在编写ks.cfg 脚本时。系统是识别不到软件包的
> name = pxe
> baseurl = file:///mnt/mount
> enabled = 1
> gpgcheck = 0
> EOF

yum clean all  #清楚yum仓库缓存
yum makecache  #加载yum仓库缓存

2.安装dhcp服务

yum install dhcp -y  #安装dhcp服务
systemctl enable dhcpd  #将dhcp服务设为开机自启
systemctl start dhcpd    #启动dhcp服务

编辑dhcp的配置文件
ddns-update-style interim;
ignore client-updates;
option space pxelinux;
option pxelinux.magic code 208 = string;
option pxelinux.configfile code 209 = text;
option pxelinux.pathprefix code 210 = text;
option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;
subnet 192.168.1.0 netmask 255.255.255.0 {  #dhcp分配的网段
  range 192.168.1.100 192.168.1.200; #dhcp服务器可分配的ip地址
  option routers 192.168.1.254; #dhcp的网关地址
  default-lease-time 21600;
  max-lease-time43200;

class "pxeclients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    next-server 192.168.1.20; #tftp服务器的地址(我这里指的是本机的地址)
    filename = "uefi/bootx64.efi"; #pxe UEFI启动时下载的引导文件
    }
}

systemctl restart dhcpd #配置完之后重启dhcp服务
systemctl status dhcpd :查看服务状态是否起来



#filename 这里需要好好说一下,我当时就是在这里栽的跟头。
服务器bios的启动模式时分为两种的,一种是传统的启动模式:“legacy” 在一些老的服务器中是使用这个作为默认的启动的模式的。另一种是“uefi”的启动方式,现在绝大部分服务器的启动方式都是uefi的。
不同的启动方式需要下载的启动文件是不同的,legacy的启动方式需要下载的文件是 “pxelinux.0” 由这个软件包提供“syslinux”。UEFI的启动方式需要下载的文件就是我所写的这个“bootx64.efi” 这个文件是自己手动生成的,我后面会说到这个文件怎么生成的。 我这里主要讲的是UEFI的启动方式,legacy的就不多说了,需要的同学可以看一下这篇文章:https://blog.csdn.net/qq_42130112/article/details/104960479

3.安装http服务,后续提供镜像地址

yum install httpd -y  #安装httpd服务
systemctl enable httpd
systemctl start httpd

mkdir /var/www/html/dvd  #创建挂载镜像的目录
umount /mnt/mount #将之前挂载的镜像卸载掉,重新挂载
mount /dev/cdrom /var/www/html/dvd #重新挂载镜像

systemctl restart httpd #重启httpd 服务

cat > /etc/yum.repos.d/pxe.repo << EOF #重新配置yum仓库
> [development]  #名字还是不能变地
> name = pxe
> baseurl = http://192.168.1.20/dvd #将原本的file 改为http
> enabled = 1
> gpgcheck = 0
> EOF

yum clean all  #清楚yum仓库缓存
yum makecache  #加载yum仓库缓存

3.安装tftp服务

yum install tftp-server #安装tftp服务
systemctl enabled tftp #启动tftp服务
systemctl start tftp #启动tfto服务
systemctl status tftp #查看tftp服务的状态是否起来

4.拷贝所需的文件到tftp目录下 

tftp的默认的下载目录在cd /var/lib/tftpboot/下。

因为我们之前dhcpd的配置文件 filename 这个配置中写到,启动文件是在 uefi/bootx64.efi

所以我们需要在/var/lib/tftpboot目录下新建一个名为uefi的目录,并把启动文件放在该目录下。

mkdir /var/lib/tftpboot/uefi  #创建新文件夹

cp /var/www/html/dvd/isolinux/{vmlinuz,initrd.img} /var/lib/tftp/uefi #vmlinuz pxe启动时用到的内核,initrd.img pxe启动时用到的镜像。复制到uefi目录下。

cp /boot/efi/EFI/redhat/*.efi  /var/lib/tftpboot/uefi/ #将PXE启动时需要的文件拷到uefi目录下。(有些文件在加载时其实时不需要的,图方便就一起复制过来了)

         

5.生成bootx64.efi文件  

现在就差bootx64.efi 这个文件了,我们现在来生成他。

生成这个文件需要先安装一个软件包。

yum install -y grub2-efi-modules #安装所需的软件包

[root@localhost ~]# grub2-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="tftp net efinet linux part_gpt efifwsetup" -o bootx64.efi  #执行这条命令就会在当前目录下生成bootx64.efi 这个文件

cp bootx64.efi  /var/lib/tftpboot/uefi  #将bootx64文件拷进uefi目录中

6.生成grub.cfg文件

grub.cfg 文件是你进入系统时,选择系统的那个导航栏。这个文件可以自己手动写,也可以从镜像中复制过来更改。

cat /var/lib/tftpboot/uefi/grub.cfg  #还是要在uefi目录下

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=http://192.168.1.20/dvd
  initrdefi (tftp)/uefi/initrd.img
}

# (tftp)/uefi/vmlinuz  :PXE启动时内核文件的地址,前面要加(tftp)照着我的格式写
# inst.repo=http://192.168.1.20/dvd :指定镜像的挂载地址
# (tftp)/uefi/initrd.img :PXE启动时镜像文件的地址,前面也要加(tftp)

7.关掉防火墙和selinux 
 

systemctl stop firewalld.service  #关闭防火墙

systemctl mask  firewalld.service  #不让防火墙被其他服务带活
setenforce 0    #关闭selinux
getenforce      #查看selinux状态。为Permissive着放行。这样改只是临时生效,如果想永久生效建议修改/etc/selinux/config
Permissive

现在就可以开始测试了,虚拟就如果要模拟uefi启动模式需要修改配置文件

红帽7系统(UEFI)PXE环境的搭建_第1张图片

 右击虚拟机选择“打开虚拟机目录”,找到一个以*.vmx结尾的文件,进去添加一行参数

 保存退出即可

新建虚拟机开始测试:

红帽7系统(UEFI)PXE环境的搭建_第2张图片

成功进入到选择系统界面,pxe搭建成功。 

你可能感兴趣的:(运维,centos,linux)