携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
什么是PXE,PXE工作流程
PXE(Pre-Boot Execution Environment)
PXE是通过网卡引导的技术,以前安装操作系统,都是通过光盘、U盘来引导的,PXE使用网卡来引导的。
1、使用PXE需要满足的条件:
-
BIOS支持
-
网卡支持
现在网卡都是主板自带的,一般都支持PXE
-
需要在BIOS中开启这个开关
2、PXE需要的技术:需要在主服务器上安装Dhcp+tftp服务器即可。
3、PXE大致工作流程:
- Dhcp的作用:除了能分配IP地址,还可以分配boot loader(grub)的名字,tftp server的IP地址,这一步是重点。
- 从服务器(被安装的服务器)安装tftp客户端,请求tftp客户端,把boot loader加载到内存中来。
- BIOS执行boot loader
- boot loader从tftp服务端中查找配置文件。
- 最后根据配置文件完成引导加载。
4、实验环境
节点 | IP |
---|---|
PXE-server | 192.168.9.130 |
PXE-client | 根据192.168.9.130的dhcp分配 |
5、如果是VMware WorkStation做实验,那就需要关闭自带的dhcp功能,host-only和nat都需要关闭
PXE引导部署,安装dhcp,tftp,xinetd
前提环境:关闭防火墙,se,iptables
1、配置本地Yum源
[root@node1 ~]# vi /etc/yum.repos.d/pxe.repo
[development]
name=pxe
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
2、安装dhcp,tftp-server
[root@pxe-server ~]# yum install -y dhcp tftp-server xinetd
3、配置dhcp,dhcp分为全局配置(就前面那几行),子配置,如果两者都配置以子配置为准。
[root@pxe-server ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@pxe-server ~]# vi /etc/dhcp/dhcpd.conf
# A slightly different configuration for an internal subnet.
subnet 192.168.9.0 netmask 255.255.255.0 { #IP地址段
range 192.168.9.140 192.168.9.200; #IP地址范围
option domain-name-servers 114.114.114.114; #DNS服务器
option domain-name "example.com"; #域名
option routers 192.168.9.2; #网关
option broadcast-address 192.168.9.255; #广播地址
default-lease-time 600; #租约期
max-lease-time 7200;
}
然后再全局添加两行配置:这一步需要在安装并启动了tftp服务下进行。
[root@pxe-server ~]# vi /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
next-server 192.168.9.130; #指向tftp服务
filename "/pxelinux.0"; #指定引导加载文件,"/"表示从根寻找此文件,不写默认就是从根寻找,注意这个根是tftp的根,并不是文件系统的根,安装了tftp,默认的根就是/var/lib/tftpboot目录,因此我们需要把“/pxelinux.0”文件放在此目录下。
# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
...
4、重启服务
[root@pxe-server ~]# systemctl restart dhcpd
5、开启tftp
[root@pxe-server ~]# vi /etc/xinetd.d/tftp
...
disable = no #默认是"yes",修改为"no"
...
#启动服务
[root@pxe-server ~]# systemctl restart xinetd
#查看69端口是否开启
安装了tftp之后,查看配置文件:server_args = -s /var/lib/tftpboot,他说tftp的根在/var/lib/tftpboot目录下,但是默认此目录为空,我们需要把”pxelinux.0″文件放在此目录下,那pxeselinux.0文件从哪来呢?我们需要安装个软件包
6、使用命令搜索pxelinux.0文件对应的软件包,然后下载安装
[root@pxe-server tftpboot]# yum provides "*/pxelinux.0"
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
development/filelists_db | 3.1 MB 00:00:00
#显示在这个软件包里面
syslinux-4.05-13.el7.x86_64 : Simple kernel loader which boots from a FAT filesystem
Repo : development
Matched from:
Filename : /usr/share/syslinux/pxelinux.0
#安装此软件包
[root@pxe-server ~]# yum install -y syslinux
#查找pxelinux.0文件
[root@pxe-server ~]# rpm -ql syslinux |grep pxe
/usr/share/doc/syslinux-4.05/pxelinux.txt
/usr/share/syslinux/gpxecmd.c32
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/gpxelinuxk.0
/usr/share/syslinux/pxechain.com
/usr/share/syslinux/pxelinux.0 #这个是
补充:pxelinux.0网络引导程序,常规的是引导:BIOS自检—获取并加载MBR到内存—执行GRUB2—加载内核,现在pxelinux.0就相当于GRUB2,但是pxelinux.0是基于网络的引导程序,pxelinux.0引导程序会读取它的配置文件:pxelinux.cfg/filename,这个文件名字可以叫做:”default”。
7、将pxelinux.0拷贝址tftp的根目录下
[root@pxe-server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
!!!至此重点说下以上流程:
- 客户端启动系统,选择网卡启动。
- 客户端从dhcp服务器端获取到IP,DNS等相关基本信息,并且获取到tftp服务器地址、pxelinux.0网络引导程序等高级信息。
- 客户端通过网卡访问tftp服务器,将pxelinux.0网络引导程序读取到内存中。
- 客户端在内存中执行引导程序。
- 读取引导程序的配置文件,配置文件在”pxelinux.cfg/default”
但是现在我们还没有pxelinux.0网络引导程序的配置文件。因此出现如下情况:
8、拷贝此配置文件
[root@pxe-server ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@pxe-server ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
9、重启虚拟机,看状态
但是问什么还是显示这个样子呢?温莎不显示我们正常的菜单呢?
!!!原因:缺少内核!!!
我们现在是找到”pxelinux.cfg/default”配置文件,然后读取配置文件,我们来看看配置文件的前几行内容:
default vesamenu.c32 #需要这个文件
timeout 600
display boot.msg #需要这个文件
...
可以看到去读配置文件,需要咋加载一些配置文件和数据,但是现在我们没有,因此显示上述图片效果。
那如何去找这些文件和数据呢?
其实就在/media/cdrom/isolinux/目录下,将此目录的信息拷贝到tftp的根目录(/var/lib/tftpboot/)下即可
10、拷贝加载default文件所需要的文件内容:
[root@pxe-server ~]# cp -a /media/cdrom/isolinux/* /var/lib/tftpboot/
11、在看效果:
补充:在读取default文件的信息时,写的都是相对路径,相对于tftp的根路径来说的,比如:
default vesamenu.c32 #其实我们这样写也一样:/var/lib/tftpboot/vesamenu.c32,如果tftp的根路径换了,这个配置文件的信息也需要跟换路径,和tftp的根路径同步。
timeout 600 #这个就是上图boot默认等待的时间,他的计数很独特是1/10,600s的十分之一就是60s。
至此PXE无人值守引导完成。
不同版本操作系统安装
PXE能进行不同版本操作系统安装吗?比如:CentOS7.5,CentOS7.9,Rhce7,ubuntu等安装?
可以,但是我们需要先了解两样东西
其实在isolinux目录下有两个最重要的文件:
- initrd.img(驱动程序)
- vmlinuz(内核)
不同的操作系统这两个文件版本一定不相同,也就是说initrd.img,vmlinuxz一定要匹配OS,CentOS7.5的就需要7.5版本的initrd.img,vmlinuxz文件。
那不同版本的initrd.img,vmlinuxz文件如何获取?
答案:就在对应版本光盘中的”image/pxeboot/”目录下。
下面来演示引导安装CentOS8.3:
1、将PXE-server的虚拟机的光盘换成8.3的
2、挂载光盘,将image/pxeboot/目录下的文件,拷贝到/var/lib/tftpboot/centos8.3下
[root@pxe-server ~]# mkdir /var/lib/tftpboot/centos8.3/
[root@pxe-server pxeboot]# cp vmlinuz initrd.img /var/lib/tftpboot/centos8.3/
3、编辑”default”配置文件进行添加个菜单
[root@pxe-server ~]# vi /var/lib/tftpboot/pxelinux.cfg/default
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
#从这里开始,没啥变化,就是文件路径问题
label linux8.3
menu label ^Install CentOS 8.3
kernel /centos8.3/vmlinuz
append initrd=/centos8.3/initrd.img
#到这里结束
label check
menu label Test this ^media & install CentOS 7
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
4、重新引导,可以看到已经有了8.3的版本
补充,刚才添加菜单,label的作用
在选择菜单时按”ESC”键,会出现boot#的命令行,然后你输入”linux8.3″,就和在菜单中选择”install8.3″是一样的效果。
Kickstart无人值守安装
实验环境:测试的虚拟机内存>2G,磁盘空间50G,磁盘太小会报错。
1、下载Kickstart安装包(非图形化选手不用选择这一步)
[root@pxe-server ~]# yum install -y system-config-kickstart
#然后输入命令
system-config-kickstart
注意这个是图形化界面使用的,是生成.cfg的向导,因为我们是命令行界面,因此我们需要直接编辑anaconda-ks.cfg文件。
2、安装httpd
[root@pxe-server ~]# yum install -y httpd
[root@pxe-server ~]# systemctl restart httpd
[root@pxe-server ~]# systemctl enable httpd
3、copy镜像文件至httpd的工作目录
[root@pxe-server ~]# mkdir /var/www/html/pub
[root@pxe-server ~]# cp -rvf /media/cdrom/* /var/www/html/pub/
4、编辑应答文件
[root@pxe-server ~]# mkidr /var/www/html/ks
[root@pxe-server ~]# cp test.cfg /var/www/html/ks/
[root@pxe-server ~]# cat /var/www/html/ks/test.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
url --url=http://192.168.9.130/pub #指定启动镜像源
# Use graphical install
graphical
repo --name="aa" --baseurl=http://192.168.9.130/pub #指定指定除自带的yum源外的其他yum源,可以指定多行yum源,第一回安装操作系统一般不用,需要写脚本安装软件可以配置。
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens33 --onboot=on --ipv6=auto --no-activate #修改,--bootproto=dhcp,onboot=on
network --hostname=test
# Root password
rootpw --iscrypted $6$T0sSA3PcjuLLeKkx$VK.2fv1b6JEu7k2XzK3a3cDDha0ADeBvhoUaZG5XTd0FsoEHhionWraBhuDTiBz9rKcd4dAfjCcyyXCNI7gYL0
# System services
services --enabled="chronyd"
# System timezone
timezone America/New_York --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm #自动创建分区
# Partition clearing information
clearpart --none --initlabel #清除所有分区
%packages
@^minimal
@core
chrony
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
5、将应答文件与default配置文件结合
label linux
menu label ^Install CentOS 7
kernel vmlinuz
#注意这里inst.stage2是需要指定镜像源的地址,
append initrd=initrd.img inst.stage2=http://192.168.9.130/pub
ks=http://192.168.9.130/ks/test.cfg quiet
#建议在安装源的后面加入quiet参数,意为使用静默安装方式,不再需要用户进行确认。文件修改完毕后保存即可。开机选项菜单是被调用的文件,因此不需要单独重启任何服务。
6、创建虚拟机,不指定CDROM,来进行测试
进行菜单自动化
其实还有一步我们没有实现自动化,那就是选择菜单时,还需要我们手动点击”Enter”,那这个是否可以也是先自动化呢?答案:可以。如下配置:
第一种方式:这个方法:就是”default”字段指向菜单中install centos7 的label
[root@pxe-server pxelinux.cfg]# vi default
default linux
timeout 6000
display boot.msg
#default指向的是label的内容,然后就代表直接安装这一项。不用再手动点击"Enter"。
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.stage2=http://192.168.9.130/pub ks=http://192.168.9.130/ks/test.cfg
第二种方法:设置为默认菜单,然后设置timeout时间:
timeout 60 #本照着十分之一的原则,这里的60就是菜单选项中的6s
label linux
menu label ^Install CentOS 7
kernel vmlinuz
menu default #将此菜单设置为默认菜单,光标就自动移动到这个菜单,然后配置上面的timeout时间,只需等待6s时间就行了。
append initrd=initrd.img inst.stage2=http://192.168.9.130/pub ks=http://192.168.9.130/ks/test.cfg
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/14854.html