携手创作,一起生长!这是我参加「掘金日新计划 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+Kickstart无人值守安装Linux服务器

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网络引导程序的装备文件。因而呈现如下情况:

PXE+Kickstart无人值守安装Linux服务器

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、重启虚拟机,看状态

PXE+Kickstart无人值守安装Linux服务器
可是问什么仍是显现这个姿态呢?温莎不显现咱们正常的菜单呢?

!!!原因:缺少内核!!!

咱们现在是找到”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、在看作用:

PXE+Kickstart无人值守安装Linux服务器

弥补:在读取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的

PXE+Kickstart无人值守安装Linux服务器

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的版别

PXE+Kickstart无人值守安装Linux服务器

弥补,刚才增加菜单,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 6000display 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
​