前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第十七章 PXE 和Kickstart

第十七章 PXE 和Kickstart

作者头像
晓天
发布2019-07-30 19:35:37
1.6K0
发布2019-07-30 19:35:37
举报

第十七章 PXE 和Kickstart

17.1 PXE简介

17.1.1 系统启动原理

我们在《Linux系统基础》一书中介绍过Linux的开机启动顺序,当时并未做太深入的介绍。现在,我们先来解释一下启动过程中内核和系统主程序的启动。

我们知道,Linux系统的启动程序都存放在/boot/目录下,先ls查看一下里面的文件:

图中我们可以看到有vmlinuz-3.10.0-693.el7.x86_64文件,这就是Linux的系统内核,还有initramfs-3.10.0-693.el7.x86_6.img文件,是系统的镜像文件,我们可以理解为是Linux系统的主程序。

而在开机时,引导程序grub会读取grub配置文件(/boot/grub2/grub.cfg),这个文件中记录了内核文件和镜像文件的存放位置。

vi /boot/grub2/grub.cfg 可见代码段:

上一本书中我们介绍过,这是开机grub界面中一个供选项的代码,里面set root=’hd0,msdos1’表示系统所有启动相关的文件都在第一块磁盘(hd0表示本机第一块磁盘)的第一个分区上(msdos1表示第一个分区)。PS:此配置文件中对于磁盘及分区的表示并未按照sda1 、sda2的方式表示,是一种独立的表示模式。

我们可以在系统中df -h 查看一下:

可见/boot目录挂载的就是sda1分区,与hd0,msdos1表示的意义是完全对应的。也就是由此处指定了开机启动文件的存放位置,然后配置文件中的linux16 行,指定了hd0,msdos1分区中内核文件的文件名,initrd16 行指定了镜像文件的文件名。由此可明确出grub配置文件帮助系统找到了系统内核和镜像,在开机时逐一启动起来。

综上,我们可以知道,其实grub的配置文件其实只是一个说明、指向性的文件,描述了启动中支持的文件系统类型、启动类型、分区表类型等等(有insmod行指定)及各启动文件所在的位置及文件名。

17.1.2 PXE功能

上一节介绍了Linux的启动原理,从中我们可以看出,系统启动时需要激活内核与镜像文件,且内核和镜像文件都存放在/boot目录下。

其实在系统安装时,也需要先启动内核和镜像,然后再启动安装程序。但是我们不一定必须用光盘或优盘安装系统,也可以通过网络安装系统。这就是PXE服务的功能。

我们可以搭建一台PXE服务器,并借助于文件服务(如:tftp、ftp等)把内核、镜像、安装程序共享出来。另一台裸机,开机时设置从网卡启动,直接访问文件服务器,获取内核、镜像等文件并激活,从而实现系统的引导,引导成功后再调用安装程序,开始安装Linux系统。

简单的说,PXE就是当一台裸机需要安装系统时,设置为从网卡启动,则会从其他主机上获取到内核、镜像、安装程序,从而正常安装系统。

17.2 TFTP服务

17.2.1 TFTP简介

我们知道在网络上实现文件传输可以使用FTP服务,其实在局域网内,还有一个TFTP服务,也可以实现文件传输。TFTP服务较为精简,配置简单,传输速度快,更适合于局域网内的文件传输业务。TFTP使用UDP 69端口提供通信,UDP连接不保证传输质量,所以适合于局域网内比较稳定,快速的网络环境。

TFTP服务使用被动进程管理机制。所谓被动服务,就是多个不常使用的服务,由于使用率低,如果每个服务都使用一个专用的守护进程(监听端口),日常又不大用到,那么这些服务将十分浪费内存与CPU资源。所以,这些服务我们可以使用一个总的进程做所有端口的监听,当有客户访问某个服务时,由该总进程捕获到,并调用起相应的服务进程。所以这些服务被称为被动服务。而负责所有端口监听的总进程,我们称为超级进程。在RHEL7.X之前版本,超级进程是xinetd(有时需要手动安装xinetd的软件包才可以使用);而在在RHEL7.X版本中,被动进程可以直接被systemd进程代理监控端口,无需安装xinetd软件包。PS:其实安装了xinetd后,systemd和xinetd都可以完成代理监控功能,后面会有详细介绍。

17.2.2 TFTP服务部署

TFTP服务安装十分简单,只需要安装tftp 和tftp-server两个包,如下:

yum -yinstall tftp tftp-server

安装完毕后,可以编辑配置文件,启动TFTP:

vi /etc/xinetd.d/tftp

里面改:

wait = no ---关闭延时启动

disable = no ---启动tftp,即让超级进程代理监听端口

另外,里面的server_args行指定了tftp默认共享出的目录(/var/lib/tftpboot/),供客户访问。

配置文件配置完毕后,即可启动服务了:

systemctl restart tftp.socket

systemctl enable tftp.socket

注:RHEL7.X中被动服务都以.socket为后缀,服务文件存放在/usr/lib/systemd/system/目录中。PS:常用服务(又称为主动服务)文件也存放在这个目录下,以.service为后缀。

systemctl status tftp.socket ---查看服务状态

lsof -i:69 ---查看端口是否正在被监听,可见是由systemd进程监听的

tips:

如果安装了xinetd软件包,在编辑完tftp配置文件后,可以不用启动tftp.socket服务,可以直接启动超级进程xinetd(启动命令:systemctl restart xinetd),则xinetd会自动查看/etc/xinetd.d/下的所有被动进程配置文件(其中包括tftp),然后统一代理监听。则TFTP服务也可以成功启动(lsof -i:69可见是由xinetd监听的)。

客户端也要安装tftp软件包后,即可访问tftp服务器验证了,格式如下:

tftp ip地址 ---连接tftp服务器

> put 文件名 ---上传文件

> get 文件名 ---下载文件

读者可以自行实验尝试一下文件的上传与下载。

17.3 PXE配置

17.3.1 PXE启动原理

首先,既然PXE是支持网络安装系统的,那么我们就要在客户机主板的bios界面设置为开机从网卡启动(现今主机一般都是支持网卡启动的)。虚拟机开机进入bios是在开机界面是点F2键,如下图最后一行提示文字所示:

进入bios后设置为网络启动,即网卡启动,结果如下图。PS:此界面下点击+、-号(要点shift 和=组合键才能出+的效果)可调整启动顺序:

注:图中只是虚拟机的bios界面,比较简陋。相对于主机或服务器,一般开机按delete键才能进入bios界面,再调整启动顺序,首选从网卡启动。

客户机设置网卡启动后,开机时会由网卡启动主机,那么网卡就需要有ip才能正常通信,所以此时,需要在网络中有一台DHCP服务器给网卡分配ip,并告知其TFTP服务器的地址。则客户机则会使用所获得的ip地址,访问TFTP服务器。

在TFTP服务器上,可以事先共享出Linux系统的引导程序(pxelinux.0)、系统内核(vmlinuz)及镜像文件(initr.img),关于内核和镜像文件的路径、系统安装程序位置等信息会有专用的配置文件(由pxelinux.cfg改编成的default)做指定。

所以,总结来说,就是客户机开机时由网卡启动,申请ip,由网络中的DHCP服务器为其分配ip并告知其TFTP服务器的地址,客户机获取到ip后访问TFTP服务器,获取到引导程序,运行引导程序后,再找TFTP服务器获取启动配置文件,根据该配置文件中的指定,获取系统内核及镜像,启动后引导系统安装程序。具体流程如下图:

17.3.2 PXE安装系统实例

理解了之前的理论原理,下面我们来具体演示一下配置步骤。本实验需要两台虚拟机,服务器IP地址192.168.10.10,具体配置如下:

mount /dev/sr0 /media ---先挂载上系统安装光盘

1、配置tftp服务

yum -y install tftp tftp-server

vi /etc/xinetd/tftp

改:wait =no

disable = no

systemctl restart tftp.socket

2、收集相关文件,使用TFTP共享出去

yum -y install syslinux ---安装引导程序软件包

cd /usr/share/syslinux/

cp pxelinux.0 /var/lib/tftpboot/ ---复制引导程序

cp chain.c32 menu.c32 memdisk mboot.c32 /var/lib/tftpboot/

---复制多个辅助文件

cd /media/isolinux ---进入光盘下的isolinux目录

cp vmlinuz /var/lib/tftpboot/ ---复制内核

cp initrd.img /var/lib/tftpboot/ ---复制镜像

cp vesamenu.c32 /var/lib/tftpboot/ ---复制辅助文件

mkdir /var/lib/tftpboot/pxelinux.cfg

cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

---复制启动配置文件

3、配置启动配置文件

vi /var/lib/tftpboot/pxelinux.cfg/default

注:该配置文件中设置的是客户机开机时显示的引导菜单界面,里面可以手动配置供选的菜单及很多辅助设置(如显示的背景图片、文字颜色等)。其中label开头的段落表示一个供选项及其执行的操作。一般此文件中我们可以把原有的label段落全部删除,然后手动编写自定义的菜单项,写入案例如下:

label linux ---为供选项设置一个标签

menulabel install CentOS 7 ---menu label后设定供选项的显示文字

kernel vmlinuz ---指定获取Linux内核

append initrd=initrd.img inst.repo=ftp://192.168.10.10/cdrom

---指定,获取系统启动镜像,并指定安装源的FTP路径

4、配置DHCP服务

yum -y install dhcp

vi /etc/dhcp/dhcpd.conf ---写入

subnet 192.168.10.0 netmask 255.255.255.0

{

range 192.168.10.100 192.168.10.200;

filename "pxelinux.0"; ---指定引导程序文件名

next-server 192.168.10.10; ---指定tftp服务器地址

}

systemctl restart dhcpd

5、配置FTP服务发布系统安装程序

yum -y vsftpd

systemctl restart vsftpd

注:客户端以匿名用户身份访问FTP服务即可,所以无需配置

mkdir /var/ftp/cdrom

mount /dev/sr0 /var/ftp/cdrom ---挂载系统安装光盘到ftp目录下

注:此项设置对应第3步的配置文件中对于安装源路径的设置

OK,到此PXE服务器配置完毕。

然后可以使用客户机启动验证PXE引导并获取安装源。

tips:客户机虚拟机建议内存至少在2G以上,若是太小,容易无法正常启动安装程序,造成实验失败。

客户机启动时,观察启动过程,可见到开启后通过DHCP获取ip:

启动后会有显示菜单供选择,即上面步骤3中default文件中的设置:

选中后回车会见到正在获取内核、镜像的界面:

之后进入系统安装界面了。

17.4 kickstart 无人值守安装

17.4.1 kickstart简介

上节我们介绍了PXE启动、安装的配置过程,但是大家会发现,客户机启动成功进入安装界面后,仍需人为手动配置各安装项,那么能否让客户机自动安装系统,而不需要人为参与配置呢?kickstart就是完成此项功能的工具。

当然,CentOS安装过程中有很多需要人为做设置的项,我们可以通过kickstart工具,事先将安装过程中的各项配置保存到一个配置文件中,并将此文件共享出来,让客户机安装系统时自动获取到并执行。

17.4.2 kickstart配置

注意:配置kickstart时,yum源的标签设置(又称id设置,即[]中的标记)必须为development,否则,kickstart中指定软件包时会报下载失败,如下图:

另外,建议服务器端使用GUI图形界面,然后安装kickstart软件包

yum -y install system-config-kickstart

安装后,在“应用程序”菜单中选择“系统工具”=>kickstart,如下图:

点开后,就可以配置各安装细节了:

逐一配置其中各项,其中“安装方法”这一项需要指定为ftp服务器地址与目录,因为我们的安装光盘是通过vsftp服务发布出来的:

之后各项如下图:

注:软件包选择处可用,是因为上面提到的yum源标签设置为development。

其他各项都使用默认设置即可

配置完毕点击“文件”菜单,选择保存,指定保存路径与文件名。PS:这里我们保存到/root/下,文件名为ks.cfg

然后我们把这个ks.cfg文件复制到ftp目录下,以便共享出去。

cp /root/ks.cfg /var/ftp/

然后我们再次编辑/var/lib/tftpboot/pxelinux.cfg/default文件,写入自动安装的供选项:

vi /var/lib/tftpboot/pxelinux.cfg/default ---追加写入

label linux2

menu label install CentOS 7 AUTO

kernel vmlinuz

append initrd=initrd.img inst.repo=ftp://192.168.10.10/cdrom ks=ftp://192.168.10.10/ks.cfg ---指定ks.cfg文件的获取方式,PS:此处与append都是在一行内的

到此,PXE+kickstart自动化安装就部署好了,然后启动客户机,就会有两个供选项,选择下面一项就会自动化安装系统了:

tips:/var/lib/tftpboot/pxelinux.cfg/default文件中的第一行默认是default vesamenu.c32,其实是指开机自动运行 /var/lib/tftpboot/目录下的vesamenu.c32文件,以显示上图的选择界面,我们可以ls /var/lib/tftpboot/ 查看得到:

其实,如果我们想开机时直接进入kickstart自动安装,可以把/var/lib/tftpboot/pxelinux.cfg/default文件中第一行的default改为:default linux2,即设置为供选项的label标签,如下图:

这样,客户机开机后就不会有选择界面了,会直接进入linux2的启动设置。

另外,本实验中我们是以VSFTP服务共享出的安装源,其实,我们也可以使用httpd服务,将光盘安装源及ks.cfg文件共享出来,让客户机使用,只需要在/var/lib/tftpboot/pxelinux.cfg/default文件中设置源为http的url即可。具体操作过程读者应该可以自行配置完成。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 教主小筑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档