一、原理与概念:
事实上把PXE称作是一种引导方式而不是安装方式似乎更加准确。
PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动,但是有一个前提条件是计算机的网卡必须具有引导功能,这个网卡中要有一个PXE客户端。
当计算机POST自检成功以后,BIOS把网卡中ROM的PXE客户端调入内存执行,PXE客户端通过网络中的DHCP服务器获取一个IP地址,拿到IP地址以后PXE继续引导计算机与网络中的TFTP客户端建立连接,从而从TFTP服务器中获取开机引导文件之后请求并下载安装需要的文件。在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。
1.1 PXE工作步骤简介:
1):PXE客户端通过网络中的DHCP服务器拿到自己的IP地址。
2):拿到IP地址以后与网络中的TFTP服务器建立连接,请求下载计算机安装程序启动所需文件,其中包括pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件.
3):拿到计算机安装启动程序所需文件以后,在pxelinux.0的引导下启动安装程序,并读取pxelinux.cfg/default文件,得到安装程序所需的应答文件,既ks.cfg文件的存放位置。
4):计算机根据配置文件指定的位置的得到并且读取应答文件,开始按照应答文件的安装策略安装操作系统。同时应该文件有会指定系统安装所需要的配置文件以及二进制程序包的文件的位置。
5):计算机根据应答文件指定的位置获取系统安装所需要的配置文件以及二进制程序包,完成操作系统的自动安装。
1.2 总结
根据上边介绍的PXE的工作原理以及步骤,我们不难总结出部署PXE安装操作系统之前所需要做的准备工作,这里只谈软件环境:
在网络中配置DHCP服务器,用来给计算机自动分配IP地址
在网中配置TFTP服务器,为PXE提供安装程序启动所需要的文件
ks应答文件,配置操作系统的安装策略以及指明系统安装所需文件
配置存放系统安装文件的服务器,可以是NFS、HTTP 或 FTP 服务器,接下来将会以FTP服务作为示例。
二、实际操作
以下所有实验均采用 centos7.2009 版镜像
请提前关闭 firewalld 和 selinux (可选以下方法)
__set_config() {
firewall-cmd --state
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
sed -i 's,^SELINUX=.*$,SELINUX=disabled,' /etc/selinux/config
}
__set_config
2.1 搭建ftp服务器,将yum源拷贝到ftp上
yum -y install autofs vsftpd
systemctl enable --now autofs
systemctl enable --now vsftpd
将整个yum源拷贝至FTP服务器,不仅仅是Packages
mkdir /media/cdrom/
mount /dev/cdrom /media/cdrom/
cd /var/ftp
mkdir yum
cd yum
cp -rf /media/cdrom/* ./
测试
本机windows测试FTP服务器是否搭建正常,ftp://ip/
看到我们复制过去的 yum 文件夹可以正常显示,并且可以正常访问;说明FTP服务器没有问题。
2.2 安装并配置DHCP
yum -y install dhcpd
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
#删除其中所有内容,添加如下内容
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0{ #设置DHCP网段
range 192.168.0.2 192.168.0.200; #设置DHCP地址池的范围
next-server 192.168.0.95; #设置FTP服务器的地址
filename "pxelinux.0";
}
systemctl enable --now dhcpd #设置DHCP开机自启动
2.3 安装 tftp-server,xinetd,syslinux
yum -y install tftp-server syslinux xinetd
vim /etc/xinetd.d/tftp
" disable = no "
systemctl enable --now xinetd
2.4 配置系统启动文件
cd /var/lib/tftpboot/
cp /usr/share/syslinux/pxelinux.0 ./
cp /var/ftp/yum/isolinux/vmlinuz ./
cp /var/ftp/yum/isolinux/initrd.img ./
cp /var/ftp/yum/isolinux/vesamenu.c32 ./
cp /var/ftp/yum/isolinux/boot.msg ./
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /var/ftp/yum/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
vim /var/lib/tftpboot/pxelinux.cfg/default
#找到 label linux 在它上面添加如下内容,并注释掉下面标签中的menu default:
label centos
menu label ^Install CentOS Linux 7 PXE
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=ftp://192.168.0.95/yum inst.ks=ftp://192.168.0.95/ks.cfg quiet
2.5 配置system-config-kickstart
如果是最小化安装的系统先安装图形化界面
yum groupinstall -y "GNOME Desktop" -y
进入图形化界面的命令行
yum -y install system-config-kickstart
打开命令行执行
system-config-kickstart
1
2
3
4
5
6
7
其他的选项保持默认即可。(注意修改FTP服务器的地址!!!!)
#最后一项配置在安装后配置yum源
mkdir /etc/yum.repos.d/old
cp -rf /etc/yum.repos.d/* /etc/yum.repos.d/old/
rm -f /etc/yum.repos.d/*
echo '[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=ftp://192.168.0.95/yum
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7'>/etc/yum.repos.d/CentOS-Base.repo
注意把这个文件保存到 /root/ 目录下即可
2.6 配置 ks.cfg
#在root目录下找到anaconda-ks.cfg,在这个文件中找到下列内容并加入到 ks.cfg 中
%packages
@^minimal
@core
kexec-tools
%end
#将其加到 ks.cfg 配置yum的脚本之前,文件后面部分如下:
########################################################################################
# Disk partitioning information
part /boot --fstype="xfs" --size=1024
part / --fstype="xfs" --size=20480
%packages
@^minimal
@core
kexec-tools
%end
%post --interpreter=/bin/bash
mkdir /etc/yum.repos.d/old
cp -rf /etc/yum.repos.d/* /etc/yum.repos.d/old/
rm -f /etc/yum.repos.d/*
echo '[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=ftp://192.168.0.95/yum
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7'>/etc/yum.repos.d/CentOS-Base.repo
%end
2.7 将ks.cfg拷贝至 /var/ftp/ 下
cp ks.cfg /var/ftp
三、测试
新建虚拟机,测试自动安装操作系统 (不要设置镜像地址;为空即可)
出现这个直接跳过就行
弹出安装页面选择第一个选项
这里需要我们手动点击下一步 (已识别到我们的yum源)
这里必须设置密码,否则不可下一步
安装完毕之后重启即可
如果出现这个问题,可以选择重新启动进入系统
重新启动之后可以正常进入,显示内核版本。
出现登录页面,显示安装成功