PXE(预启动执行环境)是由Intel公司开发的网络引导技术,工作在Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。
规模化:同时装配多台服务器。
自动化:安装系统、配置各种服务。
远程实现:不需要光盘、U 盘等安装介质。
客户端:
服务端:
(预启动执行环境,在操作系统之前运行)
PXE远程安装服务器集成了 CentOs7 安装源、TFTP 服务、DRCP 服务、FTP 服务,能够向客户机裸机发送PXE 引导程序、Linux内核、启动菜单等数据,以及提供安装文件。
服务名称 | 作用 | 配置文件位置 |
---|---|---|
tftp | 用于传输vmlinuz、initrd.img、pxelinux.0、pxelinux.cfg/default | /etc/xinetd.d/tftpd |
xinetd | 管理tftp服务的 | 后台守护程序 |
dhcp | 用于给客户端自动分配IP地址,并指定pxelinux.0文件所在位置的 | /etc/dhcp/dhcpd.conf |
vsftpd | 用于给客户端传输安装源软件包 | 根目录/var/lib/tftpboot |
文件名称 | 作用 | 来源地址 | 目的地址 |
---|---|---|---|
vmlinuz | 内核文件 | /mnt/images/pxeboot/ | /var/lib/tftpboot/ |
initrd.img | 系统镜像引导文件 | /mnt/images/pxeboot/ | /var/lib/tftpboot/ |
pxelinux.0 | PXE程序引导文件 | syslinux程序提供 /usr/share/syslinux/ | /var/lib/tftpboot/ |
pxelinux.cfg/default | PXE启动菜单文件 | 自建文件 | /var/lib/tftpboot/pxelinux.cfg/ |
TFTP(简单文件传输协议),是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于小文件传输的应用场合。TFTP服务默认由xinetd服务进行管理,使用UDP协议的69号端口。
xinetd是新一代的网络守护进程服务程序,又叫超级服务器,常用来管理多种轻量级Internet服务。
守护进程也称精灵进程(Deamon),是运行在后台的一种特殊进程。守护进程独立于控制终端,它们常常跟随系统启动时启动,在系统关闭时才结束。守护进程周期性的执行某些任务或者等待处理某些事件,Linux上的大多数服务器都是用守护进程实现的。
在系统启动中默认的守护进程的父进程ID全都是init,守护进程特征就是在程序运行名后加了一个d,但不是所有的尾字母是d的进程都是守护进程。
第一步:PXE客户机发出DHCP请求,向DHCP服务器申请IP地址。
第二步:DHCP服务器响应PXE客户机的请求,自动从IP地址池中分配一个IP地址给PXE客户机,并且告知PXE客户机:TFTP服务器的IP地址和PXE引导程序文件pxelinux.0,默认在TFTP共享目录/var/lib/tftpboot/
下。
第三步:PXE客户机向TFTP服务器发起获取pxelinux.0引导程序文件的请求。
第四步:TFTP服务器响应PXE客户机的请求,将其共享的pxelinux.0文件传输给PXE客户机。
第五步:PXE客户机通过网络来启动到系统安装主界面。
第六步:PXE客户机向文件共享服务器(ftp、http、nfs等)发起获取centos或windows系统安装文件的请求。
第七步:文件共享服务响应PXE客户机的请求,将共享的系统安装文件传输给PXE客户机。
第八步:PXE客户机进入到安装提示向导界面,用户需要手动来完成系统安装的操作。
安装并启用TFTP服务
[root@host ~]# yum -y install tftp-server.x86_64 xinetd.x86_64 ##安装tftp软件包和xinetd
[root@host ~]# vim /etc/xinetd.d/tftp ##修改tftp配置文件
service tftp
{
socket_type = dgram #
protocol = udp #TFT服务使用是UDP协议
wait = no #no表示客户机可以多台一起连接,yes表示客户机只能一台一台连接
user = root #
server = /usr/sbin/in.tftpd #
server_args = -s /var/lib/tftpboot #指定TFTP根目录(文件存储路径),默认设置选项,不需要修改
disable = no #no表示开启TFTP服务
per_source = 11 #
cps = 100 2 #
flags = IPv4 #
}
[root@host ~]# systemctl enable --now tftp ##设置开机自启动tftp服务,并立即启动服务
[root@host ~]# systemctl enable --now xinetd ##设置开机自启动xinetd服务,并立即启动服务
安装并启用DHCP 服务
[root@host ~]# yum -y install dhcp ##安装dhcp软件包
[root@host ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? yes
[root@host ~]# vim /etc/dhcp/dhcpd.conf
ddns-update-style none; #取消注释,禁用 DNS 动态更新
next-server 192.168.145.15; #指定 TFTP 服务器的地址
filename "pxelinux.0"; #指定 PXE 引导程序的文件名
subnet 192.168.145.0 netmask 255.255.255.0 { #声明要分配的网段地址
range 192.168.145.100 192.168.145.200; #设置地址池
option routers 192.168.145.2; #默认网关地址指向TFTP服务器的IP地址
}
[root@host ~]# systemctl enable --now dhcpd ##设置开机自启动dhcp服务,并立即启动服务
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
准备Linux内核、初始化镜像文件
[root@host ~]# df -Th #查看光盘是否挂载,若没有挂载可以使用mount挂载
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 13M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda2 xfs 35G 4.7G 30G 14% /
tmpfs tmpfs 378M 28K 378M 1% /run/user/0
/dev/sr0 iso9660 4.4G 4.4G 0 100% /mnt
[root@host ~]# cd /mnt/images/pxeboot/ #
[root@host pxeboot]# ls #查看文件内容
initrd.img TRANS.TBL vmlinuz
[root@host pxeboot]# cp vmlinuz /var/lib/tftpboot/ #复制 Linux系统的内核文件 到TFTP根目录下
[root@host pxeboot]# cp initrd.img /var/lib/tftpboot/ #复制 初始化镜像文件(linux引导加载模块)到TFTP根目录下
准备PXE引导程序
[root@host pxeboot]# yum -y install syslinux #PXE引导程序由软件包 syslinux 提供
[root@host pxeboot]# cd /usr/share/syslinux
[root@host syslinux]# ls
altmbr.bin ethersel.c32 isohdpfx.bin mbr_c.bin sanboot.c32
altmbr_c.bin gfxboot.c32 isohdpfx_c.bin mbr_f.bin sdi.c32
altmbr_f.bin gptmbr.bin isohdpfx_f.bin memdisk sysdump.c32
cat.c32 gptmbr_c.bin isohdppx.bin memdump.com syslinux64.exe
chain.c32 gptmbr_f.bin isohdppx_c.bin meminfo.c32 syslinux.com
cmd.c32 gpxecmd.c32 isohdppx_f.bin menu.c32 syslinux.exe
config.c32 gpxelinux.0 isolinux.bin pcitest.c32 ver.com
cpuid.c32 gpxelinuxk.0 isolinux-debug.bin pmload.c32 vesainfo.c32
cpuidtest.c32 hdt.c32 kbdmap.c32 poweroff.com vesamenu.c32
diag host.c32 linux.c32 pwd.c32 vpdtest.c32
disk.c32 ifcpu64.c32 ls.c32 pxechain.com whichsys.c32
dmitest.c32 ifcpu.c32 lua.c32 pxelinux.0 zzjson.c32
dosutil ifplop.c32 mboot.c32 reboot.c32
elf.c32 int18.com mbr.bin rosh.c32
[root@host syslinux]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #复制 PXE引导程序 到TFTP根目录下
安装FTP服务,准备Centos 7安装源
[root@host syslinux]# yum -y install vsftpd #安装vsftpd软件包
[root@host tftpboot]# cd /var/ftp/ #进入ftp配置文件目录
[root@host ftp]# ls
pub
[root@host ftp]# mkdir /var/ftp/centos7 #
[root@host ftp]# ls
centos7 pub
[root@host ftp]# cp -r /mnt/* /var/ftp/centos7/ #
[root@host ftp]# systemctl enable --now vsftpd ##设置开机自启动ftp服务,并立即启动服务
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
配置启动菜单文件
[root@host ~]# cd /var/lib/tftpboot/
[root@host tftpboot]# ls
initrd.img pxelinux.0 vmlinuz
[root@host tftpboot]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@host tftpboot]# ls
initrd.img pxelinux.0 pxelinux.cfg vmlinuz
[root@host tftpboot]# vim /var/lib/tftpboot/pxelinux.cfg/default
default auto #指定默认入口名称
prompt 1 #设置是否等待用户选择,“1”表示等待用户控制
label auto #图形安装(默认)引导入口,label 用来定义启动项
kernel vmlinuz #kernel 和 append用来定义引导参数
append initrd=initrd.img method=ftp://192.168.145.15/centos7
label linux text #文本安装引导入口,label 用来定义启动项
kernel vmlinuz #kernel 和 append用来定义引导参数
append text initrd=initrd.img method=ftp://192.168.145.15/centos7
label linux rescue #救援模式引导入口,label 用来定义启动项
kernel vmlinuz #kernel 和 append用来定义引导参数
append rescue initrd=initrd.img method=ftp://192.168.145.15/centos7
关闭防火墙
[root@host ftp]# systemctl stop firewalld.service
[root@host ftp]# setenforce 0
验证PXE 网络安装
使用 VMware创建的虚拟机进行测试,虚拟机内存至少需要 2GB,否则在启动安装时可能会报错。
开启虚拟机,在提示字符串“boot:”后直接按Enter键(或执行“auto”命令),将会自动通过网络下载安装文件,并进入默认的图形安装入口;
若执行“linux text”命令,则进入文本安装入口;若执行 “linux rescue”命令,则进入救援模式。
PXE安装介质不在受限于光盘,移动硬盘等设备,大大提高了系统安装的灵活性。然而,安装期间仍需要手动选择语言,键盘类型,指定安装源等一系列交互操作,当需要批量安装时非常不方便。通过使用Kickstart工具配置安装应答文件,自动完成安装过程中的各种设置,从而无需手动干预,提高网络装机效率。
安装system-config-kickstart 工具
[root@host ~]# yum install -y system-config-kickstart.noarch
打开“Kickstart 配置程序”窗口
通过桌面菜单“应用程序”-->“系统工具”-->“Kickstart” 打开
或
执行 “system-config-kickstart” 命令打开
配置kickstart选项
基本配置
默认语言设为“中文(简体)”
时区设为“Asia/Shanghai”
设置root密码,勾选上给root密码加密
高级配置中勾选“安装后重启”。
安装方法
第一个安装方法选择“执行全新安装”
第二个安装方法选FTP
FTP服务器:ftp://192.168.145.30
FTP目录:centos7
引导装载程序选项
“安装类型”:安装新引导装载程序
“安装选项”:在主引导记录(MBR)中安装引导装载程序
分区信息
主引导记录:清除主引导记录
分区:删除所有现存分区
磁盘标签:初始化磁盘标签
布局:添加分区
挂载点:/boot,文件系统类型:xfs,固定大小:500M
文件系统类型:swap,固定大小:4096M
挂载点:/home,文件系统类型:xfs,固定大小:4096M
挂载点:/,文件系统类型:xfs,使用磁盘上全部未使用空间
网络配置
添加网络设备“ens33”
网络类型设为“DHCP”
防火墙配置
禁用 SELinux
禁用防火墙
安装后脚本
勾选“使用解释程序”:/bin/bash
在下面键入您的%post脚本
mkdir /etc/yum.repos.d/repo.bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo.bak
echo '[local]
name=local
baseurl=ftp:///mnt
enabled=1
gpgcheck=0' > /etc/yum.repos.d/local.repo
保存自动应答文件
选择“Kickstart 配置程序”窗口的“文件”-->“保存”命令,选择指定保存位置,文件名为ks.cfg(默认保存在/root/ks.cfg)
[root@host ~]# ls #ks.cfg文件主要包含之前配置的所有操作
anaconda-ks.cfg ks.cfg 模板 图片 下载 桌面
initial-setup-ks.cfg 公共 视频 文档 音乐
配置需要安装的软件包
[root@host ~]# ls #ks.cfg是PXE服务器中生成的自动应答文件,anaconda-ks.cfg 是当前系统的自动应答文件
anaconda-ks.cfg ks.cfg 模板 图片 下载 桌面
initial-setup-ks.cfg 公共 视频 文档 音乐
[root@host ~]# vim anaconda-ks.cfg #可以根据需要将/root/anaconda-ks.cfg 的软件包安装脚本复制到 ks.cfg文件中,只需要复制%packages 到%end 部分即可,实现图形化界面的脚本数据。
%packages
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@development
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
chrony
%end
[root@host ~]# vim ks.cfg #将图形化脚本文件加入到ks.cfg文件中
%packages
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@development
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
chrony
%end
[root@host ~]# cp /root/ks.cfg /var/ftp/ks.cfg #将生成的自动应答文件ks.cfg文件复制到ftp的根目录中
如要求最小化安装,可复制下面内容:
vim ks.cfg
%packages
@^minimal
%end
编辑引导菜单文件 default,添加 ks 引导参数
[root@host ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default auto
prompt 0 #设置是否等待用户选择,“0”表示不等待用户控制
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.145.30/centos7 ks=ftp://192.168.145.30/ks.cfg #添加 ks 引导参数以指定 ks.cfg 应答文件的 URL 路径
新建虚拟机测试
所有配置项无需手动操作,全部自动化完成,安装完成后会自动重启系统
[root@localhost ~]# cd /etc/yum.repos.d/ #进入新的虚拟机查看本地yum源是否配置成功
[root@host yum.repos.d]# ls
local.repo repo.bak