自动化安装系统(二)

利用PXE实现自动化安装

PXE简介

PXE:Preboot Excution Environment,预启动执行环境,是由Intel公司研发,基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,可以引导和安装Windows,linux等多种操作系统

PXE启动工作原理

pxelinux.0 是redhat系Linux系统在PXE远程引导时使用的引导文件

pxelinux.cfg/default 是默认的启动菜单文件,通过编辑pxelinux.cfg文件,可以自定义启动选项、操作系统镜像、内核、内存大小等信息,为计算机的启动提供更多的选择和灵活性

vmlinuz 是可引导、压缩的内核,Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”

initrd.img 是在系统引导过程中使用的一个临时的根文件系统

PXE实现自动化安装流程

  1. Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的所在TFTP服务器地址信息一并传送给Client
  2. Client向TFTP服务器发送获取pxelinux.0请求消息,TFTP服务器接收到消息之后,向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0
  3. Client执行接收到的pxelinux.0文件,并利用此文件启动
  4. Client向TFTP 服务器发送请求针对本机的配置信息文件(在TFTP 服务器的pxelinux.cfg目录下),TFTP服务器将启动菜单配置文件发回Client,继而Client根据启动菜单配置文件执行后续操作
  5. Client根据启动菜单配置文件里的信息,向TFTP发送Linux内核和initrd文件请求信息,TFTP接收到消息之后将内核和initrd文件发送给Client
  6. Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统
  7. Client启动Linux内核,加载相关的内核参数
  8. Client通过内核参数下载kickstart文件,并根据kickstart文件里的安装信息,下载安装源文件进行自动化安装

实验

在centos8实现PXE自动化安装centos6/7/8

环境

NAT模式,关闭vmware的DHCP功能

DHCP服务器、TFTP服务器、HTTP服务器位于同一台电脑(Centos8)

关闭firewalld和selinux

软件包:dhcp-server、tftp-server、httpd、syslinux-nonlinux(提供pxelinux.0)

过程

在centos8 192.168.28.151 上安装软件包

[root@wenzi ~]# dnf -y install dhcp-server tftp-server httpd syslinux-nonlinux
[root@wenzi ~]# systemctl enable --now httpd tftp dhcpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
Created symlink /etc/systemd/system/sockets.target.wants/tftp.socket → /usr/lib/systemd/system/tftp.socket.
Created symlink /etc/systemd/system/multi-user.target.wants/dhcpd.service → /usr/lib/systemd/system/dhcpd.service.
Job for dhcpd.service failed because the control process exited with error code.
See "systemctl status dhcpd.service" and "journalctl -xe" for details.
#启动dhcpd报错是因为dhcpd只有配置过/etc/dhcp/dhcpd.conf配置文件才可以正常启动

 配置DHCP

[root@wenzi ~]# vim /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
#
option domain-name "example.com";
option domain-name-servers 180.76.76.76,223.6.6.6;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.28.0 netmask 255.255.255.0 {
  range 192.168.28.152 192.168.28.159;
  option routers 192.168.28.2;
  #指定TFTP服务器地址
  next-server 192.168.28.151;
  filename "pxelinux.0";
}
[root@wenzi ~]# systemctl start dhcpd
[root@wenzi ~]# ss -tunpl
Netid        State          Recv-Q         Send-Q                 Local Address:Port                 Peer Address:Port
udp          UNCONN         0              0                            0.0.0.0:67                        0.0.0.0:*            users:(("dhcpd",pid=1857,fd=10))
udp          UNCONN         0              0                                  *:69                              *:*            users:(("systemd",pid=1,fd=58))
tcp          LISTEN         0              128                          0.0.0.0:22                        0.0.0.0:*            users:(("sshd",pid=889,fd=4))
tcp          LISTEN         0              128                             [::]:22                           [::]:*            users:(("sshd",pid=889,fd=6))
tcp          LISTEN         0              128                                *:80                              *:*            users:(("httpd",pid=1630,fd=4),("httpd",pid=1629,fd=4),("httpd",pid=1628,fd=4),("httpd",pid=1623,fd=4))

准备镜像源

[root@wenzi ~]# mkdir /var/www/html/centos/{6,7,8}
[root@wenzi ~]# tree /var/www/html/
/var/www/html/
└── centos
    ├── 6
    ├── 7
    └── 8
#关闭虚拟机,再添加二个cd/dvd,分别使用centos6、centos7的ISO,开启虚拟机
[root@wenzi ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1  3.7G  0 rom
sr1          11:1    1  4.4G  0 rom
sr2          11:2    1  7.7G  0 rom
nvme0n1     259:0    0   20G  0 disk
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   19G  0 part
  ├─cl-root 253:0    0   17G  0 lvm  /
  └─cl-swap 253:1    0    2G  0 lvm  [SWAP]
#将iso分别对应挂载至httpd
[root@wenzi ~]# mount /dev/sr0 /var/www/html/centos/6
mount: /var/www/html/centos/6: WARNING: device write-protected, mounted read-only.
[root@wenzi ~]# mount /dev/sr1 /var/www/html/centos/7
mount: /var/www/html/centos/7: WARNING: device write-protected, mounted read-only.
[root@wenzi ~]# mount /dev/sr2 /var/www/html/centos/8
mount: /var/www/html/centos/8: WARNING: device write-protected, mounted read-only.


访问 192.168.28.151/centos,查看各镜像资源

准备应答文件

[root@wenzi ~]# mkdir /var/www/html/ks/{6,7,8} -p
[root@wenzi ~]# tree /var/www/html/ks/
/var/www/html/ks/
├── 6
├── 7
└── 8

centos8 kickstart应答文件

见http://t.csdn.cn/drvrQ

[root@wenzi ~]# vim /var/www/html/ks/8/centos8_ks.cfg
#version=RHEL8
#只使用系统中的第一块磁盘
ignoredisk --only-use=nvme0n1
#清除所有磁盘的分区表
zerombr
#文本方式安装
text
#graphical
#成功安装后重启
reboot
# 清除系统上所有分区
clearpart --all --initlabel
#关闭selinux
selinux --disabled
#关闭防火墙
firewall --disabled
#通过http远程服务器的目录树安装
url --url=http://192.168.28.151/centos/8/
#键盘
keyboard --vckeymap=us --xlayouts='us'
#系统语言
lang en_US.UTF-8
#网络配置
network --bootproto=dhcp --device=ens160 --ipv6=auto --activate
#network  --bootproto=static --device=ens160 --gateway=192.168.28.2 --ip=192.168.28.152 --nameserver=223.5.5.5,180.76.76.76 --netmask=255.255.255.0 --ipv6=auto --activate
#主机名
network  --hostname=wenzi
#root加密后的密码
rootpw --iscrypted $6$CEK/siEJwPyzpudd$cJ/rz9oiqDmc8LmI1uZmI8BRFxje4OnuGS0qLBRZ4cAFWqKg482sPuN1BstCMY62NN58ivBzZ.bGD.0QFaYnf/
# Run the Setup Agent on first boot
firstboot --enable
#不启动图形化
skipx
#开机时启动或关闭的服务
services --disabled="chronyd"
#系统时区
timezone Asia/Shanghai --isUtc --nontp
#分区信息
part /boot --fstype="ext4" --ondisk=nvme0n1 --size=1024
part /swap --fstype="swap" --ondisk=nvme0n1 --size=2048
part / --fstype="xfs" --ondisk=nvme0n1 --grow --size=1  #根分区/使用磁盘剩余的所有空间
 
#需要的安装包
%packages
@^minimal-environment
kexec-tools
vim
%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

centos7 kickstart应答文件

[root@wenzi ~]# vim /var/www/html/ks/7/centos7_ks.cfg
install
keyboard --vckeymap=us --xlayouts='us'
rootpw --iscrypted $6$CEK/siEJwPyzpudd$cJ/rz9oiqDmc8LmI1uZmI8BRFxje4OnuGS0qLBRZ4cAFWqKg482sPuN1BstCMY62NN58ivBzZ.bGD.0QFaYnf/
url --url="http://192.168.28.151/centos/7/"
lang en_US
auth  --useshadow  --passalgo=sha512
text
firstboot --enable
selinux --disabled
skipx
services --disabled="chronyd"
ignoredisk --only-use=nvme0n1
firewall --disabled
network  --bootproto=dhcp --device=ens33
reboot
timezone Asia/Shanghai --isUtc --nontp
bootloader --append="crashkernel=auto" --location=mbr --boot-drive=nvme0n1
zerombr
clearpart --all --initlabel
part /boot --fstype="ext4" --ondisk=nvme0n1 --size=1024
part /swap --fstype="swap" --ondisk=nvme0n1 --size=2048
part / --fstype="xfs" --ondisk=nvme0n1 --grow --size=1

%post

%end

%packages
@^minimal
vim
%end

centos6 kickstart应答文件

[root@wenzi ~]# vim /var/www/html/ks/6/centos6_ks.cfg
install
text
reboot
url --url=http://192.168.28.151/centos/6/
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp  --noipv6
rootpw  --iscrypted $6$CEK/siEJwPyzpudd$cJ/rz9oiqDmc8LmI1uZmI8BRFxje4OnuGS0qLBRZ4cAFWqKg482sPuN1BstCMY62NN58ivBzZ.bGD.0QFaYnf/
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=nvme0n1 --append="crashkernel=auto rhgb quiet"
zerombr
clearpart --all --initlabel
part /boot --fstype="ext4" --ondisk=nvme0n1 --size=1024
part /swap --fstype="swap" --ondisk=nvme0n1 --size=2048
part / --fstype="ext4" --ondisk=nvme0n1 --grow --size=1

%packages
@core
@server-policy
@workstation-policy
vim
%end

%post

%end

访问 192.168.28.151/ks,是否能查看各个kickstart文件内容

准备PXE启动相关文件

创建centos6、centos7、centos8各自内核相关文件

[root@wenzi ~]# mkdir /var/lib/tftpboot/centos{6,7,8}
[root@wenzi ~]# tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── centos6
├── centos7
└── centos8
[root@wenzi ~]# cp /var/www/html/centos/6/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6/
[root@wenzi ~]# cp /var/www/html/centos/7/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7/
[root@wenzi ~]# cp /var/www/html/centos/8/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos8/

[root@wenzi ~]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
#centos8需要额外三个文件,centos6/7不需要
[root@wenzi ~]# cp /var/www/html/centos/8/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/

[root@wenzi ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@wenzi ~]# cp /var/www/html/centos/8/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

[root@wenzi ~]# tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── centos6
│   ├── initrd.img
│   └── vmlinuz
├── centos7
│   ├── initrd.img
│   └── vmlinuz
├── centos8
│   ├── initrd.img
│   └── vmlinuz
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
    └── default

4 directories, 12 files

准备启动菜单文件

[root@wenzi ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
#菜单样式
default menu.c32
#等待选择时间
timeout 600
#菜单名字
menu title WenZi Install System Menu

label linux8
  #符号^ 可指定快捷键,在选择见面按 8 即可选中该项
  menu label Auto Install CentOS Linux ^8
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img ks=http://192.168.28.151/ks/8/centos8_ks.cfg


label linux7
  menu label Auto Install CentOS Linux ^7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img ks=http://192.168.28.151/ks/7/centos7_ks.cfg


label linux6
  menu label Auto Install CentOS Linux ^6
  kernel centos6/vmlinuz
  append initrd=centos6/initrd.img ks=http://192.168.28.151/ks/6/centos6_ks.cfg

#手动安装
label manual
  menu label ^Manual Install CentOS Linux 8
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img inst.repo=http://192.168.28.151/centos/8/

label rescue
  menu label ^Rescue a CentOS Linux system 8
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img inst.repo=http://192.168.28.151/centos/8/ rescue quiet

label local
  menu default
  menu label Boot from ^local drive
  localboot 0xffff

测试

新建虚拟机,不用指定ISO文件,直接打开

选中按回车即可。全部测试一遍

踩坑

提示nvme0n1硬盘找不到,即kickstart文件中指定nvme0n1无效

解决:

查看测试用的新建虚拟机中硬盘类型(IDE、SCSI、SATA、NVMe)是否和kickstart中指定的硬盘类型一致,修改成一致就好

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小白到运维工程师自学之路 第七十三集 (kubernetes应用部署)

一、安装部署 1、以Deployment YAML方式创建Nginx服务 这个yaml文件在网上可以下载 cat nginx-deployment.yaml apiVersion: apps/v1 #apiVersion是当前配置格式的版本 kind: Deployment #kind是要创建的资源类型,这里是Deploymnet metadata: #metadata是该资源…

Django笔记之数据库函数之日期函数

日期函数主要介绍两个大类,Extract() 和 Trunc() Extract() 函数作用是提取日期,比如我们可以提取一个日期字段的年份,月份,日等数据 Trunc() 的作用则是截取,比如 2022-06-18 12:12:12,我们可以根据需求…

【LeetCode】617.合并二叉树

题目 给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠…

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集 提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集前言下载…

【Linux】【驱动】应用层和驱动层传输数据

【Linux】【驱动】应用层和驱动层传输数据 绪论1.如果我在应用层使用系统0 对设备节点进行打开,关闭,读写等操作会发生什么呢? 2 我们的应用层和内核层是不能直接进行数据传输的3 驱动部分的代码4 应用代码5 编译以及运行代码 绪论 Linux一切皆文件! 文…

解锁园区交通新模式:园区低速自动驾驶

在当今科技飞速发展的时代,自动驾驶技术成为了备受关注的领域之一。尤其是在园区内部交通管理方面,自动驾驶技术的应用正在日益受到重视。 园区低速自动驾驶的实现需要多个技术领域的协同合作,包括自动驾驶技术、计算机视觉技术、通信技术、物…

聊聊火车的发展

目录 1.火车的概念 2.火车的发展历史 3.火车对战争的影响 4.火车对人们出行造成的影响 1.火车的概念 火车是一种由机械动力驱动的陆上交通工具,通常用来运输人员和货物。它由一列或多列的连接在一起的车厢组成,有轨道作为其行驶的基础,并通…

LVS 负载均衡集群

集群 集群(Cluster)是一组相互连接的计算机或服务器,它们通过网络一起工作以完成共同的任务或提供服务。集群的目标是通过将多台计算机协同工作,提高计算能力、可用性、性能和可伸缩性,适用于大量高并发的场景。 集群…

前端大屏常用的适配方案

假设我们正在开发一个可视化拖拽的搭建平台,可以拖拽生成工作台或可视化大屏,或者直接就是开发一个大屏,首先必须要考虑的一个问题就是页面如何适应屏幕,因为我们在搭建或开发时一般都会基于一个固定的宽高,但是实际的…

keil编译链接文件警告Pattern *.o(RAMCODE) only matches removed unused sections

问题: 从提示看是链接文件中,RAM中原先分配给代码存储的空间没有用上 解决办法:删除掉上图中红框里面代码;

部署mysql到win10电脑上

中间出现了很多问题, 记录一下 我这边是去官网下载的 ,链接:https://dev.mysql.com/downloads/mysql/ 我这边选了不是最新版本的MySQL,因为第一次安装8.1.0版本的,死活运行不起来,直接卸载安重装了&#x…

常用的分布式计算引擎

记录一下,作为备忘。 常用的分布式计算引擎 多表关联的问题,由于NoSQL数据库主要用于海量存储和单表查询,一般都不支持join,需借助更上层的计算框架来实现多表关联,比如: 计算框架支持数据源执行效率Hive本地文件、…

机器学习深度学习——自注意力和位置编码(数学推导+代码实现)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——注意力分数(详细数学推导代码实现) 📚订阅专栏:机器学习…

opencv实现以图搜图

这里写目录标题 1. 步骤1.1 导入OpenCV库:1.2 加载图像1.3 提取特征1.4 匹配特征1.5 显示结果 2. 完整代码3. 测试图片及效果 1. 步骤 1.1 导入OpenCV库: 在您的C代码中,首先需要导入OpenCV库。您可以使用以下语句导入核心模块:…

Codeforces算法心得——A. Array Coloring

大家好,我是晴天学长,确实全世界最大的算法竞赛平台有很多独特且创新的地方,后面我会持续的更新的!加油!💪💪💪 1 )A. Array Coloring 2) .算法思路 数组中的奇数个数一…

设计HTML5列表和超链接

在网页中,大部分信息都是列表结构,如菜单栏、图文列表、分类导航、新闻列表、栏目列表等。HTML5定义了一套列表标签,通过列表结构实现对网页信息的合理排版。另外,网页中还包含大量超链接,通过它实现网页、位置的跳转&…

红帽8.2版本CSA题库:第十题配置用户帐户

红帽8.2版本CSA题库:第十题配置用户帐户 useradd -u 3533 manalo #传创建用户指定uid为3533 echo flectrag | passwd --stdin manalo #设置密码 tail -1 /etc/passwd #查看

RTT(RT-Thread)IIC设备

目录 IIC设备 IIC介绍 电气连接 IIC总线时序 IIC协议 读协议 写协议 访问I2C总线设备 查找 I2C 总线设备 I2C数据读写(数据传输) 配置IIC步骤 IIC设备 IIC介绍 I2C(Inter Integrated Circuit)总线是 PHILIPS 公司开发…

Springboot 实践(5)springboot添加资源访问目录及目录测试

前文讲解了swagger测试服务控制器,实现了数据库数据访问,这些功能都是运行在后台服务器上,实际用户并不能直接调用接口获取数据,即使用户能够利用接口获取到数据,数据也是结构化数据,不能争取转化成用户使用…

C语言暑假刷题冲刺篇——day2

目录 一、选择题 二、编程题 🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C语言每日一练 ✨其他专栏:代码小游戏C语言初阶🤝希望作者的文章能对你…