PXE 是由 Intel 公司开发的网络引导技术,工作在 Client(客户机)/Server (服务器)模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。PXE可以引导和安装Windows,linux等多种操作系统。
PXE 远程安装服务器集成了 CentOS 7 安装源、 TFTP 服务、 DHCP 服务,能够向客户机裸机发送 PXE 引导程序、 Linux 内核、启动菜单等数据,以及提供安装文件。
1、Client开机,发广播向DHCP服务器请求IP地址,PXE Server上的DHCP服务接收到请求后,验证Client的MAC等信息通过后,发送一个可用IP地址给Client,并将启动文件pxelinux.0的存放地址(TFTP提供)发送给Client
2、得到地址的Client向TFTP服务器请求pxelinux.0文件,PXE Server(TFTP服务)向Client发送pxelinux.0的文件大小信息,Client验证如果文件大小信息可接受,便返回同意信息,之后TFTP服务向Client发送pxelinux.0文件
3、Client执行pxelinux.0文件,之后向TFTP请求配置信息文件,(TFTP服务工作目录中的pxelinux.cfg/default),TFTP服务把配置文件发给Client
4、Client向TFTP服务请求Linux内核和根文件系统,TFTP服务将Linux内核(vmlinuz)和根文件系统(initrd.img)文件传给Client
5、Client启动Linux内核,之后通过http协议得到kickstart以及系统安装文件(ks.cfg),并根据kickstart文件自动安装CentOS(通过Kickstart 配置实现无人值守自动安装)
首先有两台显卡带有PXE协议的服务器,一台搭建PXE服务作为PXE远程安装服务器并且已经安装好Linux操作系统,一台用作客户机使用PXE服务器安装Linux系统。
服务器的开局已经做好查看开局配置连接
[root@localhost ~]# mkdir -p /var/ftp/centos7 //创建一个放安装文件的目录
[root@localhost ~]# cp -rf /mnt/* /var/ftp/centos7/
//将挂载到mnt目录下的所有光盘文件复制到刚创建的目录中
[root@localhost ~]# yum -y install vsftpd //安装FTP服务
已加载插件:fastestmirror, langpacks
centos | 3.6 kB 00:00
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 vsftpd.x86_64.0.3.0.2-22.el7 将被 安装
--> 解决依赖关系完成
......
已安装:
vsftpd.x86_64 0:3.0.2-22.el7
完毕!
[root@localhost ~]# systemctl start vsftpd //启动FTP服务
[root@localhost ~]# systemctl enable vsftpd //开机自动启动FTP服务
[root@localhost ~]# yum -y install tftp-server.x86_64 //安装TFTP服务
.........
已安装:
tftp-server.x86_64 0:5.2-13.el7
完毕!
[root@localhost ~]# vi /etc/xinetd.d/tftp //编辑TFTP的配置文件,设置启动项
//TFTP服务由tftp-server软件包提供,默认由xinetd超级服务进行管理,因此配置文件位于/etc/xinetd.d/tftp
........
server_args = -s /var/lib/tftpboot //指定的TFTP根目录
disable = no //将yes改为no 开机自启
.......
[root@localhost ~]# systemctl start tftp //开启tftp服务
用于 PXE 网络安装的 Linux 内核(vmlinuz)、根文件系统( initrd.img)可以从 挂载的光盘获得,位于文件夹/mnt/images/pxeboot 下。找到这两个文件并将其复制到 tftp 服务的根目录下。
[root@localhost ~]# cd /mnt/images/pxeboot/ //进入这个这个目录
[root@localhost pxeboot]# ls -l //查看目录
总用量 53041
-rw-r--r-- 1 root root 48434768 9月 5 2017 initrd.img //根文件系统( initrd.img)
-r--r--r-- 1 root root 441 9月 6 2017 TRANS.TBL
-rwxr-xr-x 1 root root 5877760 8月 23 2017 vmlinuz // Linux 内核(vmlinuz)
[root@localhost pxeboot]# cp vmlinuz /var/lib/tftpboot //复制文件到TFTP的根目录下
[root@localhost pxeboot]# cp initrd.img /var/lib/tftpboot
5.1、用于 PXE 网络安装的引导程序为 pxelinux.0,由软件包 syslinux 提供。安装软件包syslinux,默认安装目录为/usr/share/syslinux/,然后将目录中文件 pxelinux.0 也复制到 tftp 服务的根目录下。
注:引导程序(Boot Loader):是存储在 MBR(主引导记录)或 GUID(全局唯一标识符)分区表中的一个小程序,用于帮助把操作系统装载到内存中。如果没有引导程序,那么你的操作系统将不能够装载到内存中。
[root@localhost pxeboot]# yum -y install syslinux
......
已安装:
syslinux.x86_64 0:4.05-13.el7
完毕!
[root@localhost pxeboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
//复制文件到TFTP的根目录下
5.2、启动菜单用来指导客户机的引导过程,包括如何调用内核,如何加载初始化镜像。默认的启动菜单文件为 default,应放置在 tftp 根目录的 pxelinux.cfg 子目录下。启动菜单配置通过手动建立。
启动菜单有三个引导入口,分别为图形安装(默认)、文本安装、救援模式。其中, prompt 用来设置是否等待用户选择; label 用来定义并分隔启动项; kernel 和 append用来定义引导参数。
[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg //创建一个启动菜单引导的目录
[root@localhost ~]# vi /var/lib/tftpboot/pxelinux.cfg/default //编辑启动菜单引导的配置文件
default auto //指定默认接入口名称
prompt 1 //1 表示等待用户选择安装 0表示不等待用户选择安装,自动安装时为0
label auto //图形安装(默认安装)
kernel vmlinuz //引导加载内核
append initrd=initrd.img method=ftp://20.0.0.20/centos7
// 引导加载根文件系统镜像文件,以及文件获取的方式和位置
label linux text //文本安装
kernel vmlinuz
append text initrd=initrd.img method=ftp://20.0.0.20/centos7
label linux rescue //救援模式
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://20.0.0.20/centos7
由于 PXE 客户机通常是尚未装系统的裸机,因此为了与服务器取得联系并正确下载相关引导文件,需要预先配置好 DHCP 服务来自动分配地址并告知引导文件位置。 PXE 服务器的 IP 地址为 20.0.0.20, DHCP 地址池为 20.0.0.55~20.0.0.155,子网掩码255.255.255.0。
[root@localhost ~]# yum -y install dhcp //安装dhcp服务
......
已安装:
dhcp.x86_64 12:4.2.5-58.el7.centos
完毕! //安装完成
[root@localhost ~]# vi /etc/dhcp/dhcpd.conf
subnet 20.0.0.0 netmask 255.255.255.0 { //定义dhcp服务的作用域
option routers 20.0.0.20; //指定当前作用域的网关
option domain-name-servers 8.8.8.8; //指定当前作用域DNS服务器
range 20.0.0.100 20.0.0.200; //指定当前作用域中可供分配的IP地址范围
next-server 20.0.0.20; //指定TFTP服务器的地址
filename "pxelinux.0"; //指定PXE引导程序的文件名
}
[root@localhost ~]# systemctl start dhcpd //开启dhcp服务
[root@localhost ~]# systemctl enable dhcpd //设置为开机自启
搭建好 PXE 远程安装服务器以后,就可以使用客户机进行安装测试了。
通过 PXE 技术远程安装 CentOS 7 系统的方法,安装介质不再受限于光盘、移动硬盘等设备,大大提高了系统安装的灵活性。然而,安装期间仍需要手动选择语言、键盘类型、指定安装源等一系列交互操作,当需要批量安装时非常不方便。通过使用 Kickstart 工具配置安装应答文件,自动完成安装过程中的各种设置,从而无须手动干预,提高网络装机效率。
在系统中安装 system-config-kickstart 工具之后,即可通过图形化向导工具来配置安装应答文件。如果用户对自动应答文件的配置比较熟悉,也可以直接编辑安装后自动创建的应答文(/root/anaconda-ks.cfg),根据需要适当修订后使用。
[root@localhost ~]# yum -y install system-config-kickstart //安装图形界面kickstart应用程序
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
......
已安装:
system-config-kickstart.noarch 0:2.9.6-1.el7
作为依赖被安装: //YUM会自动安装依赖关系包
gnome-python2.x86_64 0:2.28.1-14.el7
......
完毕! //安装成功
有了自动安装的应答文件之后,只要将其放置 PXE 安装服务器的 FTP 目录下,并适当修
改引导菜单,就可以实现基于网络的批量自动装机了。
[root@localhost ~]# cp ks.cfg /var/ftp/centos7/ //将文件复制到FTP目录下
[root@localhost ~]# vi /var/lib/tftpboot/pxelinux.cfg/default //编辑启动菜单引导文件
default auto
prompt 0 //0表示不等待用户选择
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://20.0.0.20/centos7 ks=ftp://20.0.0.20/ks.cfg
//获取自动安装应答文件的方式和端口
//最小化安装需要在ks.cfg文件中最后一行下面添加配置信息 (重要) 不添加无法自动安装
[root@localhost ~]# vi /var/ftp/centos7/ks.cfg
.............
%packages
@^minimal
%end
//图形界面安装需要在ks.cfg文件中最后一行下面添加配置信息 (重要) 不添加无法自动安装
[root@localhost ~]# vi /var/ftp/centos7/ks.cfg
.............
//配置信息可以从图形界面安装的系统中的家目录下的anaconda-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
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
[root@localhost ~]# vi /etc/yum.repos.d/centos7.repo
[base]
name=CentOS7.6
baseurl=ftp://20.0.0.20/centos7
enabled=1
gpgcheck=0 //脚本编译完成