携手创作,一起生长!这是我参加「掘金日新计划 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