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

PXE+Kickstart无人值守安装Linux服务器携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情 什么是PXE,PXE工作流程 PXE(Pre-Boot Execution Environment) PX

携手创作,共同成长!这是我参与「掘金日新计划 · 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都需要关闭

image.png

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网络引导程序的配置文件。因此出现如下情况:

image.png

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

image.png 但是问什么还是显示这个样子呢?温莎不显示我们正常的菜单呢?

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

我们现在是找到”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、在看效果:

image.png

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

image.png

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

image.png

补充,刚才添加菜单,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
​

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/14854.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注