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

news2024/11/27 9:34:38

前言:
正常安装系统的话使用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		= 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服务

[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服务器所有服务端口必须是开放的。

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

下篇将使用 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.coloradmin.cn/o/1668883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人机+远程控制:卫星通信技术详解

无人机与远程控制技术的结合&#xff0c;为现代科技应用带来了广阔的前景。其中&#xff0c;卫星通信技术作为无人机远程控制的关键技术之一&#xff0c;发挥着至关重要的作用。以下是无人机远程控制中卫星通信技术的详细解析&#xff1a; 一、卫星通信技术的概述 卫星通信技术…

《完美黑暗》重启版6月发布,分析指出开发“没有问题” 状况没那么

易采游戏网5月12日消息&#xff0c;在21世纪初的游戏界&#xff0c;一款名为《完美黑暗》的FPS游戏在N64平台上崭露头角&#xff0c;以其独特的剧情设定和丰富的武器系统赢得了众多玩家的喜爱。然而&#xff0c;这款作品在推出时也并非一帆风顺&#xff0c;受到了不少玩家的吐槽…

C++高精度算法-加法

引子 在C++的运算中,难免会出现很大很大的数,下面是各个关键字的表示范围 但是如果要表示的数超过了long long可以表示的最大值( 2 64 2^{64} 264-1) 怎么办呢? 如果强制表示,就会溢出,这里的溢出大家可以自行百度,反正就是会出一些-5665434之类的数 现在,就要切入正…

后端开发之用Mybatis简化JDBC的开发快速入门2024及数据库连接池技术和lombok工具详解

JDBC 简化JDBC的开发 JDBC仅仅是一套接口 是一套规范 Mybatis是持久层框架 用于简化JDBC的开发 使用Java语言操作关系型数据库的一套API 原始的JDBC程序 package com.bigdate.mybatis;import com.bigdate.mybatis.mapper.UserMapper; import com.bigdate.mybatis.pojo.Use…

易图讯三维电子沙盘-大数据处理服务

易图讯科技10名高级大数据工程师&#xff0c;高效、快速进行POI、DEM、高清卫星影像、地形地貌、路网、矢量地图等海量大数据处理服务。 免费专业提供POI、AOI、DEM、高清卫星影像、地形地貌、路网、矢量地图等海量大数据处理服务。 1年更新2次POI、高清卫星影像。

[通用人工智能] 论文分享:ElasticViT:基于冲突感知超网的快速视觉Transformer

引言: 近年来&#xff0c;视觉Transformer&#xff08;Vision Transformer&#xff0c;简称ViT&#xff09;在计算机视觉任务中的应用日益广泛&#xff0c;从图像分类到对象识别等&#xff0c;均显示出优越的性能。然而&#xff0c;ViT模型也面临一些挑战&#xff0c;特别是在模…

2024最新最全【网络安全】逆向工程教学

逆向工程 以设计方法学为指导&#xff0c;以现代设计理论、方法、技术为基础&#xff0c;运用各种专业人员的工程设计经验、知识和创新思维&#xff0c;对已有产品进行解剖、深化和再创造。 逆向工程不仅仅在计算机行业、各行各业都存在逆向工程。 计算机行业逆向工程 计算…

pytorch单机多卡训练_数据并行DataParallel

1.单机多卡概述 单卡多级的模型训练&#xff0c;即并行训练&#xff0c;可分为数据并行和模型并行两种. 数据并行是指&#xff0c;多张 GPUs 使用相同的模型副本&#xff0c;但采用不同 batch 的数据进行训练. 模型并行是指&#xff0c;多张 GPUs 使用同一 batch 的数据&…

C#泛型委托

在C#中&#xff0c;delegate 关键字用于声明委托&#xff08;delegates&#xff09;&#xff0c;委托是一种类型安全的函数指针&#xff0c;允许你传递方法作为参数或从方法返回方法。有时我们需要将一个函数作为另一个函数的参数&#xff0c;这时就要用到委托&#xff08;Dele…

SQL Server共享功能目录显示灰色无法自行选择

SQL Server共享功能目录显示灰色无法自行调整 一、 将之前安装SQL Server卸载干净 二、 清空注册表 1. 打开注册表&#xff0c;winR&#xff0c;输入regedit 2. 注册表-》编辑-》查找&#xff0c;输入C:\Program Files\Microsoft SQL Server\ 3. 注册表-》编辑-》查找&#x…

EfficientNet网络结构详细解读+SE注意力机制+pytorch框架复现

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ 网络详细结构1.1 &#x1f393; MBConv结构1.2 ✨SE注意力机制模块1.3 ⭐️Depthwise Separable Convolution深度可分离卷积1.3.1 普通卷积操作(Convolution)1.3.2 逐深度卷积&#xff08;Depthwise Convoluti…

一对一WebRTC视频通话系列(六)——部署到公网

本系列博客主要记录一对一WebRTC视频通话实现过程中的一些重点&#xff0c;代码全部进行了注释&#xff0c;便于理解WebRTC整体实现。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;梳理总结后写下文章&#xff0c;对音视频相关内容感…

什么是JVM中的程序计数器

在计算机的体系结构中&#xff1a; 程序计数器&#xff08;Program Counter&#xff09;&#xff0c;通常缩写为 PC&#xff0c;是计算机体系结构中的一个寄存器&#xff0c;用于存储下一条指令的地址。程序计数器是控制单元的一部分&#xff0c;它的作用是确保程序能够按正确…

【动态规划】简单多状态dp问题

1.按摩师 按摩师 思路&#xff1a; class Solution { public:int massage(vector<int>& nums) {//创建dp表//初始化//填表//返回值int n nums.size();if(n 0) return 0;vector<int> f(n);auto g f;f[0] nums[0];for(int i 1; i < n; i){f[i] g[i - 1…

智慧旅游平台开发微信小程序【附源码、文档说明】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

作为校招新人,他们如何在字节跳动做 AI 研究并中选 ICLR 的?

校招生和实习生在字节跳动&#xff0c;工作一年就中选 ICLR 2024 &#xff0c;这是怎样一种体验&#xff1f; 就在 5 月 7 日至 5 月 11 日&#xff0c;2024 年度国际表征学习大会 ICLR 2024 在奥地利维亚纳举办。该活动是深度学习领域最重要的学术活动之一&#xff0c;由深度学…

五角钱的程序员 | Kafka 是什么?

本文来源公众号“五角钱的程序员”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Kafka 是什么&#xff1f; 你是一个程序员&#xff0c;假设你维护了两个服务 A 和 B。B 服务每秒只能处理 100 个消息&#xff0c;但 A 服务却每秒…

苹果手机上音乐转换成mp3格式难不难?电脑支持转换吗?支持!

在苹果手机上&#xff0c;有时我们可能会遇到需要将音乐文件转换为MP3格式的情况。这可能是因为某些音乐播放器或设备只支持MP3格式&#xff0c;或者我们想要将音乐文件与其他设备或平台共享。本文将为您详细介绍在苹果手机上如何将音乐转换为MP3格式。 首先&#xff0c;我们需…

贪吃蛇——C语言实践

目录 1. 游戏效果演示 2. 课程目标 3.项目适合对象 4.技术要点 5. Win32 API介绍 5.1 Win32 API 5.2 控制台程序 5.3 控制台屏幕上的坐标COORD 5.4 GetStdHandle 5.5 GetConsoleCursorInfo 5.5.1 CONSOLE_CURSOR_INFO 5.6 SetConsoleCursorInfo 5.7 SetConsoleCurs…

Linux系统——VIM编辑工具

vi/vim vi是一个文本编辑器&#xff0c;用于撰写文档&#xff0c;或者开发程序。vim是vi的增强版 功能一致&#xff0c;可视化效果更好一些。去鼠标化 编辑更加方便 可定制化。 vim编辑器是一个模式化文本编辑器 模式以&#xff1a;编辑模式 进入文档后默认的模式 作用&am…