PXE+Kickstart 高效批量网络装机

2022-09-13 15:39:30 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。


1. PXE 概述

1.1 PXE 定义

  PXE(预启动执行环境,在操作系统之前运行)是由 Intel 公司开发的网络引导技术,工作在 Client/Server 模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。

1.2 PXE 批量部署的优点

  • 规模化:同时装配多台服务器
  • 自动化:安装系统、匹配各种服务
  • 远程实现:不需要光盘、U盘等安装介质

1.3 PXE 搭建的前提条件

客户端:   客户机的网卡要支持 PXE 协议(集成 BOOTROM 芯片),且主板支持网络引导。一般大多数服务器主机都支持,只需在 BIOS 设置中允许从 Network 或 LAN 启动即可。 服务端:   网络中有一台 DHCP 服务器以便为客户机自动分配地址、指定引导文件位置,服务器要通过 TFTP 服务(简单文件传输协议)来提供系统内核和引导镜像文件的下载。

1.4 PXE 架构示意图

2. 搭建 PXE 远程安装服务器

  PXE 远程安装服务器集成了 CentOS7 安装源、TFTP 服务、DHCP 服务、FTP 服务,能够向客户机裸机发送 PXE 引导程序、Linux 内核、启动菜单等数据,以及提供安装文件。

2.1 安装并启用 TFTP 服务

  • TFTP 是一个基于 UDP 协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于小文件传输的应用场合。TFTP 服务默认由 xinetd 服务进行管理,使用 UDP 端口 69。
  • xinetd 是新一代的网络守护进程服务程序,又叫超级服务器,常用来管理多种轻量级 Internet 服务,xinetd 服务的配置文件位于 /etc/xinetd.conf ,配置时只要将 “disable = yes” 改成 “disable = no” 即可。
代码语言:javascript复制
yum -y install tftp-server xinetd
#修改 TFTP 服务的配置文件
vim /etc/xinetd.d/tftp
......
    protocol         = udp                  #TFTP默认使用UDP协议
    wait             = no                   #no表示客户机可以多台一起连接,yes表示客户机只能一台一台连接
    server_args      = -s /var/lib/tftpboot #指定TFTP根目录(引导文件的存储路径)
    disable          = no                   #no表示开启TFTP服务
......
#开启服务并设置开机自启
systemctl start tftp && systemctl enable tftp
systemctl start xinetd && systemctl enable xinetd

2.2 安装并启用 DHCP 服务

  • DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用 UDP 协议工作。
代码语言:javascript复制
yum -y install dhcp
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
#修改 DHCP 服务的配置文件,添加如下内容
vim /etc/dhcp/dhcpd.conf
ddns-update-style none;      #禁用 DNS 动态更新
next-server 192.168.10.20;   #指定 TFTP 服务器的地址
filename "pxelinux.0";       #指定要下载的 PXE 引导程序的文件

subnet 192.168.10.0 netmask 255.255.255.0 { 
       #声明要分配的网段地址
  range 192.168.10.100 192.168.10.200;         #设置地址池
  option routers 192.168.10.20;                #设置默认网关地址,指向 TFTP 服务器的 IP 地址
}
#开启 DHCP 服务并设置开机自启
systemctl start dhcpd && systemctl enable dhcpd

2.3 准备 Linux 内核、初始化镜像文件

代码语言:javascript复制
VMware 虚拟机设置里 CD/DVD 一栏设备状态勾选已连接
mount /dev/sr0 /mnt
cd /mnt/images/pxeboot
cp vmlinuz /var/lib/tftpboot/       #复制 linux 系统的内核文件到 TFTP 根目录下
cp initrd.img /var/lib/tftpboot/    #复制初始化镜像文件(linux 引导加载模块)到 TFTP 根目录下

2.4 准备 PXE 引导程序

代码语言:javascript复制
yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

2.5 安装并启用 FTP 服务,准备 CentOS7 安装源

代码语言:javascript复制
yum -y install vsftpd
mkdir /var/ftp/centos7
cp -rf /mnt/* /var/ftp/centos7/		#过程较长,需等待一会,可加 & 后台执行,jobs 查看
systemctl start vsftpd && systemctl enable vsftpd

2.6 配置启动菜单文件

  • 启动菜单用来指导客户机的引导过程,包括如何调用内核,如何加载初始化镜像
  • 默认的启动菜单文件在 TFTP 根目录(/var/lib/tftpboot/)的 pxelinux.cfg 子目录下,文件名为 default
代码语言:javascript复制
mkdir /var/lib/tftpboot/pxelinux.cfg

vim /var/lib/tftpboot/pxelinux.cfg/default
default auto		#指定默认入口名称
prompt 0			#设置是否等待用户选择,"1" 表示等待用户控制,"0" 表示不等待,不想手动就设 "0" 吧

label auto			#图形安装(默认)引导入口,label 用来定义启动项
kernel vmlinuz		# kernel 和 append 用来定义引导参数
append initrd=initrd.img 
method=ftp://192.168.10.20/centos7

label linux text	#文本安装引导入口
kernel vmlinuz
append text initrd=initrd.img
method=ftp://192.168.10.20/centos7

label linux rescue	#救援模式引导入口
kernel vmlinuz
append rescue initrd=initrd.img
method=ftp://192.168.10.20/centos7

2.7 关闭防火墙和 selinux,重启服务

代码语言:javascript复制
systemctl stop firewalld && systemctl disable firewalld
setenforce 0	#临时关闭 selinux
systemctl restart vsftpd
systemctl restart tftp
systemctl restart dhcpd

2.8 验证 PXE 网络安装

使用 VMware 创建的空机(不要挂载光盘)进行测试,虚拟机内存至少需要 2GB,否则在启动安装时可能会报错。 开启虚拟机,在提示字符串 “boot:” 后直接按 Enter 键(或执行 “auto” 命令),将会自动通过网络下载安装文件,并进入默认的图形安装入口:

  • 执行 “linux text” 命令,则进入文本安装入口
  • 执行 “linux rescue” 命令,则进入救援模式

回车后开始自动装机。

3. 实现 Kickstart 无人值守安装

  通过 PXE 技术安装 Linux 系统使得安装介质不再受限于光盘、移动硬盘等设备,大大提高了系统安装的灵活性。但是安装期间仍需要手动选择语言、键盘类型、指定安装源等一系列交互操作,当需要批量安装时非常不方便。通过使用 Kickstart 工具配置安装应答文件,自动完成安装过程中的各种设置,实现真正的无人值守安装。

3.1 安装 Kickstart 工具

代码语言:javascript复制
yum -y install system-config-kickstart

3.2 打开 “Kickstart 配置程序” 窗口

代码语言:javascript复制
通过桌面菜单 "应用程序" --> "系统工具" --> "Kickstart" 打开
或
执行 "system-config-kickstart" 命令打开

如果是使用最小化安装的系统没有图形界面可以尝试手动安装图形界面,参考: Linux 安装图形界面

代码语言:javascript复制
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release && yum clean all && yum makecache
yum -y groupinstall "X Window System" "GNOME Desktop" kde-l10n-Chinese
startx	#进入图形化界面

3.3 配置 Kickstart 选项

(1) 基本配置

(2) 安装方法

(3) 引导装载程序选项

(4) 分区信息

  • /boot 500M
  • /home 4096M
  • /swap 4096M
  • / 分配剩余所有空间

分区总览

除 / ,/boot ,swap 这三个分区外按需配置。

(5) 网络配置

(6) 防火墙配置

(7) 安装后脚本(不是必需)

代码语言:javascript复制
勾选 "使用解释程序":/bin/bash
#脚本内容,注意改成自己的 IP
rm -rf /etc/yum.repos.d/*
echo '[local] name=local baseurl=ftp://192.168.10.20/centos7 enabled=1 gpgcheck=0' > /etc/yum.repos.d/local.repo

上面的步骤有英文有中文,是因为我在不同的机器上实验的,不过步骤都是一样的。

(8) 保存自动应答文件

选择 “kickstart 配置程序” 窗口的 “文件” – “保存” 命令,选择指定保存的位置,文件名为 ks.cfg,默认保存在 /root/ks.cfg,我们需要将其保存在 /var/ftp 目录。

代码语言:javascript复制
cp /root/ks.cfg /var/ftp/ks.cfg
代码语言:javascript复制
[root@c7-1 ~]#ll /var/ftp
总用量 4
drwxr-xr-x 8 root root  220 9月   1 19:19 centos7
-rw-r--r-- 1 root root 1164 9月   1 23:46 ks.cfg
drwxr-xr-x 2 root root    6 6月  10 00:15 pub

3.4 配置需要安装的软件包

可以根据需要将 /root/anaconda-ks.cfg 的软件包安装脚本复制到 ks.cfg 文件的末尾,只需要复制 %packages 到 %end 部分即可。

代码语言:javascript复制
%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

如要求最小化安装,可复制如下内容:

代码语言:javascript复制
%packages
@^minimal
%end

这个每个人可能不太一样,复制自己的。

3.5 编辑引导菜单文件 default,添加 ks 引导参数

代码语言:javascript复制
vim /var/lib/tftpboot/pxelinux.cfg/default

注意这步 ks 文件调用错了,安装会出问题。

3.6 验证无人值守安装

重启服务端服务:

代码语言:javascript复制
systemctl restart vsftpd && systemctl restart dhcpd && systemctl restart tftp

当客户机每次以 PXE 方式引导时,将自动下载 ks.cfg 应答配置文件,然后根据其中的设置安装 CentOS7 系统。

参考: Linux 批量装机

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148921.html原文链接:https://javaforall.cn

0 人点赞