1. 安装所需软件包
yum install -y tftp-server httpd syslinux xinetd dhcp*
2. 停止安全策略
systemctl stop firewalld
setenforce 0
3. 配置DHCP如下:
ddns-update-style interim;
allow bootp;
allow booting;
subnet 10.53.0.0 netmask 255.255.0.0 {
option routers 10.53.100.254;
next-server 10.53.100.11; #该IP为PXE引导程序bootx64.efi或者pxelinux.0所在服务器
option time-offset -18000;
range dynamic-bootp 10.53.100.100 10.53.100.110;#dhcp服务器地址池范围
default-lease-time 21600;
max-lease-time 43200;
filename "mbr/bootx64.efi"; #该文件路径为tftp根目录,引导之后,则已引导文件所在目录为根目录
# filename "mbr/pxelinux.0"; #该文件路径为tftp根目录,引导之后,则已引导文件所在目录为根目录
}
其中红色字体为而选一模式,bootx64.efi为UEFI引导方式所需要的引导文件,pxelinux.0为传统BIOS引导方式所需要的引导文件。
4. 配置tftp服务器
4.1. 使用如下命令,修改配置tftp配置文件,启用tftp
sed -i '/disable/s/yes/no/' /etc/xinetd.d/tftp
创建tftpboot目录,来方便配置。
mkdir /tftpboot/
并配置tftp根目录为新创建的/tftpboot 目录
server_args = -s /tftpboot
最终tftp配置如下:(标红为修改的位置)
[root@7-4-1 tftpboot]# cat /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
5. 拷贝引导和内核文件,/tftpboot目录最终如下:
[root@7-4-1 tftpboot]# tree /tftpboot/
/tftpboot/
├── kernel
│ ├── 7.2
│ │ ├── initrd.img
│ │ └── vmlinuz
│ ├── 7.3
│ │ ├── initrd.img
│ │ └── vmlinuz
│ └── 7.4
│ ├── initrd.img
│ └── vmlinuz
├── mbr
│ ├── pxelinux.0
│ ├── pxelinux.cfg
│ │ └── default
│ └── vesamenu.c32
└── uefi
├── bootx64.efi
└── grub.cfg
7 directories, 11 files
其中,kernel mbr uefi目录为使文件结构调理清晰创建的目录,并非必须,三个目录对应文件获取方法如下:
u kernel目录
该目录下对应7.2 7.3 7.4目录下文件 为该centos对应版本镜像中的内核文件,每个版本两个文件路径如下:
注意:/Cent-iso为原版镜像的挂载点,如下皆为如此。
/Cent-iso/isolinux/initrd.img
/Cent-iso/isolinux/vmlinuz
u mbr目录:
pxelinux.0文件为安装syslinux软件包后生成的文件路径如下:
cp /usr/share/syslinux/pxelinux.0 /tftpboot/mbr/
pxelinux.cfg目录需要手动创建:
mkdir -p /tftpboot/mbr/pxelinux.cfg
vesamenu.c32、default需要从原版镜像获取,镜像中路径如下:
default文件对应路径如下:
cp /Cent-iso/isolinux/isolinux.cfg /tftpboot/mbr/pxelinux.cfg/default
vesamenu.c32文件为传统BIOS引导菜单所需,路径如下:
cp /Cent-iso/isolinux/vesamenu.c32 /tftpboot/mbr/
u uefi目录:
grub.cfg为复制光盘中的文件即可
cp /Cent-isoEFI/BOOT/grub.cfg /tftpboot/uefi/
bootx64.efi需要grub2-mkstandalone命令来生成,该命令需要软件包名称:
yum install -y grub2-efi-modules
制作efi引导文件命令如下:
grub2-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --modules="tftp net efinet linux part_gpt efifwsetup" -o bootx64.efi
其中-o 后的 bootx64.efi即为我们需要的文件,制作完成后,拷贝至对应路径即可。
最后附上grub.cfg和default文件:
default
[root@7-4-1 tftpboot]# cat /tftpboot/mbr/pxelinux.cfg/default
default vesamenu.c32
timeout 600
display boot.msg
# Clear the screen when exiting the menu, instead of leaving the menu displayed.
# For vesamenu, this means the graphical background is still displayed without
# the menu itself for as long as the screen remains in graphics mode.
menu clear
menu background splash.png
menu title Mr Song's PXE
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13
# Border Area
menu color border * #00000000 #00000000 none
# Selected item
menu color sel 0 #ffffffff #00000000 none
# Title bar
menu color title 0 #ff7ba3d0 #00000000 none
# Press [Tab] message
menu color tabmsg 0 #ff3a6496 #00000000 none
# Unselected menu item
menu color unsel 0 #84b8ffff #00000000 none
# Selected hotkey
menu color hotsel 0 #84b8ffff #00000000 none
# Unselected hotkey
menu color hotkey 0 #ffffffff #00000000 none
# Help text
menu color help 0 #ffffffff #00000000 none
# A scrollbar of some type? Not sure.
menu color scrollbar 0 #ffffffff #ff355594 none
# Timeout msg
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none
# Command prompt text
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none
# Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message.
menu tabmsg Press Tab for full configuration options on menu items.
menu separator # insert an empty line
menu separator # insert an empty line
label linux
menu label ^7.2
kernel ../kernel/7.2/vmlinuz
append initrd=../kernel/7.2/initrd.img inst.stage2=http://10.53.2.200/yum/7.2-yum/ quiet
label linux
menu label ^7.3
menu default
kernel ../kernel/7.3/vmlinuz
append initrd=../kernel/7.3/initrd.img inst.stage2=http://10.53.2.200/yum/7.3-yum/ quiet
label linux
menu label ^7.4
kernel ../kernel/7.4/vmlinuz
append initrd=../kernel/7.4/initrd.img inst.stage2=http://10.53.2.200/yum/7.4-yum/ quiet
menu separator # insert an empty line
# utilities submenu
menu begin ^Troubleshooting
menu title Troubleshooting
label vesa
menu indent count 5
menu label Install CentOS 7 in ^basic graphics mode
text help
Try this option out if you're having trouble installing
CentOS 7.
endtext
kernel ../kernel/7.4/vmlinuz
append initrd=../kernel/7.4/initrd.img inst.stage2=http://10.53.2.200/yum/7.4-yum/ xdriver=vesa nomodeset quiet
label rescue
menu indent count 5
menu label ^Rescue a CentOS system
text help
If the system will not boot, this lets you access files
and edit config files to try to get it booting again.
endtext
kernel ../kernel/7.4/vmlinuz
append initrd=../kernel/7.4/initrd.img inst.stage2=http://10.53.2.200/yum/7.4-yum/ rescue quiet
label memtest
menu label Run a ^memory test
text help
If your system is having issues, a problem with your
system's memory may be the cause. Use this utility to
see if the memory is working correctly.
endtext
kernel memtest
menu separator # insert an empty line
label local
menu label Boot from ^local drive
localboot 0xffff
menu separator # insert an empty line
menu separator # insert an empty line
label returntomain
menu label Return to ^main menu
menu exit
menu end
grub.cfg
[root@7-4-1 tftpboot]# cat /tftpboot/uefi/grub.cfg
set default="1"
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
#menu title Mr.Song's PXE
set timeout=60
### END /etc/grub.d/00_header ###
search --no-floppy --set=root -l 'CentOS 7 x86_64'
### BEGIN /etc/grub.d/10_linux ###
menuentry '7.2' --class fedora --class gnu-linux --class gnu --class os {
linuxefi (tftp)/kernel/7.2/vmlinuz inst.repo=http://10.53.2.200/yum/7.2-yum/ quiet
initrdefi (tftp)/kernel/7.2/initrd.img
}
menuentry '7.3' --class fedora --class gnu-linux --class gnu --class os {
linuxefi (tftp)/kernel/7.3/vmlinuz inst.repo=http://10.53.2.200/yum/7.3-yum/ quiet
initrdefi (tftp)/kernel/7.3/initrd.img
}
menuentry '7.4' --class fedora --class gnu-linux --class gnu --class os {
linuxefi (tftp)/kernel/7.4/vmlinuz inst.repo=http://10.53.2.200/yum/7.4-yum/ quiet
initrdefi (tftp)/kernel/7.4/initrd.img
}
submenu 'Troubleshooting -->' {
menuentry 'Install CentOS 7 in basic graphics mode' --class fedora --class gnu-linux --class gnu --class os {
linuxefi (tftp)/kernel/7.4/vmlinuz inst.stage2=http://10.53.2.200/yum/7.4-yum/ xdriver=vesa nomodeset quiet
initrdefi (tftp)/kernel/7.4/initrd.img
}
menuentry 'Rescue a CentOS system' --class fedora --class gnu-linux --class gnu --class os {
linuxefi (tftp)/kernel/7.4/vmlinuz inst.stage2=http://10.53.2.200/yum/7.4-yum/ rescue quiet
initrdefi (tftp)/kernel/7.4/initrd.img
}
}
注意:如上配置文件中,使用了其他服务器上的http镜像源来作为系统镜像源,实际可以使用本机输出nfs、ftp、http等作为安装源。
另外,由于能力有限,目前无法找到解决自动判断引导模式为UEFI或者传统BIOS模式,故只能其中的使用一种模式,即
finme bootx64.efi -> UEFI
或者
finme bootx64.efi -> 传统BIOS
希望大家不吝赐教。