使用 PXE+Kickstart 批量网络自动装机

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

一、 概念

  • 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		= dgramprotocol		= udpwait			= yesuser			= rootserver			= /usr/sbin/in.tftpdserver_args		= -s /var/lib/tftpboot		tftp 默认 / 目录disable			= no		# 将yes修改为no 启用tftpper_source		= 11cps			= 100 2flags			= 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 pageddns-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服务

[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 linuxmenu label ^Install CentOS 7kernel vmlinuzappend 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
%endfirewall --disable		# 不启动防护墙,默认是启动
selinux  --disable		# 不启动selinux,默认是启动
reboot				# 安装完系统后重启

6. 客户机测试

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

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

下篇将使用 system-config-kickstart 图形化的方式创建 应答文件,使用Cobbler来快速建立Linux网络安装环境

参考链接: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/323274.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何判断nat网络?如何内网穿透

大家都清楚&#xff0c;如果你想开车&#xff0c;就必须要给车上一个牌照&#xff0c;随着车辆越来越多&#xff0c;为了缓解拥堵&#xff0c;就需要摇号&#xff0c;随着摇号的人数越来越多&#xff0c;车牌对于想开车的人来说已经成为奢望。在如今的IPv4时代&#xff0c;我们…

生信分析进阶2 - 利用GC含量的Loess回归矫正reads数量

在NGS数据比对后&#xff0c;需要矫正GC偏好引起的reads数量误差可用loess回归算法&#xff0c;使用R语言对封装的loess算法实现。 在NIPT中&#xff0c;GC矫正对检测结果准确性非常重要&#xff0c;具体研究参考以下文章。 Noninvasive Prenatal Diagnosis of Fetal Trisomy…

如何把多个文件(夹)平均复制到多个文件夹中

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 假定的情况是&#xff0c;共有20个兔兔的图片&#xff0c;想要平均的复制4个文件夹里&#xff0c;那么每个文件夹里面就有5个图片 &#xff08;如果是5个&a…

nginx自动部署-跨操作系统

项目里面有一个需求&#xff0c;就是需要用让nginx进程提供给系统管理一个start,stop和getPid方法&#xff0c;这样系统管理可以自动拉起来nginx&#xff0c;达到自动部署的目的。离线部署同样适用 这样一来&#xff0c;我就需要提供windows版本linux不同版本的nginx源码包&am…

Spring JdbcTemplate实现自定义动态sql拼接功能

需求描述&#xff1a; sql 需要能满足支持动态拼接&#xff0c;包含 查询字段、查询表、关联表、查询条件、关联表的查询条件、排序、分组、去重等 实现步骤&#xff1a; 1&#xff0c;创建表及导入测试数据 CREATE TABLE YES_DEV.T11 (ID BINARY_BIGINT NOT NULL,NAME VARCH…

【管理咨询宝藏93】大型制造集团数字化转型设计方案

【管理咨询宝藏93】大型制造集团数字化转型设计方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 235页大型制造型集团数字化转型方案设计&#xff01;细节非常详尽&#xff0c;图表丰富&#xff01; - 系统架构必须采用成熟、具有国…

美食推荐网站设计

**中文摘要&#xff1a;**在当今信息化、网络化的时代背景下&#xff0c;美食文化正逐渐融入人们的日常生活&#xff0c;而网络平台成为人们获取美食信息、分享美食体验的重要途径。为了满足广大美食爱好者对美食信息的探索和推荐需求&#xff0c;本文提出了一种创新的美食推荐…

YOLOv8网络结构介绍

将按照YOLOv8目标检测任务、实例分割任务、关键点检测任务以及旋转目标检测任务的顺序来介绍&#xff0c;主要内容也是在目标检测任务中介绍&#xff0c;其他任务也只是Head层不相同。 1.YOLOv8_det网络结构 首先&#xff0c;YOLOv8网络分成了三部分&#xff0c;分别是主干网络…

Spark云计算平台Databricks使用,创建workspace和Compute计算集群(Spark集群)

Databricks&#xff0c;是属于 Spark 的商业化公司&#xff0c;由美国加州大学伯克利 AMP 实验室的 Spark 大数据处理系统多位创始人联合创立。Databricks 致力于提供基于 Spark 的云服务&#xff0c;可用于数据集成&#xff0c;数据管道等任务。 1 创建workspace 点击创建wor…

word 毕业论文格式调整

添加页眉页脚 页眉 首先在页面上端页眉区域双击&#xff0c;即可出现“页眉和页脚”设置页面&#xff1a; 页眉左右两端对齐 如果想要页眉页脚左右两端对齐&#xff0c;可以选择添加三栏页眉&#xff0c;然后将中间那一栏删除&#xff0c;即可自动实现左右两端对齐&#x…

Spring Boot集成Ldap快速入门Demo

1.Ldap介绍 LDAP&#xff0c;Lightweight Directory Access Protocol&#xff0c;轻量级目录访问协议. LDAP是一种特殊的服务器&#xff0c;可以存储数据数据的存储是目录形式的&#xff0c;或者可以理解为树状结构&#xff08;一层套一层&#xff09;一般存储关于用户、用户…

吴恩达机器学习笔记:第 9 周-17大规模机器学习(Large Scale Machine Learning)17.3-17.4

目录 第 9 周 17、 大规模机器学习(Large Scale Machine Learning)17.3 小批量梯度下降17.4 随机梯度下降收敛 第 9 周 17、 大规模机器学习(Large Scale Machine Learning) 17.3 小批量梯度下降 小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法&…

基于Springboot的线上教学平台

基于SpringbootVue的线上教学平台设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 学习资料 交流论坛 试卷列表 公告信息 后台登录 后台首页 学员管理 资料类型…

Junit 测试中如何对异常进行断言

本文对在 Junit 测试中如何对异常进行断言的几种方法进行说明。 使用 Junit 5 如果你使用 Junit 5 的话&#xff0c;你可以直接使用 assertThrows 方法来对异常进行断言。 代码如下&#xff1a; Exception exception assertThrows(NumberFormatException.class, () -> {n…

Universal Thresholdizer:将多种密码学原语门限化

参考文献&#xff1a; [LS90] Lapidot D, Shamir A. Publicly verifiable non-interactive zero-knowledge proofs[C]//Advances in Cryptology-CRYPTO’90: Proceedings 10. Springer Berlin Heidelberg, 1991: 353-365.[Shoup00] Shoup V. Practical threshold signatures[C…

七、 数据出境安全评估申报需要多长时间?

《评估申报指南&#xff08;第二版&#xff09;》未区分数据处理者进行数据出境安全评估线上申报和线下申报整体所需时间。一般情况下&#xff0c;数据出境安全评估的申报时长周期如图所示&#xff1a; 根据《评估申报指南&#xff08;第二版&#xff09;》第二条的规定&#…

Spirng-IOC零碎知识点

Spirng IOC 依赖注入 根据名称注入 <?xml version"1.0" encoding"UTF-8"?> <beansxmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:util"http://w…

引入RabbitMQ

前置条件 docker 安装 mq docker run \-e RABBITMQ_DEFAULT_USERdudu \-e RABBITMQ_DEFAULT_PASS123456 \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network hmall \-d \rabbitmq:3.8-management可能会出现&#xff1a;docker: Er…

【深度学习】【Lora训练0】StabelDiffusion,Lora训练,kohya_ss训练

文章目录 环境数据自动标注kohya_ss BLIP2kohya_ss WD14 后续 资源&#xff1a; &#xff08;1&#xff09;训练ui kohya_ss&#xff1a; https://github.com/bmaltais/kohya_ss &#xff08;2&#xff09;kohya_ss 的docker 其他docker https://github.com/ashleykleynhans…

GraphGPT——图结构数据的新语言模型

在人工智能的浪潮中&#xff0c;图神经网络&#xff08;GNNs&#xff09;已经成为理解和分析图结构数据的强大工具。然而&#xff0c;GNNs在面对未标记数据时&#xff0c;其泛化能力往往受限。为了突破这一局限&#xff0c;研究者们提出了GraphGPT&#xff0c;这是一种为大语言…