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

复制代码
相关推荐
A小辣椒10 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒14 小时前
TShark:基础知识
linux
AlfredZhao16 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式