玄子Share-PXE高效批量网络装机
部署PXE远程安装服务
PXE 概述
PXE(Preboot eXcution Environment)
- 预启动执行环境,在操作系统之前运行
服务端
- 运行DHCP服务,用来分配地址、定位引导程序
- 运行TFTP服务,提供引导程序下载
客户端
- 网卡支持PXE协议
- 主板支持网络引导
对于无盘工作站,服务器端需要提供可运行的完整系统镜像;
对于远程安装,只要提供引导程序和安装源就可以了
PXE 批量部署的优点
- PXE批量部署的优点规模化:同时装配多台服务器
- 自动化:安装系统、配置各种服务
- 远程实现:不需要光盘、U盘等安装介质
基本部署过程
- 准备CentOS 7 安装源(YUM仓库)
- 安装并启用TFTP服务
- 提供Linux内核、PXE引导程序等
- 安装并启用DHCP服务
- 配置启动菜单
准备CentOS 7 安装源
CentOS 7 安装源支持HTTP、FTP、NFS等协议发布
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# mkdir /var/ftp/centos7
[root@localhost ~]# cp -rf /media/cdrom/* /var/ftp/centos7/
[root@localhost ~]# systemctl start vsftpd
安装并启用TFTP服务
- 安装tftp-server软件包,启用tftp服务
- 配置文件位于/etc/xinetd.d/tftp
[root@localhost ~]# yum -y install tftp-server
[root@localhost ~]# vi /etc/xinetd.d/tftpserver_args = -s /var/lib/tftpbootdisable = no
# 修改配置值
[root@localhost ~]# systemctl start tftp
[root@localhost ~]# systemctl enable tftp
准备Linux内核、PXE引导程序
- Linux内核、初始化镜像文件分别为vmlinuz和initrd.img
- 引导程序为pxelinux.0,由软件包syslinux提供
[root@localhost ~]# cd /media/cdrom/images/pxeboot
# 位于系统镜像文件夹images/pxeboot下
[root@localhost pxeboot]# cp vmlinuz initrd.img /var/lib/tftpboot
[root@localhost ~]# yum -y install syslinux
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
# 也拷贝到tftp的根目录
DHCP服务的PXE设置
[root@localhost ~]# yum -y install dhcp
[root@localhost ~]# vi /etc/dhcp/dhcpd.conf
subnet 192.168.4.0 netmask 255.255.255.0 {......option routers 192.168.4.254;option domain-name-servers 192.168.4.254,202.106.0.20;range 192.168.4.100 192.168.4.200;next-server 192.168.4.254; filename "pxelinux.0";
}
# next-server:指定TFTP服务器地址
# filename:指定要下载的引导程序文件
[root@localhost ~]# systemctl start dhcpd
[root@localhost ~]# systemctl enable dhcpd
配置启动菜单文件
[root@localhost ~]# vi /var/lib/tftpboot/pxelinux.cfg/default
# 确保pxelinux.cfg目录已存在
default auto
prompt 1
label autokernel vmlinuzappend initrd=initrd.img method=ftp://192.168.4.254/centos7
# 图像界面
label linux textkernel vmlinuzappend text initrd=initrd.img method=ftp://192.168.4.254/centos7
#文本模式安装
label linux rescuekernel vmlinuzappend rescue initrd=initrd.img method=ftp://192.168.4.254/centos7
# 进入救援模式
验证PXE网络安装
-
为客户机安装系统
-
调整BIOS设置,以便从网络引导
-
自动获取IP地址,并指定CentOS 7 安装源
-
其余过程与本地安装相同
-
若用VMware虚拟机测试,虚拟内存至少2G
实现 Kickstart 无人值守安装
关于 kickstart
-
kickstart无人值守技术
-
创建应答文件,预先定义好各种安装设置
-
免去交互设置过程,从而实现全自动化安装
-
准备应答文件
应答文件的来源
- 编辑CentOS 7 系统中现有的应答文件
- /root/anaconda-ks.cfg
- 使用system-config-kickstart工具创建新的应答文件
- 需要安装system-config-kickstart软件包
修改各项来对应答文件进行配置
执行各种后续配置任务的脚本语句
应答文件的内容
……
url --url="ftp://192.168.4.254/centos7"
# 网络安装源
……
%post --interpreter=/bin/bash
rm -f /etc/yum.repos.d/*
echo -e '[base]\nname=CentOS7.3\nbaseurl=ftp://192.168.4.254/centos7\nenabled=1\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7'>/etc/yum.repos.d/centos7.repo
%end
%packages
# 定制的软件包组
@^minimal
%end
PXE+kickstart 自动安装
PXE 与 kickstart 结合使用
- 将应答文件部署在客户机可访问的位置
- 修改启动菜单文件,调用应答文件
[root@localhost ~]# cp /root/ks.cfg /var/ftp/ks.cfg
[root@localhost ~]# vi /var/lib/tftpboot/pxelinux.cfg/default
default auto
prompt 0
# 取消用户等待
label autokernel vmlinuzappend initrd=initrd.img method=ftp://192.168.4.254/centos7 ks=ftp://192.168.4.254/ks.cfg
# 应答文件的URL地址
验证自动安装
- 将客户机以PXE方式引导
- 系统会自动完成安装,并配置好软件仓库
- 整个安装过程无需手动干预
手动 PXE 部署
服务端命令
[root@xuanzi ~]# mkdir /media/cdrom/
# 创建一个目录来挂载 CDROM
[root@xuanzi ~]# mount /dev/cdrom /media/cdrom/
# 挂载 CDROM 到刚刚创建的目录
[root@xuanzi ~]# mkdir /var/ftp/centos7/
# 创建一个目录来存放 CentOS 7 的文件
[root@xuanzi ~]# cp -rf /media/cdrom/* /var/ftp/centos7/
# 将 CDROM 中的文件复制到 CentOS 7 目录中
[root@xuanzi ~]# cd /etc/yum.repos.d/
# 切换到存储库配置文件的目录
[root@xuanzi yum.repos.d]# mkdir bak
# 创建备份目录
[root@xuanzi yum.repos.d]# mv C* bak/
# 移动以 'C' 开头的文件到备份目录
[root@xuanzi yum.repos.d]# cp bak/CentOS-Media.repo ./
# 复制备份目录中的 CentOS-Media.repo 到当前目录
[root@xuanzi yum.repos.d]# vim CentOS-Media.repo
# 使用 vim 编辑 CentOS-Media.repo 文件
# enabled=1
# 启用该仓库,改这一个就行了
[root@xuanzi ~]# yum -y install vsftpd dhcp syslinux tftp-server
# 使用 yum 安装 vsftpd、dhcp、syslinux 和 tftp-server 软件包
[root@xuanzi yum.repos.d]# vim /etc/xinetd.d/tftp
# 使用 vim 编辑 TFTP 服务配置文件,修改 disable = no
[root@xuanzi yum.repos.d]# systemctl start tftp
# 启动 TFTP 服务
[root@xuanzi yum.repos.d]# cd /media/cdrom/images/pxeboot/
# 切换到 CDROM 中 PXE 引导文件的目录
[root@xuanzi pxeboot]# cp initrd.img vmlinuz /var/lib/tftpboot/
# 将 initrd.img 和 vmlinuz 文件复制到 TFTP 服务器的目录中
[root@xuanzi pxeboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
# 将 pxelinux.0 文件复制到 TFTP 服务器的目录中
[root@xuanzi pxeboot]# ll /var/lib/tftpboot/
# 显示 TFTP 服务器目录中的文件列表
# -rw-r--r--. 1 root root 52584760 4月 12 22:13 initrd.img
# -rw-r--r--. 1 root root 26759 4月 12 22:15 pxelinux.0
# -rwxr-xr-x. 1 root root 6639904 4月 12 22:13 vmlinuz
[root@xuanzi pxeboot]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.254.0 netmask 255.255.255.0 {range 192.168.254.13 192.168.254.254;option domain-name-servers 192.168.254.2;option domain-name "test.com";option routers 192.168.60.2;option broadcast-address 192.168.60.255;default-lease-time 21600;max-lease-time 43200;next-server 192.168.254.12;# 指定了PXE启动时TFTP服务器的IP地址filename "pxelinux.0";# 指定了PXE启动时使用的引导文件名
}
[root@xuanzi pxeboot]# systemctl enable dhcpd
# 启用 DHCP 服务,使其在系统启动时自动启动
[root@xuanzi pxeboot]# systemctl start dhcpd
# 启动 DHCP 服务
[root@xuanzi pxeboot]# netstat -anpu | grep dhcp
# 使用 netstat 命令查看当前系统中的 DHCP 相关端口
[root@xuanzi pxeboot]# mkdir /var/lib/tftpboot/pxelinux.cfg
# 创建 PXE 引导配置文件存放目录
[root@xuanzi pxeboot]# vim /var/lib/tftpboot/pxelinux.cfg/default
# 使用 vim 编辑 PXE 引导的默认配置文件
default auto
prompt 1
label autokernel vmlinuzappend initrd=initrd.img method=ftp://192.168.254.12/centos7
label linux textkernel vmlinuzappend text initrd=initrd.img method=ftp://192.168.254.12/centos7
label linux rescuekernel vmlinuzappend rescue initrd=initrd.img method=ftp://192.168.254.12/centos7
[root@xuanzi pxeboot]# systemctl restart vsftpd
[root@xuanzi pxeboot]# systemctl restart tftp
[root@xuanzi pxeboot]# systemctl restart dhcpd
[root@xuanzi pxeboot]# systemctl status vsftpd
[root@xuanzi pxeboot]# systemctl status tftp
[root@xuanzi pxeboot]# systemctl status dhcpd
# 在最终安装之前,请一定确保 以上三个服务均已启动
然后,新建一个 CentOS7 系统,内存至少 2G,并且关闭 VM 自带 DHCP 服务
自动 PXE 部署
服务端命令
[root@xuanzi pxelinux.cfg]# yum -y install system-config-kickstart
# 安装 system-config-kickstart 自动生成脚本文件
[root@xuanzi ~]# system-config-kickstart
# 打开 system-config-kickstart
然后安装如下图进行配置
最后在头部添加与底部添加配置
unsupported_hardware
rm -rf /etc/yum.repos.d/* echo -e '[base]\nname=CentOS7\nbaseurl=ftp://192.168.254.12/centos7\nenabled=1\ngpgcheck=1\ngpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7'
[root@xuanzi ~]# cp ks.cfg /var/ftp/centos7/
# 将 应答文件 复制到 centos7 下
[root@xuanzi ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
# 修改 default 启动文件
default auto
prompt 0
label autokernel vmlinuzappend initrd=initrd.img method=ftp://192.168.254.12/centos7 ks=ftp://192.168.254.12/centos7/ks.cfg
label linux textkernel vmlinuzappend text initrd=initrd.img method=ftp://192.168.254.12/centos7
label linux rescuekernel vmlinuzappend rescue initrd=initrd.img method=ftp://192.168.254.12/centos7
[root@xuanzi pxeboot]# systemctl restart vsftpd
[root@xuanzi pxeboot]# systemctl restart tftp
[root@xuanzi pxeboot]# systemctl restart dhcpd
[root@xuanzi pxeboot]# systemctl status vsftpd
[root@xuanzi pxeboot]# systemctl status tftp
[root@xuanzi pxeboot]# systemctl status dhcpd
# 在最终安装之前,请一定确保 以上三个服务均已启动
然后,新建一个 CentOS7 系统,内存至少 2G,并且关闭 VM 自带 DHCP 服务