配置流程
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
希望大家不吝赐教.
来源: http://www.bubuko.com/infodetail-2624745.html