前言
简单阐述:通过网卡启动 将准备的好的 4大文件 下载本地内存 ,然后利用kikstart 应答文件 完成一键装机。
什么是PXE?
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统。
通俗理解:就是通过网卡将远端服务器上镜像操作系统至本机硬盘。计算机在启动时,通过PXE协议与DHCP服务器通信获取IP地址,然后通过TFTP协议从TFTP服务器下载镜像文件,最后通过网络引导加载镜像文件来安装或启动操作系统。
老生常谈:系统装机的三种引导方式
硬盘
光驱
网络(网卡)pxe
系统安装过程
- 加载boot loader
- Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
- 加载启动安装菜单
- 加载内核和initrd系统(文件才能使用文件)
- 加载根系统()
- 运行anaconda的安装向导
在系统光盘的isolinux目录下有和安装相关的文件
- boot.cat: 相当于grub的第一阶段
- isolinux.bin:光盘引导程序,在mkisofs的选项中需要明确给出文件路径,这个文件属于SYSLINUX项目
- isolinux.cfg:启动菜单的配置文件,当光盘启动后(即运行isolinux.bin),会自动去找isolinux.cfg文件
- vesamenu.c32:是光盘启动后的启动菜单图形界面,也属于SYSLINUX项目,menu.c32提供纯文本的菜单
- memtest:内存检测程序
- splash.png:光盘启动菜单界面的背景图
- vmlinuz:是内核映像
- initrd.img:ramfs文件(精简版的linux系统,文件系统驱动等)
工作原理
当计算机引导时,BIOS把PXEClient调入内存中执行,然后由PXEClient将放置在远端的文件通过网络下载到本地运行。
实现过程
硬性条件
- BIOS支持
- 网卡支持(目前基本上都已经支持)
- 在bios中开启开关 ,服务器一本没打开 bmc界面打开
- 网络需要有一台 DHCP 服务器以便为客户机自动分配地址、指定引导文件位置 。 网卡自带DHCP功能 dhcp 分配的具体ip地址。
- 服务器通过 tftp服务(简单文件传输协议)来提供系统内核和引导镜像的下载 (udp协议 )网卡自带这个功能(不支持其他的远程共享服务)
实现具体流程
1.计算机启动时,网卡通过dhcp服务器获取具体的IP地址和和引导程序(boot loader)的地址 tftpserver地址(dhcp本身不提供tftp服务) 2.网卡使用tftp 把引导程序加载到内存中来 3.bios执行引导程序 4.引导程序会根据tftp地址,去查找配置文件 5.根据配置文件引导系统安装 6.系统开始安装
通俗:PXE 远程安装服务器集成了 CentOS 7 安装源、TFTP 服务、DHCP 服务,向客户机裸机发送 PXE 引导程序、Linux 内核、启动菜单等数据,以及提供安装文件。
实现过程需要4个服务
- tftp 提供内核和引导文件
- vsftp 安装系统镜像文件的获取方式
- syslinux
- syslinux启动盘就可以引导各种基于DOS的工具
- pxelinux.0 启动pxe
-dhcp 可以提供具体ip地址 给网卡。
实验操作
文字阐述大概过程:
- dhcp 分配地址 给同一局域网内新加机器的(配置文件)指明tftp 服务器的地址
- tftp服务端开启 (udp协议) 配置 默认关闭
- 安装syslinux 取得 pxelinux.0 文件
- 安装vsftpd服务挂载软件安装源
- 将四大文件拷入 tftp的配置文件中
- initrd.img
- pxelinux.0 (centos7中类似grub2)
- pxelinux.cfg/default (手写)
- vmlinuz 6.将服务开启,关闭防火墙,selinux
具体操作: !!#ffff00 安装dhcp 设置地址池 指定ftp服务器地址 启动文件!!
[root@xyy1 yum.repos.d]# yum install dhcp -y #安装dhcp
[root@xyy1 yum.repos.d]# rpm -qc dhcp
/etc/dhcp/dhcpd.conf #配置文件位置
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
[root@xyy1 yum.repos.d]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example #需要到指定位置查看对应配置文件模板
# see dhcpd.conf(5) man page
[root@xyy1 yum.repos.d]# cp -p /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf #复制模板文件到配置文件 替换掉
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? y
[root@xyy1 yum.repos.d]# vim /etc/dhcp/dhcpd.conf #修改dhcp配置文件
subnet 192.168.64.0 netmask 255.255.255.0 {
range 192.168.64.30 192.168.64.50; #ip地址范围
option routers 192.168.64.16; #路由
next-server 192.168.64.16; 指定ftp服务器地址
filename "pxelinux.0"; #指定启动文件
}
[root@xyy1 yum.repos.d]# systemctl start dhcpd #启动dhcpd服务
[root@xyy1 yum.repos.d]# systemctl status dhcpd #查看dhcpd状态
2.安装tftp 配置文件 修改为开启状态
[root@xyy1 yum.repos.d]# yum install tftp-server -y #安装
[root@xyy1 yum.repos.d]# rpm -ql tftp-server
/etc/xinetd.d/tftp #配置文件 可以使用rpm -qc 查看
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd
/usr/share/doc/tftp-server-5.2
/usr/share/doc/tftp-server-5.2/CHANGES
/usr/share/doc/tftp-server-5.2/README
/usr/share/doc/tftp-server-5.2/README.security
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot #站点
[root@xyy1 yum.repos.d]# vim /etc/xinetd.d/tftp #修改配置文件
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no #默认yes 修改为no
per_source = 11
cps = 100 2
flags = IPv4
}
3.安装syslinux 引导程序文件 取得pxelinux.0
[root@xyy1 yum.repos.d]# yum install syslinux -y #安装
[root@xyy1 yum.repos.d]# rpm -ql syslinux |grep pxelinux.0
#筛选出pexlinux.0 找到文件地址
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0 #这个地址为寻找地址
[root@xyy1 yum.repos.d]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #复制pexlinux.0 文件只站点文件下 站点文件最后会存有四大基础文件。
[root@xyy1 tftpboot]# ls
pxelinux.0
4.安装vsftpd 需要通过此服务获取安装源
[root@xyy1 tftpboot]# yum install vsftpd -y #安装
[root@xyy1 tftpboot]# rpm -ql vsftpd #文件列表
# 需要的文件是/var/ftp
[root@xyy1 /]# ls /var/ftp/
pub
[root@xyy1 ftp]# mkdir centos7 #在此目录下 新建安装源 名称自定义
[root@xyy1 ftp]# mount /dev/sr0 /var/ftp/centos7/ #iso文件挂载到安装源。 临时挂载
mount: /dev/sr0 is write-protected, mounting read-only
[root@xyy1 ftp]# ls centos7/ #查看安装源内文件
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@xyy1 ftp]# ls centos7/images/pxeboot/ #第二个文件vmlinuz的位置
initrd.img TRANS.TBL vmlinuz
[root@xyy1 ftp]# cp centos7/images/pxeboot/vmlinuz /var/lib/tftpboot/ #复制到站点文件
[root@xyy1 ftp]# cd /var/lib/tftpboot/ #切换到站点文件
[root@xyy1 tftpboot]# mkdir pxelinux.cfg #建文件目录 规定
[root@xyy1 isolinux]# vim /var/lib/tftpboot/pxelinux.cfg/default #修改配置文件
default linux
timeout=600
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.64.16/centos7
ks=ftp://192.168.64.16/ks.cfg #指定位置文件
label linux text
kernel vmlinuz
append text initrd =initrd.img method=ftp://192.168.64.16/centos7
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://192.168.64.16/centos7
[root@xyy1 isolinux]# cp /var/ftp/centos7/isolinux/initrd.img /var/lib/tftpboot/ #复制initrd.img至站点文件
[root@xyy1 isolinux]# ls /var/lib/tftpboot/ #查看四大文件已经配置完成。
initrd.img pxelinux.0 pxelinux.cfg vmlinuz
- 安装kickstart 无人值守安装软件 (图形化工具)
[root@xyy1 isolinux]# yum install system-config-kickstart -y #安装
操作界面在虚拟机 基本配置 安装方法 安装新引导 引导文件设置 分区信息 关闭防火墙 配置网卡 取消图形界面 安装后脚本设置 保存文件
返回xshell 操作界面 将vsftpd dhcpd tftp 三种服务。
新建一个虚拟机 正常创建 调整内存和 处理器 开启启动即可。