PXE介绍
允许客户机通过网络从远程服务器下载引导镜像、内核文件,并且加载系统的安装文件,安装整个linux操作系统
PXE的核心:批量装机
无人值守:自动化操作
优点
1、规模化:同时安装多个linux
2、自动化:无需人工接入,自动完成系统安装
3、远程实现:既不需要光盘,也不需要U盘,所有的一切都来自服务端提供,必须要依赖网络
所需程序
tftp:文件传输(小文件传输),传输内核文件、引导镜像等,使用的是udp协议,端口号:69
xinetd:网络守护进程服务程序,管理轻量级的网络服务
dhcp:动态地给客户机分配ip地址
vsftpd:大文件传输,传输系统的安装文件
syslinux:PXE的引导程序,引导客户机的安装步骤
kickstart:无人值守程序,自动化配置安装需要的软件以及磁盘分区等
三个核心文件
initrd.img:引导镜像文件(初始化镜像文件)
vmlinuz:内核文件
以上这两个依赖光盘镜像
pxelinux.0:PXE引导文件
由syslinux程序提供
实验
实现pxe半自动化装机
1、关闭主机虚拟机,内存调至4G
2、安装并启用tftp服务
[root@pup1 ~]# yum -y install tftp-server xinetd
[root@pup1 ~]# cd /etc/xinetd.d/
[root@pup1 xinetd.d]# vim tftp
[root@pup1 xinetd.d]# systemctl restart tftp.socket
[root@pup1 xinetd.d]# systemctl enable tftp.socket
[root@pup1 xinetd.d]# systemctl restart xinetd.service
[root@pup1 xinetd.d]# systemctl enable xinetd.service
3、安装dhcp服务
[root@pup1 ~]# yum -y install dhcp
[root@pup1 ~]# cd /usr/share/doc/dhcp-4.2.5/
[root@pup1 dhcp-4.2.5]# ls
dhcpd6.conf.example dhcpd.conf.example ldap
[root@pup1 dhcp-4.2.5]# cp dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? yes
[root@pup1 dhcp-4.2.5]# cd /etc/dhcp
[root@pup1 dhcp]# ls
dhclient.d dhclient-exit-hooks.d dhcpd6.conf dhcpd.conf scripts
[root@pup1 dhcp]# cp dhcpd.conf dhcpd.conf.bak.20230914
[root@pup1 dhcp]# ls
dhclient.d dhcpd6.conf dhcpd.conf.bak.20230914
dhclient-exit-hooks.d dhcpd.conf scripts
[root@pup1 dhcp]# vim dhcpd.conf
ddns-update-style none; //关闭DNS的动态更新
next-server 192.168.146.50; //指定TFTP的服务器地址
filename "pxelinux.0"; //指定要下载的PXE引导文件名
subnet 20.0.0.0 netmask 255.255.255.0 {
range 20.0.0.100 20.0.0.110;
option routers 20.0.0.10; //默认网关地址指向TFTP服务器的IP地址
}
[root@localhost dhcp]# systemctl restart dhcpd
[root@localhost dhcp]# systemctl enable dhcpd
[root@pup1 dhcp]# systemctl restart dhcpd
[root@pup1 dhcp]# systemctl enable dhcpd
4、准备Linux内核、初始化镜像文件
[root@pup1 dhcp]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@pup1 dhcp]# cd /mnt/images/pxeboot/
[root@pup1 pxeboot]# ls
initrd.img TRANS.TBL vmlinuz
[root@pup1 pxeboot]# cp initrd.img /var/lib/tftpboot/
[root@pup1 pxeboot]# cp vmlinuz /var/lib/tftpboot/
5、安装syslinux、准备pxe引导程序
[root@pup1 pxeboot]# yum -y install syslinux
[root@pup1 syslinux]# cd /usr/share/syslinux/
[root@pup1 syslinux]# cp pxelinux.0 /var/lib/tftpboot/
[root@pup1 tftpboot]# ls //检查三个文件
initrd.img pxelinux.0 vmlinuz
6、安装ftp服务,准备centos7安装源
[root@pup1 tftpboot]# yum -y install vsftpd
[root@pup1 tftpboot]# cd /var/ftp
[root@pup1 ftp]# ls
pub
[root@pup1 ftp]# mkdir centos7
[root@pup1 ftp]# cp -rf /mnt/* /var/ftp/centos7/ //将镜像文件强制复制道centos7目录中
[root@pup1 ftp]# systemctl restart vsftpd
[root@pup1 ftp]# systemctl enable vsftpd
7、配置启动菜单
[root@pup1 ftp]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@pup1 ftp]# cd /var/lib/tftpboot/
[root@pup1 tftpboot]# ls
initrd.img pxelinux.0 pxelinux.cfg vmlinuz
[root@pup1 tftpboot]# cd pxelinux.cfg/
[root@pup1 pxelinux.cfg]# ls
[root@pup1 pxelinux.cfg]# vim default
default auto //指定菜单入口文件
prompt 0 //是否等待用户选择,0表示不需要用户进行控制
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://20.0.0.10/centos7
//图形化界面的引导参数
label linux text
kernel vmlinuz
append text initrd=initrd.img method=ftp://20.0.0.10/centos7
//字符界面安装的引导参数
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://20.0.0.10/centos7
//引导救援模式
8、关闭防火墙、安全机制并重启相关服务
[root@pup1 pxelinux.cfg]# systemctl stop firewalld
[root@pup1 pxelinux.cfg]# setenforce 0
[root@pup1 pxelinux.cfg]# systemctl enable dhcpd
[root@pup1 pxelinux.cfg]# systemctl enable tftp
[root@pup1 pxelinux.cfg]# systemctl enable vsftpd
9、创建新的虚拟机
开启界面:
实现Kickstart无人值守安装
[root@pup1 pxelinux.cfg]# yum -y install system-config-kickstart
在虚拟机内
将家目录下的anaconda-ks.cfg的配置文件中复制一段进ks.cfg
[root@pup1 ~]# cd /root
[root@pup1 ~]# ls
abcc1 abcc4 Documents initial-setup-ks.cfg Pictures Videos
abcc2 anaconda-ks.cfg Downloads ks.cfg Public
abcc3 Desktop help Music Templates
[root@pup1 ~]# vim ks.cfg
%packages
@base
@core
@desktop-debugging
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@print-client
@x11
binutils
chrony
ftp
gcc
kernel-devel
kexec-tools
make
open-vm-tools
patch
python
%end
[root@pup1 ~]# clear
[root@pup1 ~]# cp ks.cfg /var/ftp
[root@pup1 ~]# cd /var/ftp
[root@pup1 ftp]# ls
centos7 ks.cfg pub
[root@pup1 ftp]# cd /var/lib/tftpboot/pxelinux.cfg/
[root@pup1 pxelinux.cfg]# ls
default
[root@pup1 pxelinux.cfg]# vim default
重新启动: