目录
1)安装 tftp-server xinetd dhcp vsftpd syslinux 软件包
2)复制 vmlinuz initrd.img pxelinux.0 到 /var/lib/tftpboot/ 目录
3)在 /var/lib/tftpboot/ 目录里准备 PXE 启动菜单配置文件 pxelinux.cfg/default
4)修改服务配置文件,启动 tftp-server xinetd dhcpd vsftpd 服务
编辑 新建一个虚拟机 (网卡选仅主机模式) 开机即可全自动化安装
一、PXE原理和概念
1、PXE概述
PXE 严格来说并不是一种安装方式,而是一种引导的方式。
协议分为 client 和 server 端
运行 PXE 协议需要设置 DHCP 服务器 和 TFTP 服务器。
2、PXE批量部署的优点
- 规模化:同时装配多台服务器
- 自动化:安装系统、配置各种服务
- 远程实现:不需要光盘、U 盘等安装介质
PXE服务的构建过程
PXE服务器和客户机的工作过程:
- 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客户机进入到安装提示向导界面,用户需要手动来完成系统安装的操作。
二、搭建 PXE 远程安装服务器
环境准备:
一台作为pxe服务器,一台作为客户机,网卡取消勾选dhcp配置,关闭防火墙,关闭selinux,仅主机模式下操作
1)安装 tftp-server xinetd dhcp vsftpd syslinux 软件包
tftp-server xinetd 用于传输系统内核和系统初始化镜像文件 vmlinuz initrd.img
dhcp 用于自动分配地址、指定PXE引导文件位置 next-server filename
vsftpd 用于提供系统软件包安装源
syslinux 用于提供PXE引导程序文件 pxelinux.0
yum install -y tftp-server xinetd dhcp vsftpd syslinux
2)复制 vmlinuz initrd.img pxelinux.0 到 /var/lib/tftpboot/ 目录
[root@localhost yum.repos.d]# cd /mnt
[root@localhost mnt]# ls
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
[root@localhost mnt]# cd images/
[root@localhost images]# ls
efiboot.img pxeboot TRANS.TBL
[root@localhost images]# cd pxeboot/
[root@localhost pxeboot]# ls
initrd.img TRANS.TBL vmlinuz #找到vmlinuz initrd.img两个文件复制到/var/lib/tftpboot/中
[root@localhost pxeboot]# cp vmlinuz initrd.img /var/lib/tftpboot/
[root@localhost pxeboot]# cd /usr/share/syslinux/
[root@localhost syslinux]# ls
altmbr.bin dosutil ifcpu64.c32 kbdmap.c32 pcitest.c32 syslinux.com
altmbr_c.bin elf.c32 ifcpu.c32 linux.c32 pmload.c32 syslinux.exe
altmbr_f.bin ethersel.c32 ifplop.c32 ls.c32 poweroff.com ver.com
cat.c32 gfxboot.c32 int18.com lua.c32 pwd.c32 vesainfo.c32
chain.c32 gptmbr.bin isohdpfx.bin mboot.c32 pxechain.com vesamenu.c32
cmd.c32 gptmbr_c.bin isohdpfx_c.bin mbr.bin pxelinux.0 vpdtest.c32
config.c32 gptmbr_f.bin isohdpfx_f.bin mbr_c.bin reboot.c32 whichsys.c32
cpuid.c32 gpxecmd.c32 isohdppx.bin mbr_f.bin rosh.c32 zzjson.c32
cpuidtest.c32 gpxelinux.0 isohdppx_c.bin memdisk sanboot.c32
diag gpxelinuxk.0 isohdppx_f.bin memdump.com sdi.c32
disk.c32 hdt.c32 isolinux.bin meminfo.c32 sysdump.c32
dmitest.c32 host.c32 isolinux-debug.bin menu.c32 syslinux64.exe
[root@localhost syslinux]# cp pxelinux.0 /var/lib/tftpboot/ 找到pxelinux.0复制到/var/lib/tftpboot/中
[root@localhost syslinux]# ls /var/lib/tftpboot/
initrd.img pxelinux.0 vmlinuz #三个文件复制齐了
3)在 /var/lib/tftpboot/ 目录里准备 PXE 启动菜单配置文件 pxelinux.cfg/default
vim default
append rescue initrd=initrd.img method=ftp://192.168.80.10/centos7
default auto
prompt 0
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.100.10/centos7 ks=ftp://192.168.100.10/ks.cfg
label linux text
kernel vmlinuz
append text initrd=initrd.img method=ftp://192.168.100.10/centos7 ks=ftp://192.168.100.10/ks.cfg
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://192.168.100.10/centos7 ks=ftp://192.168.100.10/ks.cfg
4)修改服务配置文件,启动 tftp-server xinetd dhcpd vsftpd 服务
-
[root@localhost pxelinux.cfg]# cd /etc/xinetd.d/ [root@localhost xinetd.d]# ls #切目录找tftp chargen-dgram daytime-dgram discard-dgram echo-dgram tcpmux-server time-dgram chargen-stream daytime-stream discard-stream echo-stream tftp time-stream [root@localhost xinetd.d]# vim tftp #配置tftp [root@localhost xinetd.d]# systemctl enable --now tftp xinetd #自启且开启tftp xinetd Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket. [root@localhost xinetd.d]# systemctl status tftp xinetd #检查运行状态
-
[root@localhost xinetd.d]# cd /usr/share/doc/dhcp-4.2.5/ [root@localhost dhcp-4.2.5]# ls dhcpd6.conf.example dhcpd.conf.example ldap [root@localhost dhcp-4.2.5]# \cp -f dhcpd.conf.example /etc/dhcp/dhcpd.conf [root@localhost dhcp-4.2.5]# cd /etc/dhcp/ [root@localhost dhcp]# ls dhclient.d dhclient-exit-hooks.d dhcpd6.conf dhcpd.conf scripts [root@localhost dhcp]# vim dhcpd.conf #配置dhcpd [root@localhost dhcp]# systemctl enable --now dhcpd #开启dhcpd服务
-
[root@localhost dhcp]# systemctl enable --now vsftpd vsftpd启动!
-
[root@localhost dhcp]# yum install -y system-config-kickstart.noarch #下载自动化服务文件
在服务器中设置
配置静态ip也可以 是一种选择 但这里我选择了更快捷的dhcp
脚本如下:
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://192.168.80.30/centos7
enabled=1
gpgcheck=0' > /etc/yum.repos.d/local.repo
返回 根目录下查看 ls
配置ks.cfg
[root@localhost ~]# vim ks.cfg
将原有的软件包配置复制下来 粘贴添加到 ks.cfg
[root@localhost ~]# vim anaconda-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
打开文本 粘贴配置到行尾
[root@localhost ~]# vim ks.cfg
复制配置文件 挂载使用
[root@localhost ~]# cp ks.cfg /var/ftp/
[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
ks.cfg pub
[root@localhost ftp]# mkdir centos7
[root@localhost ftp]# mount /dev/sr0 centos7/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ftp]# ls centos7/
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL