PXE高效批量网络装机

一、系统安装

1.1、系统装机的三种引导方式

  1. 硬盘
  2. 光驱( u 盘)
  3. 网络启动 pxe

1.2、系统安装过程

  • 加载boot loader

Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

  • 加载启动安装菜单

在加载了Boot Loader之后,用户通常会看到一个启动安装菜单,允许用户选择不同的启动选项,如进入安装程序、进入安全模式等。这个菜单可能是由Boot Loader提供的,也可能是由安装程序的一部分预先准备的

  • 加载内核和initrd系统(文件才能使用文件)
  • 加载根系统() 运行anaconda的安装向导

根文件系统包含了操作系统运行所需的所有文件和目录。

某些Linux发行版的安装过程中,可能会使用到类似Anaconda的安装向导来配置系统环境。

1.3、Linux安装光盘的安装相关文件

在系统光盘的 isolinux 目录下有和安装相关的文件

  • boot.cat: 相当于grub的第一阶段
  • isolinux.bin:光盘引导程序,在mkisofs的选项中需要明确给出文件路径,这个文件属于 SYSLINUX项目
  • isolinux.cfg:启动菜单的配置文件,当光盘启动后(即运行isolinux.bin),会自动去找 isolinux.cfg文件
  • vesamenu.c32:是光盘启动后的启动菜单图形界面,也属于SYSLINUX项目,menu.c32提供纯文本的菜单
  • memtest:内存检测程序
  • splash.png:光盘启动菜单界面的背景图
  • vmlinuz :是内核映像
  • initrd.img :ramfs文件(精简版的linux系统,文件系统驱动等)

二、PXE 原理和概念

2.1、PXE简介

PXE(Preboot eXecution Environment,预启动执行环境)技术的网络装机方法。

PXE 是由 Intel 公司开发的网络引导技术,工作在 Client/Server 模式。

允许客户机通过网络从远程服务器上下载引导镜像,并加载安装文件或者整个操作系统。pxe是通过网卡引导启动。

若要搭建PXE网络体系,必须要满足一下几个前提条件:

客户机的网卡支持PXE协议(集成BOOTROM芯片),且主板支持网络引导;

网卡支持,bios支持

网络中有一台DHCP服务器以便于为客户机自动分配IP地址、指定引导文件位置;

服务器通过TFTP(简单文件传输协议)提供引导镜像文件的下载。

PXE 严格来说并不是一种安装方式,而是一种引导的方式

进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。

协议分为 client 和 server 端,PXE client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client 调入内存执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行。

运行 PXE 协议需要设置 DHCP 服务器 和 TFTP 服务器。DHCP 服务器用来给 PXE client(将

要安装系统的主机)分配一个 IP 地址,由于是给 PXE client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。

此外,在 PXE client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。

2.2、PXE优点

规模化:同时装配多台服务器

自动化:安装系统、配置各种服务;

远程实现:不需要光盘、U 盘等安装介质。

2.3、使用PXE需要的服务

  • dhcp:必须有dhcp服务分配ip,裸机无ip地址。网卡功能,自动获取ip地址,配置dhcp时告诉tftp服务器地址给裸机客户端。
  • TFTP:UDP协议,通过此协议将需要的文件下载到网卡,网卡自带功能。因为网卡不支持ftp。tFtp 69
  • FTP:装软件包时数据过大,tftp不能保证传输。
  • SYSLINUX-EXTLINUX.X86_64:小型的grub引导程序。
  • SYSTEM-CONFIG-KICKSTART:KICKSTART无人值守安装

2.4、实现过程

1.PXE客户机(需要安装的机器)发出DHCP请求,向DHCP服务器申请IP地址。

2.DHCP服务器响应PXE客户机的请求,

a.自动从IP地址池中分配一个IP地址 给PXE客户机,

b.并且告知PXE客户机:TFTP服务器的IP地址

3.PXE客户机向TFTP服务器发起获取pxelinux.0引导程序文件的请求。

默认在TFTP共享目录/var/lib/tftpboot/下】

4.TFTP服务器响应PXE客户机的请求,将其共享的pxelinux.0文件传输给PXE客户机。

5.PXE客户机通过网络来启动到系统安装主界面。

6.PXE客户机向文件共享服务器(ftp、http、nfs等)发起获取centos或windows系统安装文件的请求。

7.文件共享服务响应PXE客户机的请求,将共享的系统安装文件传输给PXE客户机。

8.PXE客户机进入到安装提示向导界面,用户需要手动来完成系统安装的操作。

三、PXE批量部署

|--------|---------------|
| PXE服务器 | 192.168.77.79 |
| 客户端 | 未安装任何系统(裸机) |

首先下载四个服务配置

yum install tftp-server vsftpd syslinux dhcp -y

网卡ens37

3.1、安装并启用 DHCP 服务

将配置文件模板复制到dhcp目录下

cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

编辑

vim /etc/dhcp/dhcpd.conf

subnet 192.168.77.0 netmask 255.255.255.0 {
  range 192.168.77.100  192.168.77.200;
  option routers 192.168.77.2;
  next-server 192.168.77.79;
  filename "pxelinux.0";
}

systemctl start dhcpd

systemctl enable dhcpd

3.2、安装并启用 TFTP 服务

TFTP:(Trivial File Transfer Protocol)是一个小而易于实现的文件传送协议。TFTP是基于UDP数据报,需要有自己的差错改正措施。TFTP只支持文件传输,不支持交互,没有庞大的命令集。也没有目录列表功能,以及不能对用户进行身份鉴别。但它的代码所占内存较小,不需要硬盘就可以固化TFTP代码,很适合较小的计算机和特殊用途的设备。

1.需要xinetd配置

vim /etc/xinetd.d/tftp

tftp被xinet所托管,xinetd默认没有安装 配置文件,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器

yum install xinetd -y

2.需要pxelinux.0引导程序

syslinux 使用引导程序文件 放到tfpt的根目录下,系统引导

pxelinux.0是个二进制文件,主要作用相当于一个系统安装步骤的指引,引导客户端如何安装系统

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot

注,只有安装了 system-config-kickstart 软件包,才会有/usr/share/syslinux/目录及目录中的文件

3.需要系统初始化文件和内核文件

切换到有镜像的文件(昨天拷贝的,要不就挂载)

mount /dev/cdrom /mnt

cd /mnt/images/pxeboot/

拷贝系统初始化文件 内核文件 ,因为要装机

cp initrd.img vmlinuz /var/lib/tftpboot/

systemctl start xinetd

systemctl enable xinetd

systemctl start tftp

systemctl enable tftp

4.创建启动菜单文件default

至于为什么要是/var/lib/tftpboot/pxelinux.cfg/default文件,因为是由pxelinux.0这个文件决定好的

先创建目录而非文件虽然是以.cfg结尾

创建mkdir /var/lib/tftpboot/pxelinux.cfg

cd /var/lib/tftpboot/pxelinux.cfg

vim default

内容(后面需要改,1变0默认无人值守安装)

default auto //指定默认入口名称 ,对应下面的label auto
prompt 1 //设置是否等待用户选择,1 表示等待用户控制,0表示不等待用户控制,安装时会出现boot:如果按回车表示选择auto模式


label auto   //默认的图形安装
      kernel vmlinuz 
      append initrd=initrd.img method=ftp://192.168.100.100/centos7    //method必须指定网络路径

label linux text    //文本安装模式,出现boot:时输入linux text
      kernel vmlinuz 
      append text initrd=initrd.img method=ftp://192.168.100.100/centos7 

label linux rescue    //救援模式,出现boot:时输入linux rescue
      kernel vmlinuz 
	  append rescue initrd=initrd.img method=ftp://192.168.100.100/centos7

3.3、安装ftp服务

准备 CentOS 7 安装源

yum -y install vsftpd

mount /dev/cdrom /mnt

mkdir /var/ftp/centos7

cp -rf /mnt/* /var/ftp/centos7 #将镜像复制其中

systemctl start vsftpd

最后

重新(记得关闭防火墙和增强)

systemctl start dhcpd

systemctl start tftp

systemctl start vsftpd

systemctl start xinetd

四、kickstart 无人值守安装

4.1、kickstart概念

KickStart 是一种无人职守安装方式。KickStart 的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为 ks.cfg 的文件;在其后的安装过程中(不只局限于生成 KickStart 安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找 KickStart 生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。

这样,如果 KickStart 文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取 ks.cfg 文件,然后去忙自己的事情。等安装完毕,安装程序会根据 ks.cfg 中设置的重启选项来重启系统,并结束安装。

4.2、部署过程

yum install system-config-kickstart -y

或者

或者

网卡

安装后脚本的运行,害怕没有网,用ftp

mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
echo "[local]
name=local
baseurl=ftp://192.168.77.79/centos7
enabled=1
gpgcheck=0" > /etc/yum.repos.d/local.repo

保存,自动生成ks.cfg(不要改名字)应答文件

检查

/var/ftp/ks.cfg文本内容

可选则性添加软件包

添加至最后

%packages
@^graphical-server-environment
@base
@core
@desktop-debugging
@development
@dial-up
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@hardware-monitoring
@input-methods
@internet-browser
@multimedia
@print-client
@x11
chrony

%end

配置解读表和内容

kickstart的生成应答文件ks.cfg主要包括三个部分:命令段,程序包段,脚本段

|-----------------|------------------------------------|---------------------------------|
| Kickstart部分 | 子项/命令 | 描述 |
| 命令段 | keyboard | 设定键盘类型 |
| | lang | 设置系统语言 |
| | zerombr | 清除MBR(主引导记录) |
| | clearpart | 清除所有分区或指定分区 |
| | part | 创建新分区 |
| | rootpw | 设置root用户的密码 |
| | timezone | 设置系统时区 |
| | text | 使用文本模式安装界面 |
| | network | 配置网络接口 |
| | firewall | 配置防火墙设置 |
| | selinux | 启用/禁用SELinux |
| | reboot | 安装完成后自动重启 |
| 安装服务 | dhcp, tftp-server, vsftp, syslinux | 安装网络服务和引导加载器 |
| 修改配置文件 | dhcp | 设置next-server IP 和filename |
| | tftp-server | 修改/etc/xinetd.d/tftp配置,设置服务目录 |
| | 开启服务 | 确保dhcp, tftp-server, vsftp等服务运行 |
| | user | 安装后创建新用户 |
| | url | 指定安装源(如网络仓库) |
| 程序包段 | %packages | 开始程序包列表 |
| | @^environment group | 安装环境包组 |
| | @group_name | 安装特定包组 |
| | package | 安装单个包 |
| | -package | 不安装特定包 |
| | %end | 结束程序包列表 |
| 脚本段 | %pre | 安装前的脚本,如网络配置 |
| | %post | 安装后的脚本,如系统配置、用户设置等 |

# Install OS instead of upgrade
install                 //全新安装
# Keyboard layouts
keyboard 'us'  //英文键盘
# Root password
rootpw --iscrypted $1$9Rn8W7vF$npbKh8CeIbTxjwHUlcW4n0    //root密码
# Use network installation
url --url="ftp://192.168.100.100/centos7"  //网络安装路径
# System language
lang en_US       //系统语言,zh_CN表示中文
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text       //字符模式安装,graphical表示图形化安装
firstboot --disable
# SELinux configuration
selinux --disabled         //禁用selinux
# Firewall configuration
firewall --disabled        //禁用防火墙
# Network information
network  --bootproto=dhcp --device=ens33        //网卡配置
# Reboot after installation
reboot               //安装完重启
# System timezone
timezone Asia/Shanghai                  // 时区:上海
# System bootloader configuration
bootloader --location=mbr                //mbr引导 
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel                //清除所有分区信息和初始化分区标签
# Disk partitioning information
part / --fstype="xfs" --grow --size=1            //分区配置
part swap --fstype="swap" --size=2048
part /boot --fstype="xfs" --size=300


最小安装

%packages
@base                    //安装基础软件包
@^gnome-desktop-environment     //安装桌面环境
%end

#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$d7Ivo70y$R6meNEYHLhc6/gb8OeLOd1
# System language
lang zh_CN
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled

# Use NFS installation media
nfs --server=ftp://192.168.77.79 --dir=centos7
# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=dhcp --device=ens33
# Halt after installation
halt
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part / --fstype="xfs" --grow --size=1

%post --interpreter=/bin/bash
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
echo "[local]
name=local
baseurl=ftp://192.168.77.79/centos7
enabled=1
gpgcheck=0" > /etc/yum.repos.d/local.repo
%end
%packages
@base
@^gnome-desktop-environment
%end

重新修改引导菜单文件,添加 ks 引导参数

vim /var/lib/tftpboot/pxelinux.cfg/default

prompt 0 值为"0"时表示自动执行ks.cfg文件(无人值守,默认)、为"1"时表示手动配置(有人值守)

default auto
timeout=600
label auto
        kernel vmlinuz
        append initrd=initrd.img method=ftp://192.168.77.79/centos7  ks=ftp://192.168.77.79/ks.cfg

label linux text
        kernel vmlinuz
        append text initrd=initrd.img method=ftp://192.168.77.79/centos7  ks=ftp://192.168.77.79/ks.cfg

label linux rescue
        kernel vmlinuz
        append rescue initrd=initrd.img method=ftp://192.168.77.79/centos7  ks=ftp://192.168.77.79/ks.cfg

五、

相关推荐
Komorebi.py29 分钟前
【Linux】-学习笔记05
linux·笔记·学习
Mr_Xuhhh35 分钟前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
中云DDoS CC防护蔡蔡2 小时前
微信小程序被攻击怎么选择高防产品
服务器·网络安全·微信小程序·小程序·ddos
HPC_fac130520678162 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
速盾cdn4 小时前
速盾:CDN是否支持屏蔽IP?
网络·网络协议·tcp/ip
yaoxin5211234 小时前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin4 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
PersistJiao5 小时前
Spark 分布式计算中网络传输和序列化的关系(一)
大数据·网络·spark
黑客Ash8 小时前
【D01】网络安全概论
网络·安全·web安全·php
->yjy8 小时前
计算机网络(第一章)
网络·计算机网络·php