pxe自动化安装系统实验

pxe自动化安装系统实验

文章目录

PXE 介绍

PXE(Pre-boot Execution Environment,预启动执行环境),当我们需要大批量安装系统时,就需要自动化安装系统了,PXE技术可以实现这一需求,PXE通过网络引导和安装Windows,linux等多种操作系统。

工作原理

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

实验环境

bash 复制代码
#关闭vmnet8 dhcp

#网络规划
10.1.8.21 dhcp.demo.cloud dhcp
10.1.8.22 tftp.demo.cloud tftp
10.1.8.23 file.demo.cloud file
10.1.8.24 web.demo.cloud web

#克隆出所有虚拟机
#设置主机名和IP地址

# 10.1.8.21 dhcp.demo.cloud dhcp

hostnamectl set-hostname dhcp.demo.cloud
nmcli connection modify ens32 ipv4.addresses 10.1.8.21/24
nmcli connection up ens32

cat >> /etc/hosts << EOF
10.1.8.21 dhcp.demo.cloud dhcp
10.1.8.22 tftp.demo.cloud tftp
10.1.8.23 file.demo.cloud file
10.1.8.24 web.demo.cloud web
EOF

# 10.1.8.22 tftp.demo.cloud tftp

hostnamectl set-hostname tftp.demo.cloud
cat >> /etc/hosts << EOF
10.1.8.21 dhcp.demo.cloud dhcp
10.1.8.22 tftp.demo.cloud tftp
10.1.8.23 file.demo.cloud file
10.1.8.24 web.demo.cloud web
EOF

nmcli connection modify ens32 ipv4.addresses 10.1.8.22/24
nmcli connection up ens32


# 10.1.8.23 file.demo.cloud file

hostnamectl set-hostname file.demo.cloud
cat >> /etc/hosts << EOF
10.1.8.21 dhcp.demo.cloud dhcp
10.1.8.22 tftp.demo.cloud tftp
10.1.8.23 file.demo.cloud file
10.1.8.24 web.demo.cloud web
EOF

nmcli connection modify ens32 ipv4.addresses 10.1.8.23/24
nmcli connection up ens32

# 10.1.8.24 web.demo.cloud web

#web服务器通过pxe安装系统,并定制为web服务器

dhcp端

bash 复制代码
# 安装软件包dhcp
[root@dhcp ~ 14:55:51]# yum install -y dhcp

# 配置DHCP服务器
[root@dhcp ~ 15:02:44]# cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
[root@dhcp ~ 15:03:35]# /bin/cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@dhcp ~ 15:04:31]# vim /etc/dhcp/dhcpd.conf

[root@dhcp ~ 15:19:17]# dhcpd -t

[root@dhcp ~ 15:22:29]# systemctl enable dhcpd --now

[root@dhcp ~ 15:22:33]# cat /etc/dhcp/dhcpd.conf
subnet 10.1.8.0 netmask 255.255.255.0 {
  range 10.1.8.101 10.1.8.200;
  option domain-name-servers 223.5.5.5, 223.6.6.6;
  option domain-name "demo.cloud";
  option routers 10.1.8.2;
  option broadcast-address 10.1.8.255;
  default-lease-time 600;
  max-lease-time 7200;
  filename "pxelinux.0";
  next-server tftp.demo.cloud;
}

host web.demo.cloud {

#mac地址通过web网卡高级选项查看

  hardware ethernet 00:0C:29:4B:AC:2A;
  fixed-address 10.1.8.100;
}

#web端测试

#移除原本硬盘,新增200G硬盘,并启动时拒绝光盘连接。

TFTP 服务器介绍

TFTP(Trivial File Transfer Protocol,普通文件传输协议),是一个传输文件的简单协议,基于UDP协议而实现,端口号为69,默认共享数据路径:/var/lib/tftpboot。

tftp部署

bash 复制代码
# 安装软件包
[root@tftp ~ 14:55:50]# yum install -y tftp-server

# 启用并启动服务
[root@tftp ~ 15:44:17]# systemctl enable tftp.service --now

# 安装syslinux,提供pxelinux.0文件
[root@tftp ~ 15:44:37]# yum install -y syslinux

# 准备引导文件
[root@tftp ~ 15:45:07]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

[root@tftp ~ 15:46:55]# mkdir /dvd

# 挂载系统镜像
[root@tftp ~ 15:55:13]# mount /dev/sr0 /dvd
mount: /dev/sr0 is write-protected, mounting read-only

[root@tftp ~ 15:56:12]# cp /dvd/isolinux/* /var/lib/tftpboot/

[root@tftp ~ 15:56:50]# ls /var/lib/tftpboot/
boot.cat  grub.conf   isolinux.bin  memtest     splash.png  vesamenu.c32
boot.msg  initrd.img  isolinux.cfg  pxelinux.0  TRANS.TBL   vmlinuz

[root@tftp ~ 15:56:52]#  mkdir /var/lib/tftpboot/pxelinux.cfg

# 部署引导文件
[root@tftp ~ 15:57:45]# cp /var/lib/tftpboot/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

[root@tftp ~ 15:58:22]# vim /var/lib/tftpboot/pxelinux.cfg/default

# 修改标题内容
menu title pxe server for Centos 7

label linux
  menu label pxe ^Install Centos 7
#设置该label为默认启动条目  
  menu default 
  kernel vmlinuz
# append参数,ks指向应答文件位置
  append initrd=initrd.img inst.ks=http://10.1.8.23/ks.cfg

#注释掉第二个label的menu default

file端

bash 复制代码
[root@file ~ 14:55:50]# yum install -y nginx

[root@file ~ 16:19:27]# mkdir /usr/share/nginx/html/dvd
[root@file ~ 16:19:35]# vim /etc/fstab 
/dev/sr0 /usr/share/nginx/html/dvd iso9660 defaults        0 0

[root@file ~ 16:21:35]# vim /etc/nginx/nginx.conf
server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;
        autoindex on;


[root@file ~ 16:22:17]# mount /dev/sr0 
mount: /dev/sr0 is write-protected, mounting read-only

[root@file ~ 16:22:35]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M  7.6M  479M   2% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/mapper/centos-root   50G  1.8G   49G   4% /
/dev/sda1               1014M  139M  876M  14% /boot
/dev/mapper/centos-home  146G   33M  146G   1% /home
tmpfs                     98M     0   98M   0% /run/user/0
/dev/sr0                 4.5G  4.5G     0 100% /usr/share/nginx/html/dvd
[root@file ~ 16:22:38]# systemctl enable nginx.service --now
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@file ~ 16:24:25]# vim /usr/share/nginx/html/ks.cfg

#图形化自动安装
[root@file ~ 16:25:18]# cat /usr/share/nginx/html/ks.cfg

lang en_US

keyboard us

timezone Asia/Shanghai

#redhat
rootpw $1$9thMdh$MgRkBPqQuEz6QeFaQDX6p0 --iscrypted

url --url=http://10.1.8.23/dvd

bootloader --append="rhgb quiet crashkernel=0" --iscrypted --password=grub.pbkdf2.sha512.10000.CF4F81F0F06696FBF1B7BDCCDE97DF0E3E8DD595A1A965AFC868407D12C7F2972BD785B1789CC835D2B3C0CDE388A30E468FB1E9846AF9375EEB92A54FBDC40A.F4F67CEEF96CC52148BCE8075BFB21419D48EEBE6A970502DC271A6D95B04C415619D0739A1E567AADFA51A6BF5DF414F10703B1E981214D19E974812D259F3F

zerombr

clearpart --all --initlabel

# Disk partitioning information
part /boot --fstype="xfs" --size=1024
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --grow --size=1

auth --passalgo=sha512 --useshadow

network --device=ens32 --hostname=webapp.demo.cloud --bootproto=static --ip=10.1.8.100 --netmask=255.255.255.0 --gateway=10.1.8.2 --nameserver=223.5.5.5

skipx

firstboot --enable

selinux --disabled

firewall --enabled --http --ssh

group --name=demo
user --name=demo --groups=wheel --password='$1$9thMdh$MgRkBPqQuEz6QeFaQDX6p0'

reboot

%post  --interpreter=/bin/bash
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y httpd
systemctl enable httpd
echo Hello World > /var/www/html/index.html
echo "
This is a web server.
Be careful." >> /etc/issue
echo webapp.demo.cloud > /etc/hostname
%end

%packages
@^minimal
kexec-tools
%end

#若普通用户密码错误使用root账户更改即可

#等web主机安装完成测试

[root@file ~ 10:27:06]# curl http://10.1.8.100
Hello World

/var/www/html/index.html

echo "

This is a web server.

Be careful." >> /etc/issue

echo webapp.demo.cloud > /etc/hostname

%end

%packages

@^minimal

kexec-tools

%end

#若普通用户密码错误使用root账户更改即可

#等web主机安装完成测试

root@file \~ 10:27:06\]# curl http://10.1.8.100 Hello World ``` ```

相关推荐
LCG米1 小时前
工业自动化案例解析:基于ARM7与μC/OS-II的焊接机控制系统设计
运维·c语言·自动化
Zeku1 小时前
20251125 - Linux驱动开发Makefile文件介绍
linux·驱动开发·单片机
黄焖鸡能干四碗1 小时前
软件试运行方案试运行报告文档下载(WORD)
大数据·运维·数据库·安全
实心儿儿1 小时前
Linux —— 基础开发工具2
linux·运维·服务器
p***23361 小时前
Nginx 的 proxy_pass 使用简介
运维·nginx
秋深枫叶红1 小时前
嵌入式第二十三篇——数据结构基本概念
linux·数据结构·学习·算法
土拨鼠烧电路2 小时前
RPA悖论迷思:从解放的利器到运维的枷锁?
大数据·运维·笔记·rpa
proware2 小时前
linux串口驱动之五一级接收缓存同步
linux·工作队列·smp_load
宇钶宇夕2 小时前
西门子 S7-1200 PLC 3 台收尘器交替控制系统:硬件选型 + IO 地址分配 + 实操指南(下)
运维·自动化