利用 PXE 实现自动化系统部署

利用 PXE 实现自动化系统部署

PXE介绍

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

PXE启动工作原理
利用 PXE 实现自动化系统部署插图

利用PXE实现自动化安装流程

利用 PXE 实现自动化系统部署插图(1)

  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文件里的安装信息,下载安装源文件进行自动化安装

在CentOS 6 上实现PXE自动化安装CentOS

安装前准备

关闭防火墙和SELINUX,DHCP服务器静态IP

网络要求:关闭Vmware软件中的DHCP服务

安装相关软件包并启动
[root@centos6 ~]#yum install dhcp httpd  tftp-server  syslinux
[root@centos6 ~]#chkconfig tftp on
[root@centos6 ~]#chkconfig httpd on
[root@centos6 ~]#chkconfig dhcpd on
[root@centos6 ~]#service httpd start
[root@centos6 ~]#service xneted start?
准备yum 源和相关目录
[root@centos6 ~]#mkdir -pv /var/www/html/centos/6/os/x86_64
[root@centos6 ~]#mount /dev/sr0 /var/www/html/centos/6/os/x86_64
准备kickstart文件
[root@centos6 ~]#mkdir /var/www/html/ks/
[root@centos6 ~]#vim  /var/www/html/centos/ks/centos6.cfg
[root@centos6 ~]#grep -vE '^#|^' /var/www/html/centos/ks/centos6.cfg
install
text
reboot
url --url=http://10.0.0.100/centos/6/os/x86_64/
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp  --noipv6
rootpw  --iscrypted6b6C5mM/BwOMBoK8HcYZFrHoNlOL0iDsxOTRhwnWJ3yfFmf7mRJBOxEqGoI56UMrT8J7qlrGwX7tSnOf7wKxYR2hAvAREILDgOgsFe1
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
zerombr
clearpart --all --initlabel
part /boot --fstype=ext4 --size=1024
part / --fstype=ext4 --size=50000
part /data --fstype=ext4 --size=30000
part swap --size=2048
%packages
@core
@server-policy
@workstation-policy
autofs
vim-enhanced
%end
%post
useradd wang 
echo magedu | passwd --stdin wang &> /dev/null
mkdir  /etc/yum.repos.d/bak
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
name=base
baseurl=file:///misc/cd
gpgcheck=0
EOF
%end
配置DHCP服务
[root@centos6 ~]#cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
[root@centos6 ~]#vim /etc/dhcp/dhcpd.conf
[root@centos6 ~]#cat /etc/dhcp/dhcpd.conf
option domain-name "example.com";
option domain-name-servers 10.0.0.1;
subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.1 10.0.0.200;
    option routers 10.0.0.1;
    filename "pxelinux.0";
    next-server 10.0.0.100;
}
[root@centos6 ~]#service dhcpd start
准备PXE启动相关文件
[root@centos6 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@centos6 ~]#cp  /usr/share/syslinux/pxelinux.0   /var/lib/tftpboot/
[root@centos6 ~]#cd  /misc/cd/images/pxeboot/
[root@centos6 ~]#cp vmlinuz initrd.img /var/lib/tftpboot
[root@centos6 ~]#Cd /misc/cd/isolinux/
[root@centos6 ~]#cp boot.msg vesamenu.c32 splash.jpg /var/lib/tftpboot
[root@centos6 ~]#cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@centos6 ~]#tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── boot.msg
├── initrd.img
├── pxelinux.0
├── pxelinux.cfg
│     └── default
├── splash.jpg
├── vesamenu.c32
└── vmlinuz

1 directory, 7 files
准备启动菜单文件
[root@centos6 ~]#vim /var/lib/tftpboot/pxelinux.cfg/default 
default vesamenu.c32 #指定菜单风格
#prompt 1
timeout 600?
display boot.msg?
menu background splash.jpg
menu title Welcome to wang CentOS 6
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000?
label auto
  menu label ^Automatic Install Centos6 
  kernel vmlinuz
  append initrd=initrd.img ks=http://10.0.0.100/ks/centos6.cfg
label manual
  menu label ^Manual Install Centos
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://10.0.0.100/centos/6/isos/x86_64/
label local
  menu default 
  menu label Boot from ^local drive
  localboot 0xffff
测试客户端基于PXE实现自动安装

新准备一台主机,设置网卡引导,可看到看启动菜单,并实现自动安装

在CentOS7 上实现PXE自动化安装CentOS

安装前准备

关闭防火墙和SELINUX,DHCP服务器静态IP

网络要求:关闭Vmware软件中的DHCP服务

安装相关软件包并启动服务
[root@centos7 ~]#yum -y install httpd tftp-server dhcp  syslinux  system-config-kickstart
[root@centos7 ~]#systemctl enable --now httpd tftp dhcpd

注意:由于dhcp还没有配置,此时还无法立即启动

准备yum源和相关目录
[root@centos7 ~]#mkdir  -pv /var/www/html/centos/7/os/x86_64
[root@centos7 ~]#mount /dev/sr0  /var/www/html/centos/7/os/x86_64
准备kickstart文件
[root@centos7 ~]#mkdir /var/www/html/ks/
[root@centos7 ~]#vim  /var/www/html/ks/centos7.cfg  
[root@centos7 ~]#grep -vE '^#|^' /var/www/html/ks/centos7.cfg 
install
xconfig  --startxonboot
keyboard --vckeymap=us --xlayouts='us'
rootpw --iscrypted1bpNEv8S5lK.CjNkf.YCpFPHskSNiN0
url --url="http://10.0.0.100/centos/7/os/x86_64"
lang en_US
auth  --useshadow  --passalgo=sha512
text
firstboot --enable
selinux --disabled
skipx
services --disabled="chronyd"
ignoredisk --only-use=sda
firewall --disabled
network  --bootproto=dhcp --device=ens33
reboot
timezone Asia/Shanghai --nontp
bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda
zerombr
clearpart --all --initlabel
part swap --fstype="swap" --ondisk=sda --size=3072
part / --fstype="xfs" --ondisk=sda --size=51200
part /boot --fstype="xfs" --ondisk=sda --size=1024
part /data --fstype="xfs" --ondisk=sda --size=30720
%post
useradd wang
%end
%packages
@core
%end
配置DHCP服务
[root@centos7 ~]#vim /etc/dhcp/dhcpd.conf
option domain-name "example.com";
default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.1 10.0.0.200;
    option routers 10.0.0.1;
    next-server 10.0.0.100;
    filename "pxelinux.0";
}
[root@centos7 ~]#systemctl  start dhcpd
准备PXE启动相关文件
[root@centos7 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@centos7 ~]#cp  /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/  
[root@centos7 ~]#cp  /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
[root@centos7 ~]#cp  /misc/cd/isolinux/isolinux.cfg   /var/lib/tftpboot/pxelinux.cfg/default

最终目录文件列表如下:
/var/lib/tftpboot/
├── initrd.img
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vmlinuz

准备启动菜单
[root@centos7 ~]#Vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title PXE INSTALL MENU
label auto
  menu label ^Auto Install CentOS 7 
  kernel vmlinuz
  append initrd=initrd.img ks=http://10.0.0.100/ks/centos7.cfg 
label manual
  menu label ^Manual Install CentOS 7 
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://10.0.0.100/centos/7/os/x86_64
label local   
    menu default 
    menu label ^Boot from local drive
    localboot 0xffff
测试客户端基于PXE实现自动安装

新准备一台主机,设置网卡引导,可看到看启动菜单,并实现自动安装

在CentOS 8 上实现PXE自动化安装CentOS 6,7,8

安装前准备

关闭防火墙和SELINUX,DHCP服务器静态IP

网络要求:关闭Vmware软件中的DHCP服务,基于NAT模式

安装相关软件包并启动
[root@centos8 ~]#dnf -y install dhcp-server tftp-server httpd syslinux-nonlinux 
[root@centos8 ~]#systemctl enable --now httpd tftp dhcpd 
准备yum 源和相关目录
[root@centos8 ~]#mkdir  -pv /var/www/html/centos/{6,7,8}/os/x86_64/ 
[root@centos8 ~]#mount /dev/sr0 /var/www/html/centos/6/os/x86_64/
[root@centos8 ~]#mount /dev/sr1 /var/www/html/centos/7/os/x86_64/
[root@centos8 ~]#mount /dev/sr2 /var/www/html/centos/8/os/x86_64/
准备kickstart文件
[root@centos8 ~]#mkdir /var/www/html/ks/
[root@centos8 ~]#vim /var/www/html/ks/centos6.cfg  #内容参看6.3.4
[root@centos8 ~]#vim /var/www/html/ks/centos7.cfg  #内容参看6.4.4
[root@centos8 ~]#vim /var/www/html/ks/centos8.cfg
[root@centos8 ~]#grep -Ev " (#|)" /var/www/html/ks/centos8.cfg
ignoredisk --only-use=sda
zerombr
text
reboot
clearpart --all --initlabel
selinux --disabled
firewall --disabled
url --url=http://10.0.0.100/centos/8/os/x86_64/
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network  --bootproto=dhcp --device=ens160 --ipv6=auto --activate
network  --hostname=centos8.magedu.com
rootpw --iscrypted 6j9YhzDUnQVnxaAk8qv7rkMcPAEbV5yvwsP666DXWYadd3jYjkA9fpxAo9qYotjGGBUclCGoP1TRvgHBpqgc5n0RypMsPTQnVDcpO01
firstboot --enable
skipx
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
user --name=wang --password=6oUfb/02CWfLb5l8fsgEZeR7c7DpqfpmFDH6huSmDbW1XQNR4qKl2EPns.gOXqlnAIgv9pTogtFVaDtEpMOC.SWXKYqxfVtd9MCwxb1 --iscrypted --gecos="wang"
part / --fstype="xfs" --ondisk=sda --size=102400
part /data --fstype="xfs" --ondisk=sda --size=51200
part swap --fstype="swap" --ondisk=sda --size=2048
part /boot --fstype="ext4" --ondisk=sda --size=1024
%packages
@^minimal-environment
kexec-tools
%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
配置DHCP服务
[root@centos8 ~]#cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@centos8 ~]#vim /etc/dhcp/dhcpd.conf 
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 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.1 10.0.0.200;
  option routers 10.0.0.1;
  next-server 10.0.0.100;
  filename "pxelinux.0";
}

[root@centos8 ~]#systemctl start dhcpd 
准备PXE启动相关文件
[root@centos8 ~]#mkdir /var/lib/tftpboot/centos{6,7,8}
#准备CentOS6,7,8各自的内核相关文件
[root@centos8 ~]#cp /var/www/html/centos/6/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6
[root@centos8 ~]#cp /var/www/html/centos/7/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7
[root@centos8 ~]#cp /var/www/html/centos/8/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos8
[root@centos8 ~]#cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/

#以下三个文件是CentOS8安装所必须文件,CentOS6,7则不需要
[root@centos8 ~]#cp /var/www/html/centos/8/os/x86_64/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/

#生成安装菜单文件
[root@centos8 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/
[root@centos8 ~]#cp /var/www/html/centos/8/isos/x86_64/isolinux/isolinux.cfg  /var/lib/tftpboot/pxelinux.cfg/default

#最终目录结构如下
[root@centos8 ~]#tree /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@centos8 ~]#vim  /var/lib/tftpboot/pxelinux.cfg/default 
default menu.c32
timeout 600
menu title Install CentOS  Linux 

label linux8
  menu label Auto Install CentOS Linux ^8
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img ks=http://10.0.0.100/ks/centos8.cfg

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

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

label manual
  menu label  ^Manual  Install CentOS Linux 8.0 
  kernel vmlinuz
  append initrd=initrd.img inst.repo=http://10.0.0.100/centos/8/os/x86_64/

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

label local
  menu default
  menu label Boot from ^local drive
  localboot 0xffff
测试客户端基于PXE实现自动安装

新准备一台主机,设置网卡引导,可看到看启动菜单,并实现自动安装

注意:VMware workstation 对于不同的CentOS 版本,生成的虚拟机的硬件并不兼容
利用 PXE 实现自动化系统部署插图(2)
利用 PXE 实现自动化系统部署插图(3)

利用 PXE 实现自动化系统部署插图(4)

利用 PXE 实现自动化系统部署插图(5)

利用 PXE 实现自动化系统部署插图(6)

利用 PXE 实现自动化系统部署插图(7)

利用 PXE 实现自动化系统部署插图(8)

本文链接:http://www.yunweipai.com/36139.html

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/52592.html

(0)
上一篇 2021年8月6日
下一篇 2021年8月6日

相关推荐

发表回复

登录后才能评论