使用 PXE+Kickstart 批量网络自动装机(Centos7.9)

前言:
正常安装系统的话使用u盘一个一个安装会非常慢,所以批量安装的技术就出来了。

本次实验适用与批量安装Centos没有问题,其他系统需要自己去实验,引导方式使用的是bios

一、 概念

  • PXE (Preboot eXecute Environment,预启动执行环境)是由 Intel 公司开发的技术,可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持 PXE 技术)主 要用于在无人机值守安装系统中引导客户端主机安装 Linux 操作系统。
  • Kickstart 是一种无 人值守的安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成一个 ks.cfg 文件,当安装过程中需要填写参数时则自动匹配 Kickstart 生成的文件。所以只要Kickstart 文件包含了安装过程中需要人工填写的所有参数,那么从理论上来讲完全不需要 运维人员的干预,就可以自动完成安装工作。

二、 实现方式

PXE服务端涉及到的软件有: dhcp,tftp-server,vsftpd,syslinux

  • dhcp 为客户端网卡提供地址,并返回pxe(pxelinux.0 引导程序文件),指定tftp服务器地址
  • tftp-server 为客户端提供 驱动程序(操作系统镜像文件),引导程序,内核程序,开机执行配置文件 下载。客户端使用网卡作为tftp的客户端进行下载
  • vsftpd 将光盘安装介质传输给客户机,并使用Kickstart应答文件进行配置客户机(不用配置账号,应该是使用匿名账号进行传输 )
  • syslinux 提供 pxelinux.0 引导程序 文件

具体实现如下:

  1. 网卡需要查找相关的dhcp服务器(获取地址时间)
  2. 找到后dhcp服务器提供ip地址,和引导程序(boot loader)的地址 还提供给客户机TFTPserver地址(dhcp本身不提供tftp服务)
  3. 网卡使用tftp客户端吧引导程序加载到内存中来
  4. bios执行引导程序
  5. 引导程序会去TFTP去查找配置文件
  6. 根据配置文件去引导安装系统
  7. 系统安装过程

在这里插入图片描述

三、 实验开始

这里我使用“VMware Workstation”作为实验环境。

客户机只需要和PXE服务端在一个物理网络就是,其他不用配置,下面主要是配置PXE服务端

1. 关闭虚拟机的DHCP功能,并记录下IP范围和网关地址,为后面配置静态地址上网使用。(如果是真实的生产环境,这步可以跳过)

这里我选择的网络模式是NAT

a) 关闭DHCP功能

编辑-- > 虚拟网络编辑器

在这里插入图片描述
b) 记录ip范围和网关地址

编辑-- > 虚拟网络编辑器 --> NAT设置

在这里插入图片描述
c) 打开虚拟机配置静态地址
tip:根据自己的情况配置

cd /etc/sysconfig/network-scripts/
vi ifcfg-ens33

在这里插入图片描述
重启一下网络

systemctl restart network

测试一下是否联通外网。
在这里插入图片描述
可以连通外网,接下来的操作就可以使用xshell来操作了。

2. 下载所需的软件

[root@localhost ~]# yum -y install tftp tftp-server dhcp syslinux vsftpd

3. 服务配置文件修改

3.1. tftp配置
[root@localhost ~]# cat /etc/xinetd.d/tftp 
# default: off
# description: The tftp server serves files using the trivial file transfer \
#	protocol.  The tftp protocol is often used to boot diskless \
#	workstations, download configuration files to network-aware printers, \
#	and to start the installation process for some operating systems.
service tftp
{
	socket_type		= dgram
	protocol		= udp
	wait			= yes
	user			= root
	server			= /usr/sbin/in.tftpd
	server_args		= -s /var/lib/tftpboot		tftp 默认 / 目录
	disable			= no		# 将yes修改为no 启用tftp
	per_source		= 11
	cps			= 100 2
	flags			= IPv4
}

启动tftp-server服务

[root@localhost ~]# systemctl enable tftp --now
Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.

关闭防火墙和selinux

[root@localhost ~]#systemctl disable firewalld --now
[root@localhost ~]#setenforce  0
[root@localhost ~]#sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3.2. dhcp服务配置
[root@localhost ~]# cat  /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page

ddns-update-style interim; 		# 支持DNS动态更新
ignore client-updates; 			# 忽略客户端更新DNS记录
subnet 192.168.92.0 netmask 255.255.255.0 { 
 option subnet-mask 255.255.255.0; 							# 客户端地址掩码					
 option domain-name-servers 192.168.92.2; 					# 客户端dns地址	
 option routers		192.168.92.2;							# 客户端网关地址 
 range dynamic-bootp 192.168.92.100 192.168.92.200;			# 客户端ip地址池 
 default-lease-time 21600; 	# 默认租约
 max-lease-time 43200; 		# 最大租约时间
 next-server 192.168.92.10;	# tftp地址 	
 filename "pxelinux.0"; 	# 引导程序文件
}

启动dhcp服务

在启动前也可以使用 进入到 /etc/dhcp 目录使用 dhcpd -f -t dhcpd.conf 验证配置文件的真确性

[root@localhost ~]# systemctl enable dhcpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
3.3. vsftpd 服务配置

只需启动即可,默认 / 目录在 /var/ftp/

[root@localhost ~]# systemctl enable vsftpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

4. 文件准备

4.1. 将pxe引导程序放到 tftp / 目录

pxe 引导文件由 syslinux 提供

[root@localhost ~]# rpm -ql syslinux | grep pxelinux.0
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
4.2. 将内核文件放到 tftp / 目录下

1) 内核程序在 光盘镜像中,需要使用的话需要将光盘镜像挂载到 对应目录。

[root@localhost ~]# ll /dev/sr0 
brw-rw----. 1 root cdrom 11, 0 May  8 20:38 /dev/sr0
[root@localhost ~]# mount  /dev/sr0  /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        900M     0  900M   0% /dev
tmpfs           910M     0  910M   0% /dev/shm
tmpfs           910M  9.6M  901M   2% /run
tmpfs           910M     0  910M   0% /sys/fs/cgroup
/dev/sda2        20G  1.6G   19G   8% /
/dev/sda1       197M  120M   77M  61% /boot
tmpfs           182M     0  182M   0% /run/user/0
/dev/sr0        4.4G  4.4G     0 100% /mnt

2) 将vmlinuz内核程序放到 tftp / 目录下

[root@localhost ~]# cp /mnt/isolinux/vmlinuz /var/lib/tftpboot/
4.3. 将initrd.img 文件(操作系统镜像)放到 tftp / 目录下
[root@localhost ~]# cp  /mnt/isolinux/initrd.img  /var/lib/tftpboot/
4.4. 将开机执行配置文件放到 tftp / 目录下

在 tftp / 目录下创建 pxelinux.cfg 目录,将开机执行配置文件放到 tftp / 下的pxelinux.cfg目录中并重名了为default

[root@localhost ~]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

现在查看 tftp / 目录下 有哪些文件

[root@localhost ~]# ll /var/lib/tftpboot/ -R
/var/lib/tftpboot/:
total 60480
-rw-r--r--. 1 root root 55129656 May  8 21:35 initrd.img
-rw-r--r--. 1 root root    26759 May  8 21:27 pxelinux.0
drwxr-xr-x. 2 root root       21 May  8 21:39 pxelinux.cfg
-rwxr-xr-x. 1 root root  6769256 May  8 21:33 vmlinuz

/var/lib/tftpboot/pxelinux.cfg:
total 4
-rw-r--r--. 1 root root 3032 May  8 21:39 default
4.5. 将安装光盘文件放到 vsftp 目录,提供给客户端下载

在 4,2 已经将光盘文件挂载到了 /mnt 目录,所以现在只需要将 /mnt 目录下的文件 拷贝到 vsftp 目录即可。

创建ftp存放光盘文件的目录

[root@localhost ~]# mkdir /var/ftp/Centos7.9

将光盘文件拷贝到ftp对应目录

[root@localhost ~]# cp -rp /mnt/* /var/ftp/Centos7.9/
4.6. 将Kickstart 应答文件放到ftp / 目录下,并重名了为ks.cfg

如果我们刚装完系统,在 /root 目录下就会生成一个 anaconda-ks.cfg 文件,这个就是
Kickstart 应答文件,只需要稍微修改就可以使用,下篇将介绍使用 system-config-kickstart 图形化工具,定义Kickstart 应答文件,当然这需要你的操作系统有 GUI。

[root@localhost ~]# cp /root/anaconda-ks.cfg  /var/ftp/ks.cfg
# 授权,如果权限不够,客户机就无法通过这个文件进行配置
[root@localhost ~]# chmod 777  /var/ftp/ks.cfg

5. 修改开机配置文件和Kickstart应答文件

现在所有的文件都准备就绪了,现在只需要修改 这两个文件,就大功告成了

5.1. 修改开机配置文件

默认的开机菜单中有两个选项,要么是安装系统,要么是对安装介质进行检验。
default 文件,把第 1 行的 default 参数 修改为 linux,这样系统在开机时就会默认执行那个名称为 linux的选项了。我们将默认的光盘镜像安装方式修改成 FTP 文件传输方式,并指定好光盘镜像的获取网址以及 Kickstart 应答文件的获取路径:

default linux
... ...
label linux
  menu label ^Install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img inst.stage3=ftp://192.168.92.10/Centos7.9 ks=ftp://192.168.92.10/ks.cfg  quiet
... ...
5.2. 修改Kickstart 应答文件
5.2.1. kickstart应答文件的组成部分

kickstart文件主要包括三个部分:命令段,程序包段,脚本段

命令段:指明各种安装前配置,如键盘类型等

命令段中的常见命令:

  • keyboard: 设定键盘类型
  • lang: 语言类型
  • zerombr:清除mbr
  • clearpart:清除分区
  • part: 创建分区
  • rootpw: 指明root的密码
  • timezone: 时区
  • text: 文本安装界面
  • network:指定网络设置
  • firewall:设置防火墙设置
  • selinux:设置selinux设置
  • reboot:安装完自动重启
  • user:安装完成后为系统创建新用户
  • url: 指明安装源

程序包段:指明要安装的程序包组或程序包,不安装的程序包等

%packages 		
@core:这个子部分表示基础系统的软件包,包括操作系统内核、文件系统和基本工具等。
@base:这个子部分表示基本软件包,包括一些命令行工具和基本服务。
@<package_group>:这个子部分表示需要安装的软件包组,可以是预定义的软件包组,也可以是自定义的软件包组。
<package_name>:这个子部分表示需要单独安装的软件包,可以是操作系统提供的软件包,也可以是第三方软件包。
%end		

下面是一个简单的Kickstart文件%packages部分的例子:

# 如下示例安装了基础系统软件包、命令行工具、Web服务器、MySQL数据库和OpenSSH服务器。同时也单独安装了openssh-server软件包。
%packages
@core
@base
@web-server
@mysql
openssh-server
%end

在 kickstart 应答文件的 %packages 部分中,可以使用 " - 软件包名称" 的格式来指定不安装某个软件包。例如,如果你想要安装所有的 “@core” 软件包,但不想安装 “emacs” 软件包,可以这样写:

# 这样在安装系统时,kickstart 将会安装 “@core” 软件包组中的所有软件包,但不会安装 “emacs” 软件包。请注意,软件包名称前面的 “-” 符号非常重要,它指示 kickstart 不要安装这个软件包。
%packages
@core
-emacs
%end

查看系统安装的软件包组: yum grouplist
安装软件包组: yum groupinstall
卸载软件包组: yum groupremove

脚本段:

#安装前脚本
%pre

%end
#安装后脚本
%post

%end

%post
useradd wang    # 安装完创建用户
%end
5.2.2. kickstart修改

对密码进行加密: openssl passwd -1 "adm@123"
可参考链接:https://www.cnblogs.com/panwenbin-logs/p/9340430.html
对参数的了解可参考链接:https://www.cnblogs.com/dinmin/articles/15348374.html

[root@localhost ~]# cat /var/ftp/ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
url --url=ftp://192.168.92.10/Centos7.9		# 获取镜像文件的方式
# Use graphical install
graphical			# 在 图像化界面下安装
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8		# 系统语言

# Network information
network  --bootproto=dhcp --device=ens33 --ipv6=auto --no-activate
network  --hostname=localhost.localdomain

# Root password
rootpw --iscrypted $1$WriG9jbZ$3HCtLDoIqcDg3juOGUrXK0		# 加密后的密码
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc		# 时区设置
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda  # 设置启动盘
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --size=200		# boot 分区设置大小,默认为M,不可设置单位
part / --fstype="xfs" --ondisk=sda --grow	# --grow 将剩余的容量全部划分

%packages			#安装的软件包
@^minimal	
@core
chrony
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

firewall --disable		# 不启动防护墙,默认是启动
selinux  --disable		# 不启动selinux,默认是启动
reboot				# 安装完系统后重启

6. 客户机测试

需要注意事项:
a. 客户机下载软件包是存放在内存中,所以至少需要2G
b. 必须和PXE服务器处理同一个物理网络
c. PXE服务器所有服务端口必须是开放的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7. 使用 system-config-kickstart 创建应答文件(扩展)

使用 system-config-kickstart 创建应答文件需要在 级别5 系统中才能运行,因为需要图形化

7.1. 安装system-config-kickstart

[root@localhost ~]# yum  -y install system-config-kickstart

7.2. 启动,配置
可以在应用程序中找到,也可以调用命令

[root@localhost ~]# system-config-kickstart

在这里插入图片描述

配置完可以点击预览,最后保存在这里插入图片描述
在这里插入图片描述

最后将自定义的ks.cfg 文件cp到指定的目录即可。

参考链接:https://www.cnblogs.com/panwenbin-logs/p/9340430.html
https://www.cnblogs.com/dinmin/articles/15348374.html
https://blog.csdn.net/G_D0120/article/details/135631769

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值