【Linux】PXE+Kickstart无人值守安装系统

news2024/11/26 18:31:19

文章目录

  • 前言
  • 一、简介
  • 二、配置DHCP
  • 三、TFTP
  • 四、SYSLinux服务程序
  • 五、vsftpd服务
  • 六、Kickstart应答文件
  • 七、自动安装系统
  • 八、总结


前言

本文来记录下PXE+Kickstart无人值守安装系统。
当需要安装OS的主机数量较多时,我们不可能通过U盘或光盘给这一台台主机去安装操作系统,这种太过消耗时间。
此时就可以部署PXE+Kickstart无人值守环境,来做到待安装主机一开机就自动去进行操作系统安装流程,明显地省时省力。


一、简介

一个完整的PXE+Kickstart无人值守环境,其涉及到的服务或技术有:PXE、TFTP、FTP(或HTTP)、DHCP和Kickstart。
PXE(Preboot eXecute Environment,预启动执行环境),让计算机通过网络来启动操作系统(计算机网卡需支持PXE技术,主板支持网络引导),主要用于在无人值守安装系统中引导客户端主机来安装Linux操作系统。
运行PXE协议需要设置DHCP服务端和TFTP服务端。DHCP Server会给PXE Client分配一个IP地址,由于是给PXE Client分配IP地址,所以需要在配置DHCP Server时增加相应的PXE配置。此外,PXE Client的ROM中,已存在TFTP Client,客户端直接可以通过TFTP协议到Server端下载相关文件。

PXE工作过程:
1)计算机启动,BIOS将PXE Client调入内存中执行;PXE Client启动,发送广播数据包寻找DHCP Server,找到后向其请求IP地址;
2)DHCP Server响应并返回分配给客户机的IP地址、TFTP Server地址和PXE文件(引导文件pxelinux.0)的存储位置(TFTP Server工作目录/var/lib/tftpboot/);
3)PXE Client通过TFTP客户端并根据地址信息向TFTP Server请求pxelinux.0文件,把该文件加载到内存中;
4)PXE Client取得pxelinux.0文件后执行该文件;
5)引导程序pxelinux.0通过TFTP Server查找配置文件(isolinux.cfg),并加载内核和文件系统;
6)配置文件包含了Kickstart应答文件路径,PXE Client通过该路径获取到ks.cfg文件,并在安装过程中自动应答相应选项;
7)系统安装完成,并根据配置进行重启。

这边放一张网上的图,本文中的这些Server服务,都是部署在同一台Server当中。
在这里插入图片描述

二、配置DHCP

DHCP服务是客户端与服务端通信的基础,所以需先在服务端安装DHCP服务,便于客户端来自动获取地址同时与服务端建立连通性:

[root@server ~]# yum install -y dhcp

配置DHCP服务,允许Bootp引导程序协议,目的是让局域网内暂时没有操作系统的主机也能获取到IP地址。
同时在配置文件中需要加载引导驱动文件pxelinux.0,是让客户端主机获取到IP地址后主动拉取引导驱动文件,自行进入下一步的安装过程。

# dhcp默认路径中的配置文件里是空的,需要去将模板拷贝一份过来
[root@server ~]# cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
[root@server ~]# 
[root@server ~]# cp -a /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf     

对DHCP配置文件进行部分修改,保留下面内容即可,其他内容可注释掉:

[root@server ~]# vi /etc/dhcp/dhcpd.conf
 
allow booting;
allow bootp;     # 允许响应使用者查询

subnet 192.168.112.0 netmask 255.255.255.0 {
  option subnet-mask 255.255.255.0;
  range 192.168.112.100 192.168.112.120;     # 地址池,即分发的地址范围
  default-lease-time 21600;     # 默认出租时间,秒
  max-lease-time 43200;         # 最大出租时间
  next-server 192.168.112.11;    # TFTP服务端IP地址
  filename "pxelinux.0";         # 引导文件位置,这边表示TFTP根目录(/var/lib/tftpboot/)下的pxelinux.0文件
}

[root@server ~]# systemctl start dhcpd
[root@server ~]# ss -nulp | grep dhcp     
UNCONN     0      0            *:67                       *:*                   users:(("dhcpd",pid=5431,fd=8))

三、TFTP

由于当前的客户端主机没有完整的OS,也就不能完成FTP协议的验证,所以需要使用TFTP协议来帮助客户端获取引导及驱动文件。
TFTP是一种基于UDP协议的简单文件传输协议,其不需要进行用户认证便可获取到所需的文件资源。
TFTP作为一种精简的文件传输服务程序,其运行和关闭都是由xinetd网络守护进程服务来管理的。
Xinetd服务程序会同时监听系统的多个端口,然后根据用户请求的端口号调取相应的服务程序来响应用户的请求。

安装相关服务程序:

[root@server ~]# yum install -y xinetd
[root@server ~]# yum install -y tftp-server

开启TFTP服务,只需要在xinetd服务程序的配置文件中把disable参数改成no即表示启用。
此外,TFTP服务默认使用的是UDP 69端口,所以需设置防火墙允许通过的相应策略。

[root@server ~]# vi /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          # 启用TFTP
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

[root@server ~]# systemctl restart xinetd
# 防火墙设置放行策略
[root@server ~]# firewall-cmd --permanent --add-port=69/udp
success
[root@server ~]# firewall-cmd --reload
success
[root@server ~]# ss -nulp | grep 69
UNCONN     0      0            *:69                       *:*                   users:(("xinetd",pid=4561,fd=5))
[root@server ~]# 

四、SYSLinux服务程序

SYSLinux是一个用于提供引导加载的服务程序。

[root@server ~]# yum install -y syslinux

引导文件pxelinux.0由软件包syslinux生成,文件目录为/usr/share/syslinux/

[root@server ~]# cd /var/lib/tftpboot/
# 将引导文件pxelinux.0复制到TFTP根目录下
[root@server tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
[root@server tftpboot]# ll
总用量 28
-rw-r--r--. 1 root root 26759 32 14:07 pxelinux.0
# 将安装镜像中自带的内核文件vmlinuz和初始文件initrd.img也复制到TFTP根目录下
[root@server tftpboot]# cp /media/images/pxeboot/{vmlinuz,initrd.img} .
[root@server tftpboot]# ll
总用量 60548
-rw-r--r--. 1 root root       84 32 14:08 boot.msg
-rw-r--r--. 1 root root 55073584 32 14:08 initrd.img
-rw-r--r--. 1 root root    26759 32 14:07 pxelinux.0
-rw-r--r--. 1 root root   153104 32 14:08 vesamenu.c32
-rwxr-xr-x. 1 root root  6734016 32 14:08 vmlinuz

# 新建pxelinux.cfg目录,将开机选项文件复制到该目录下,并重命名为default
[root@server tftpboot]# mkdir pxelinux.cfg
[root@server tftpboot]# cp /media/isolinux/isolinux.cfg pxelinux.cfg/default
# 编辑开机选项菜单
[root@server tftpboot]# vi pxelinux.cfg/default 
default linux-pxe            # 设置默认值,开机自动进入的label选项
label linux-pxe
  menu label ^PXE+KS Install CentOS 7
  kernel vmlinuz
  # 将默认的光盘镜像安装方式改为FTP文件传输方式,并指定FTP地址和Kickstart应答文件的获取路径
  append initrd=initrd.img inst.stage2=ftp://192.168.112.11 inst.ks=ftp://192.168.112.11/pub/ks.cfg quiet

五、vsftpd服务

使用文件传输协议FTP来传输完整的系统安装文件给客户端主机。
此处亦可使用HTTP来进行文件传输,本文只介绍FTP方式。
vsftpd是基于FTP协议的服务软件,安装vsftpd:

[root@server ~]# yum install -y vsftpd

启动vsftpd,同时挂载系统镜像,将镜像中的所有文件复制到FTP工作目录中,便于客户端来该目录查找获取安装程序:

[root@server ~]# systemctl start vsftpd
[root@server ~]# mount /dev/sr0 /media/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@server ~]# cp -r /media/* /var/ftp/

确认防火墙关闭状态或是放行FTP策略:

[root@server ~]# firewall-cmd --permanent --add-service=ftp
success
[root@server ~]# firewall-cmd --reload
success

SELinux Disabled关闭或者是放行FTP传输:

[root@server ~]# setsebool -P ftpd_connect_all_unreserved=on

这边对vsftpd不做配置,直接启动服务使用即可,因为vsftpd是默认允许匿名用户访问的。

六、Kickstart应答文件

Kickstart应答文件,包含了系统安装过程中需要配置的选项和参数信息,系统可以自动调取这个应答文件的内容,从而实现无人值守安装系统。
Kickstart文件的自定义生成,可参考:【Linux】自定义生成Kickstart(system-config-kickstart)
这边我就直接复制服务端/root/anaconda-ks.cfg文件,来作为Kickstart应答文件的模板。
将该文件复制到vsftpd服务程序的工作目录中,路径需与前文中开机菜单配置中的ks文件路径一致,确保系统能找到这个文件。
使用chmod命令给所有人添加可读权限,以保证客户端主机可以顺利获取到应答文件及其内容。

[root@server ~]# cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
[root@server ~]# ll /var/ftp/pub/ks.cfg 
-rw-------. 1 root root 1259 32 14:31 /var/ftp/pub/ks.cfg
[root@server ~]# chmod +r /var/ftp/pub/ks.cfg 
[root@server ~]# ll /var/ftp/pub/ks.cfg       
-rw-r--r--. 1 root root 1259 32 14:31 /var/ftp/pub/ks.cfg

对ks文件进行修改:

[root@server ~]# vi /var/ftp/pub/ks.cfg 
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
#cdrom
url --url=ftp://192.168.112.11     # 设置安装源为远端FTP(即/var/ftp/)
# Use graphical install
#graphical
text
# 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 --onboot=yes --ipv6=auto --activate
network  --hostname=asdfv.com

# Root password
rootpw --iscrypted $6$Hwv1d9eYvmuxqFsP$K3XI5mRwVEQBIaAUR63/0.twU.Y18Lloj8LDgqQACUZmaTeBDZLE6H4MUvtKeHGSVe6lHrQJLhpbdxxISGWU1/
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel

reboot    # 安装完成后,自动重启

%packages
@^minimal
@core
kexec-tools
net-tools
lrzsz
httpd

%end

%post

useradd asdfv
echo 123456 | passwd --stdin asdfv

%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

七、自动安装系统

到了这边,基本的环境配置就结束了,现在就是去实际应用测试一下。
创建虚拟机,选择稍后安装操作系统,后续的就是设置虚拟机名称、保存路径、磁盘大小等,这边就不一一放图了。
在这里插入图片描述
还有一个需要注意的点是,虚机的网络连接模式上,一定要与提供服务程序的虚机保持一致,即要同在一个局域网内,能够识别到。若是实际的物理环境,则也要先确保连通性正常。

虚机加电启动,系统首先去寻找DHCP服务端:
在这里插入图片描述

DHCP找到之后,后续进程执行:
在这里插入图片描述
我这边遇到了个报错:No space left on device
这个虚机当时硬盘有分了默认的20G,内存只给了500M,将虚机断电关闭。在这里插入图片描述
重新分配内存,调整为1.5G,此时再次加电启动后,系统安装进程未再报错,一直执行安装过程,并最终完成安装后重启。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、总结

本文介绍了PXE+Kickstart来实现无人值守安装Linux操作系统这一场景,步骤较多,但一遍捋下来会发现,这套环境中服务程序的配置,基本就是简单的启用、设置路径之类的,并不需要去深度探究配置这方面,因此难度不大。多测试个几次,会熟悉的。


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

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

相关文章

SpringCloud项目报错和解决方法记录

1、项目在IDEA中正常启动,打包后报错 背景 项目本地是没有 application.yml 配置文件的,而是把配置文件放在nacos上,本地只有一个 bootstrap.yml 来绑定nacos上的配置文件。 项目在IDEA上是可以正常启动运行的,然后我就准备打包…

Hadoop之hdfs查看fsimage和edits

/opt/module/hadoop-3.1.3/data/dfs/name/current (1) Fsimage文件: HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息。 (2) Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有…

10个优质的基于Node.js的CMS 内容管理平台

冬尽今宵长❝hi, 大家好, 我是徐小夕,之前和大家分享了很多「低代码可视化」和「前端工程化」相关的话题, 今天继续和大家聊聊「CMS」系统.❞内容管理系统 (「CMS」) 使没有强大技术背景的人也能够轻松发布内容。我们可以使用 「CMS」 来管理我们的内容和交付。市面上有不同类型…

触摸屏如何远距离无线采集各从站的模拟量信号?

本方案是昆仑通态触摸屏与4台DTD433FC无线模拟量信号测试终端进行无线 MODBUS 通信的实现方法。本方案中昆仑通态触摸屏作为主站显示各从站的模拟量信号,传感器、DCS、PLC、智能仪表等4个设备作为Modbus从站输出模拟量信号。方案中采用无线模拟量信号测控终端DTD433…

厚积薄发百变求新 | 科士达100kW/125kW 超大功率模块UPS重磅发布

3月2日下午,“厚积薄发百变求新” 科士达100kW/125kW超大功率模块UPS新品发布会在云上顺利举办。会上,科士达正式推出100kW/125kW超大功率模块UPS,该产品功率密度较主流的50kW功率模块UPS提升了一倍,跨越了高密新高度。 本次发布会…

Python每日一练(20230303)

1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺…

详解单链表(内有精美图示哦)

全文目录引言链表链表的定义与结构链表的分类单链表的实现及对数据的操作单链表的创建与销毁创建销毁单链表的打印单链表的头插与头删头插头删单链表的尾插与尾删尾插尾删单链表的查找单链表在pos位置后插入/删除插入删除单链表在pos位置插入/删除插入删除总结引言 在上一篇文…

K8s:渐进式入门服务网格 Istio (一)

写在前面 分享一些 Istio 的学习笔记博文内容涉及: istio 下载安装一个 Demo 运行什么是 istio,服务网格等概念介绍istio 架构组成,应用场景等 理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后…

一文吃透 Go 内置 RPC 原理

hello 大家好呀,我是小楼,这是系列文《Go底层原理剖析》的第三篇,依旧分析 Http 模块。我们今天来看 Go内置的 RPC。说起 RPC 大家想到的一般是框架,Go 作为编程语言竟然还内置了 RPC,着实让我有些吃鲸。 从一个 Demo …

原型模式学习

本文讲解一下原型模式的概念并通过一个案例来进行实现。 4、原型模式 通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式原型模式就是Java中的克隆技术,以某个对象为原型,复制出新的对象,新的对象具有原…

VS2019加载解决方案时不能自动打开之前的文档(回忆消失)

✏️作者:枫霜剑客 📋系列专栏:C实战宝典 🌲上一篇: 错误error c3861 :“_T“:找不到标识符 逐梦编程,让中华屹立世界之巅。 简单的事情重复做,重复的事情用心做,用心的事情坚持做; 文章目录前言一、问题描…

借助ChatGPT爆火,股价暴涨又暴跌后,C3.ai仍面临巨大风险

来源:猛兽财经 作者:猛兽财经 C3.ai的股价 作为一家人工智能技术提供商,C3.ai(AI)的股价曾在2021年初随着炒作情绪的增加,达到了历史最高点,但自那以后其股价就下跌了90%,而且炒作情…

数据正确性验证(造数据篇)

变更记录 记录每次修订的内容,方便追溯。 多行文本单选作者日期完成文档V1.02023-02-27V1.1V1.2 1. 数据质量检测标准 1.1 背景:整理数据质量测试的维度 摘取自国标文档 以上是除了常规的软件质量模型外(软件测试质量六大特性&#xff0c…

Mysql Nested-Loop Join算法和MRR

MySQL8之前仅支持一种join 算法—— nested loop,在 MySQL8 中推出了一种新的算法 hash join,比 nested loop 更加高效。(后面有时间介绍这种join算法) 1、mysql驱动表与被驱动表及join优化 先了解在join连接时哪个表是驱动表&a…

ChatGPT今日正式开放API服务中小企业

开放隐私计算 开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号…

不要以没时间来说测试用例写不好

工作当中,总会有人为自己的测试用例写得不够好去找各种理由,时间不够是我印象当中涉及到最多的,也是最反感。想写好测试用例,前提是测试分析和需求拆解做的足够好,通过xmind或者UML图把需求和开发设计提供的产品信息提炼出来。 我个人的提炼标准一般是&…

CSS——学成在线案例

🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 HTML和CSS3 目录 1.案例准备工作 2.CSS属性书写顺序(重点) 3.页面布局整体思路 4.头部的制作​编辑 5.banner制作…

专治Java底子差,不要再认为泛型就是一对尖括号了

文章目录一、泛型1.1 泛型概述1.2 集合泛型的使用1.2.1 未使用泛型1.2.2 使用泛型1.3 泛型类1.3.1 泛型类的使用1.2.2 泛型类的继承1.4 泛型方法1.5 泛型通配符1.5.1 通配符的使用1)参数列表带有泛型2)泛型通配符1.5.2 泛型上下边界1.6 泛型的擦除1.6.1 …

只知道ChatGPT?这些AI工具同样值得收藏

B站|公众号:啥都会一点的研究生 人工智能革命带来了许多能够提高生产力和转变工作方式的工具,本期将重点介绍音频、视频、设计以及图像和数据清理中的顶级 AI 工具。 音视频类AI工具: VoicePen AI https://voicepen.ai:该工具可…

【内网服务通过跳板机和公网通信】花生壳内网穿透+Nginx内网转发+mqtt服务搭建

问题:服务不能暴露公网 客户的主机不能连外网,服务MQTT服务部署在内网。记做:p1 (computer 1)堡垒机(跳板机)可以连外网,内网IP 和 MQTT服务在同一个网段。记做:p2 (computer 2)对他人而言&…