因为工作过程中需要装机的机器比较多,所以想搭建一个PXE的服务来简化平时的工作量。在这期间也踩到很多坑。足足花了我一个星期的时间才给搭建好。所以写个文章记录一下。
我所用到的是服务是:DHCP+TFTP+HTTP
DHCP(未pxe客户端分配地址)
TFTP(给pxe客户端提供下载的文件)
HTTP(给pxe客户端提供镜像)
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仓库缓存
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
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仓库缓存
yum install tftp-server #安装tftp服务
systemctl enabled tftp #启动tftp服务
systemctl start tftp #启动tfto服务
systemctl status tftp #查看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目录下。(有些文件在加载时其实时不需要的,图方便就一起复制过来了)
现在就差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目录中
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)
systemctl stop firewalld.service #关闭防火墙
systemctl mask firewalld.service #不让防火墙被其他服务带活
setenforce 0 #关闭selinux
getenforce #查看selinux状态。为Permissive着放行。这样改只是临时生效,如果想永久生效建议修改/etc/selinux/config
Permissive
现在就可以开始测试了,虚拟就如果要模拟uefi启动模式需要修改配置文件
右击虚拟机选择“打开虚拟机目录”,找到一个以*.vmx结尾的文件,进去添加一行参数
保存退出即可
新建虚拟机开始测试:
成功进入到选择系统界面,pxe搭建成功。