系统运维——PXE自动安装系统

news/2024/11/14 23:57:14/

摘要

PXE(Preboot Execution Environment,预启动执行环境)是一种允许计算机通过网络启动操作系统而无需本地存储设备的技术。本文详细介绍了 PXE 的定义、架构、原理、应用场景及常见命令体系。以 RedHat7 为例,展示如何配置和使用 PXE自动安装操作系统。

目录

1.常见的系统安装操作流程

PXE%E6%A6%82%E8%BF%B0-toc" style="margin-left:0px;">2.PXE概述

2.1定义

2.2应用背景

2.3架构

2.4应用场景

2.5应用优势

2.6基本部署过程

PXE%20%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B-toc" style="margin-left:40px;">2.7 PXE 启动过程

3.实战操作

3.1环境介绍

3.2服务端配置

 3.3客户端测试


1.常见的系统安装操作流程

  1. 通用流程:(1)bios启动,选择操作系统的启动(安装)模式。此时,内存是空白的。(2)根据相关的安装模式,寻找操作系统的引导程序。不同的模式,对应不同的引导程序当然也对应着不同的引导程序存在的位置。(3)引导程序加载文件系统初始化(initrd)程序和内核初始镜像(vmlinuz),完成操作系统安装前的初始化。(4)操作系统开始安装相关的系统和应用程序。

  2. 硬盘安装的流程:(1)bios启动。(2)MBR寻找grub。(3)grub程序读取menu.list等配置文件,找到内核启动镜像和相关初始化程序。(4)安装启动。 

  3. pxe网络安装的流程:(1)bios启动。(2)pxe client中的程序进入内存,显示命令菜单。此程序开始寻找网络引导程序(bootstrap文件,这个文件的名字随着发行版的不同而不同,在centos中,它是pxelinux.0)。(3)引导程序读取配置文件pxelinux.cfg,获得系统初始化的相关文件信息。(4)系统启动,开始进行安装。

PXE%E6%A6%82%E8%BF%B0">2.PXE概述

2.1定义

PXE (Preboot eXecution Environment) 是一种基于网络的启动技术,最初由 Intel 开发,旨在提供一种在没有本地存储设备的情况下通过网络启动操作系统的标准。PXE 集成在计算机的 BIOS 或 UEFI 中,支持客户端通过网络从服务器端下载系统镜像,并进行安装。在安装过程中,可以通过Kickstart 配置文件实现无人值守安装,并定制操作系统。

2.2应用背景

随着计算机网络的发展和虚拟化技术的普及,PXE 成为一种流行的启动方式。它广泛应用于无盘工作站、服务器部署和系统恢复等场景,简化了大规模系统管理和维护的复杂性。

2.3架构

PXE 的架构包括客户端和服务器两部分,依赖于多种网络协议和服务。以下是 PXE 架构的主要组成部分。

客户端

PXE 客户端是启用了 PXE 的计算机,通常集成在 BIOS 或 UEFI 中,要求网卡支持PXE协议,主板支持网络引导。当计算机启动时,如果启用了 PXE,网络接口卡(NIC)会尝试通过网络启动操作系统。

服务端

PXE 服务器提供启动文件和相关服务。运行DHCP服务,用来分配地址、定位引导程序,运行TFTP服务,提供引导程序下载。通常包括以下组件:

  • DHCP 服务器:为 PXE 客户端分配 IP 地址,并提供启动文件的位置信息。

  • TFTP 服务器:用于传输启动文件,如 PXE 引导程序和内核镜像。

  • HTTP/FTP 服务器:在某些情况下,用于传输更大的文件或提供额外服务。PXE 客户端通过 FTP 下载系统镜像内容。

  • NFS/SMB 服务器:用于提供网络文件系统,支持 PXE 客户端访问操作系统文件。

2.4应用场景

  • 无盘工作站

       在教育和科研机构中,无盘工作站通过 PXE 启动操作系统,从网络服务器获取所有需要的文件和应用程序。这样,系统管理和维护变得更加集中和简便。

  • 服务器部署

       在数据中心,PXE 被广泛用于自动化服务器部署。管理员可以通过 PXE 大规模部署操作系统和应用程序,显著提高部署效率和一致性。

  • 系统恢复

       PXE 也被用于系统恢复和应急启动。当计算机的本地存储设备故障时,可以通过 PXE 启动应急操作系统,进行数据恢复和系统修复。

  • 虚拟化环境

       在虚拟化环境中,PXE 被用于启动虚拟机,使其可以从网络加载操作系统和应用程序,简化虚拟机的管理和配置。

2.5应用优势

  • 规模化:同时装配多台服务器。
  • 自动化:安装系统、配置各种服务。
  • 远程实现:不需要光盘、U盘等安装介质。

2.6基本部署过程

  1. 准备CentOS 7 安装源(YUM仓库)
  2. 安装并启用TFTP服务
  3. 提供Linux内核、PXE引导程序等
  4. 安装并启用DHCP服务
  5. 配置启动菜单

PXE%20%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B">2.7 PXE 启动过程

  • PXE 客户端启动:

当计算机启动时,PXE 客户端通过 BIOS 或 UEFI 启动,并向网络发送 DHCP 请求,寻找 DHCP 服务器。

  • DHCP 服务器响应:

DHCP 服务器响应 DHCP 请求,为客户端分配 IP 地址,并提供 TFTP 服务器的位置和引导文件名。

  • 下载引导文件:

PXE 客户端通过 TFTP 下载引导文件,通常是一个小型的 PXE 引导程序(如 pxelinux.0)。

  • 执行引导文件:

PXE 客户端执行下载的引导文件,该引导文件进一步下载操作系统内核和初始化文件系统。

  • 启动操作系统:

PXE 客户端加载内核和初始化文件系统,最终启动操作系统。

3.实战操作

3.1环境介绍

本次实战用到两台基于 RedHat7 操作系统的虚拟机。一台用于服务端配置,另一台用作客户机来实现自动化布置操作系统。

3.2服务端配置

  • 初始化服务器。为服务端配置主机名,静态IP地址。

[root@localhost ~]# hostnamectl set-hostname server
[root@localhost ~]# exit
logout
[redhat@localhost ~]$ su -
Password: 
Last login: Mon Aug  5 00:07:11 CST 2024 on pts/0
[root@server ~]# hostnamectl 
   Static hostname: server
         Icon name: computer-vm
           Chassis: vm
        Machine ID: abf279f0c2454b319872ee364824cfa6
           Boot ID: dce5806e6c264d769291ad8fee95d425
    Virtualization: vmware
  Operating System: Red Hat Enterprise Linux Server 7.9 (Maipo)
       CPE OS Name: cpe:/o:redhat:enterprise_linux:7.9:GA:server
            Kernel: Linux 3.10.0-1160.el7.x86_64
      Architecture: x86-64

[root@server ~]# nmcli connection modify ens33 ipv4.addresses 172.25.250.101/24 ipv4.dns 172.25.250.102 ipv4.gateway 172.25.250.2 ipv4.method manual connection.autoconnect yes
[root@server ~]# nmcli connection up ens33 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

[root@server ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.25.254.101  netmask 255.255.255.0  broadcast 172.25.254.255
        inet6 fe80::ad89:7e8a:f05f:a1b1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a8:b8:e4  txqueuelen 1000  (Ethernet)
        RX packets 305002  bytes 21450955 (20.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2892811  bytes 4373559563 (4.0 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 338  bytes 68700 (67.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 338  bytes 68700 (67.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:be:f9:f4  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

配置好静态 IP 后,在虚拟机的虚拟网络编辑器里的 net 模式把 dhcp 自动分配地址的选项取消勾选。

  •  安装并打开图形界面

如果安装虚拟机时选择了图形化安装,则安装步骤可以跳过,直接开启即可。

[root@server ~]# yum group install "Sever with GUI" -y
[root@server ~]# init 5

  •  查看系统安装过程文件

此文件是在系统安装好后自动生成的,这个文件记录了系统在安装过程中的所有设定。

[root@server ~]# cat /root/anaconda-ks.cfg 

  • 安装图形化生成 kickstart 自动安装脚本的工具

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

  • 启动图形制作工具

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

 

  •  
  •  在虚机终端编辑刚刚保存的文件

[root@server ~]# ls
anaconda-ks.cfg  initial-setup-ks.cfg  ks.cfg
[root@server ~]# vim ks.cfg 

退出编辑的时候按强制保存退出。

  •  用这个命令判断 ks.cfg 文件有没有出错

[root@server ~]# ksvalidator ks.cfg 
[root@server ~]# 

  • 配置http服务

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

[root@server ~]# systemctl enable --now httpd
[root@server ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               1.9G     0  1.9G   0% /dev
tmpfs                  1.9G   39M  1.9G   3% /dev/shm
tmpfs                  1.9G   13M  1.9G   1% /run
tmpfs                  1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/rhel-root   35G  4.2G   31G  12% /
/dev/sda1             1014M  183M  832M  19% /boot
tmpfs                  378M   24K  378M   1% /run/user/1000
/dev/sr0               4.3G  4.3G     0 100% /rhel7
[root@server ~]# ln -s /rhel7/ /var/www/html/

 [root@server ~]# cp /root/ks.cfg /var/www/html/

[root@server ~]# cd /var/www/html/
[root@server html]# ls
ks.cfg  rhel7

用虚机里的火狐浏览器测试

  • 更改本地仓库挂载目录为 /rhel7

[root@server html]# cd
[root@server ~]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# ls
redhat.repo  rpm.repo
[root@server yum.repos.d]# vim rpm.repo 

[repo]
name=repo
baseurl=file:///rhel7
gpgcheck=0

  •  配置dhcp服务

检查系统有没有安装过 dhcp。

[root@server ~]# yum search dhcpd
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-
              : manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

Warning: No matches found for: dhcpd
No matches found

安装 dhcp。 

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

查看 dhcp 的具体配置文件有哪些。

[root@server ~]# rpm -qc dhcp
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases 

 用命令生成 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
#
[root@localhost ~]# \cp -f /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf

编辑 dhcp 配置文件

 [root@server ~]# vim /etc/dhcp/dhcpd.conf 

 27、28行注释,37行以后都不要。

 重启服务并设置 dhcp 开机自启动

[root@server ~]# systemctl restart dhcpd

[root@server ~]# systemctl enable --now dhcpd6.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd6.service to /usr/lib/systemd/system/dhcpd6.service.
Job for dhcpd6.service failed because the control process exited with error code. See "systemctl status dhcpd6.service" and "journalctl -xe" for details.

  •  安装系统自引导加载服务

[root@server ~]# yum search pxelinux
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-
              : manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

============================== Matched: pxelinux ===============================
syslinux.x86_64 : Simple kernel loader which boots from a FAT filesystem
syslinux-extlinux.x86_64 : The EXTLINUX bootloader, for booting the local
                         : system.
syslinux-tftpboot.noarch : SYSLINUX modules in /var/lib/tftpboot, available for
                         : network booting
[root@server ~]# yum install syslinux.x86_64 -y

  • 配置快速传输文件 tftp。

用于共享 pxelinux.0 数据文件的网络服务。

[root@server ~]# yum search tftp
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-
              : manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

============================== N/S matched: tftp ===============================
syslinux-tftpboot.noarch : SYSLINUX modules in /var/lib/tftpboot, available for
                         : network booting
tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP)
tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP)

  Name and summary matches only, use "search all" for everything.
[root@server ~]# yum install tftp-server.x86_64 -y

[root@server ~]# systemctl enable --now tftp

 [root@server ~]# rpm -ql tftp-server 
/etc/xinetd.d/tftp
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd
/usr/share/doc/tftp-server-5.2
/usr/share/doc/tftp-server-5.2/CHANGES
/usr/share/doc/tftp-server-5.2/README
/usr/share/doc/tftp-server-5.2/README.security
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot
 

[root@server ~]# cp /rhel7/isolinux/* /var/lib/tftpboot/
[root@server ~]# cp /usr/share/syslinux/pxe
pxechain.com  pxelinux.0    
[root@server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

[root@server ~]# cd /var/lib/tftpboot/
[root@server tftpboot]# ls
boot.cat   initrd.img    memtest       splash.png   vesamenu.c32
boot.msg   isolinux.bin  pxelinux.0    TRANS.TBL    vmlinuz
grub.conf  isolinux.cfg  pxelinux.cfg  upgrade.img
[root@server tftpboot]# cp isolinux.cfg pxelinux.cfg/default 


[root@server tftpboot]# vim /var/lib/tftpboot/pxelinux.cfg/default 

重启 http 服务

[root@server tftpboot]# systemctl restart httpd.service

 3.3客户端测试

  • 新建一台 RedHat7 虚拟机进行自动安装系统测试。
  • 开启虚拟机时用“打开电源时进入固件打开”。

  • 运行虚拟机后用方向键进行操作

  • 系统运行完一次出现进入界面时快速关闭运行虚拟机,再次“点击打开电源时进入固件打开”运行虚拟机。

 

  • 两次运行完后,虚拟机就完成了系统自动安装。此时可以登入root用户 ,检查客户机的IP地址是否按照服务端要求的地址池来进行分配。


http://www.ppmy.cn/news/1505447.html

相关文章

【Material-UI】Autocomplete组件中的尺寸(Sizes)详解

文章目录 一、size属性简介二、尺寸选项1. medium&#xff08;默认&#xff09;2. small 三、实际应用中的尺寸选择1. 紧凑型设计2. 标准表单3. 特定交互需求 四、最佳实践五、总结 在现代Web应用开发中&#xff0c;UI组件的大小和布局至关重要。Material-UI的Autocomplete组件…

05:【stm32】重映射AFIO

重映射AFIO 1、什么是AFIO2、怎么使用AFIO 1、什么是AFIO AFIO是stm32上的众多片上外设之一&#xff0c;专门用来执行“复用功能的重映射” 2、怎么使用AFIO 如下图所示&#xff1a;当我们要同时使用USART1和TIM1时&#xff0c;我们就需要使用AFIO进行使其中一个片上外设进行重…

【Vue】vue3 中使用 ResizeObserver 监听元素的尺寸宽度变化

要监听 div 宽度的变化&#xff0c;可以使用 ResizeObserver 接口。ResizeObserver 允许你观察一个或多个元素的尺寸变化&#xff0c;并在发生变化时执行回调函数。这种方法比使用 MutationObserver 更专注于尺寸变化&#xff0c;且不受元素属性变化的影响。 使用 ResizeObserv…

时间同步--- ntp与ptp

时间同步 1. 什么是NTP时间&#xff1f;什么是PTP时间&#xff1f; NTP时间&#xff08;Network Time Protocol 时间&#xff09;: NTP即网络时间协议&#xff08;Network Time Protocol&#xff09;&#xff0c;它是一种用于同步计算机时间的网络协议。NTP可以将所有参与的计…

TypeScript循环

循环 循环 一直重复的做某一件事 循环需要的必须条件&#xff1a;1.开始条件 2.结束条件3.变量的更新 while循环允许程序在满足特定条件时重复执行一段代码块&#xff0c;直到条件不再满足为止 结构&#xff1a;while(条件表达式){ //需要重复执行的代码块 } let a:numb…

3款热门剪辑软件,打工人如何在2024年提升效率?

在现在这个快得飞起的工作节奏下&#xff0c;提高效率成了咱们每个打工人的必修课。特别是在视频剪辑这一块&#xff0c;不管是自媒体的创作者还是公司的宣传人员&#xff0c;都得找些给力的工具来帮忙。今天我们就来聊聊几款流行的剪辑软件&#xff0c;看看它们怎么帮我们在20…

开发一个MutatingWebhook

介绍 Webhook就是一种HTTP回调&#xff0c;用于在某种情况下执行某些动作&#xff0c;Webhook不是K8S独有的&#xff0c;很多场景下都可以进行Webhook&#xff0c;比如在提交完代码后调用一个Webhook自动构建docker镜像 准入 Webhook 是一种用于接收准入请求并对其进行处理的…

哪些系统需要按照等保2.0进行定级?

等保2.0适用的系统类型 根据等保2.0的要求&#xff0c;需要进行定级的系统主要包括但不限于以下几类&#xff1a; 基础信息网络&#xff1a;包括互联网、内部网络、虚拟专用网络等。云计算平台/系统&#xff1a;涵盖公有云、私有云、混合云等多种部署模式的云服务平台。大数据…