简介

1、什么是PXE

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的,基于Client/Server模式的一种技术,其核心功能是让客户端通过网络从远端服务器下载启动镜像,并由此支持通过网络启动操作系统,从而实现网络启动。在启动过程中,客户端要求服务器分配IP地址,再用TFTPtrivial file transfer protocol,简单文件传输协议)或MTFTP(multicast trivial file transfer protocol,组播简单文件传输协议)协议下载一个启动镜像到本机内存中执行,由这个启动文件完成客户端的基本软件设置,从而引导预先放置在服务器中的操作系统。

严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(Network Interface CardNIC,网络接口卡),即网卡中必须要有 PXE ClientPXE client集成在网卡ROM中,当计算机引导时,BIOSPXE client调入内存执行。然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。

部署流程为:客户端(无操作系统的裸机)首先需要在BIOS中设置通过网络启动,当客户端启动后,就会通过发送广播包的形式寻找DHCP服务器,如果找到DHCP服务器后,即可向该服务器申请包括IP地址在内的网络参数,并通过DHCP获得TFTP 服务器的位置。此外,在 PXE Client ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP 服务器上下载所需的启动文件到本机内存中运行,最终实现无盘启动的功能。如下为工作示意图:

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统

PXE组件所需服务:

    DHCP服务:提供客户端网络参数与TFTP的位置,以及boot loader的文件

    TFTP服务:提供引导程序下载

    NFS:提供PXE系统安装源

客户机应具备的条件:

    网卡ROM必须支持PXE协议

    主板支持网络启动

    PXE技术只能实现从网络启动,读取安装程序进入安装界面后,剩余的步骤如语言设置、系统管理员密码、分区设置等还需要手动配置,至此,我们仅可实现无光盘网络启动,若要实现无人值守自动安装,还需要一种所谓的kickstart的技术。

2、什么是Kickstart

    Kickstart是一种无人值守自动部署安装操作系统的方式。这种技术的核心是自动应答文件(kickstart文件),即将本来在安装过程中需要手动配置的语言、密码、网络等各种参数,通过读取自动应答文件实现自动设置。也就是说,将传统的安装方式中对操作系统的手中设置事先写入自动应答文件,开始安装系统时,为安装程序指定自动应答文件的位置,最终实现自动安装及部署操作系统。

PXE+Kickstart 无人值守安装操作系统完整过程如下:

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_02

Kickstart文件可通过如下三种方式生成:

    1】手动编写(需要一个文本编辑器,如vim)

    2】通过system-config-kickstart图形工具

    3】通过红帽的安装程序anaconda自动生成

以下过程主要通过system-config-kickstart图形工具进行生成自动应答文件。

二、自动安装案例

1、环境介绍

    实际生产环境,一般是将DHCP+TFTP+NFS/FTP/HTTP(任选一种安装源)三种服务部署到一台服务器上,这里实验环境,分别安装到三台服务器,环境如下:

    安装工具:kickstart + DHCP + NFS + TFTP

    操作系统:CentOS Linux release 7.3.1611 (Core)

    光盘镜像:CentOS-7-x86_64-DVD-1611.iso

    Workstaion网络:桥接模式

    DHCP服务器网卡地址:192.168.0.100/24

    TFTP服务器网卡地址:192.168.0.110/24

    NFS服务器网卡地址:192.168.0.120/24

 

2、三台服务器准备工作

服务器禁用SElinux和防火墙

[root@bogon ~]# cat /etc/centos-release

CentOS Linux release 7.3.1611 (Core)

[root@kickstart ~]# setenforce 0

[root@bogon ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/sysconfig/selinux

[root@bogon ~]# egrep -v "^$|^#" /etc/sysconfig/selinux

[root@kickstart ~]# getenforce

或者

[root@bogon ~]# sestatus 

[root@bogon ~]# systemctl stop firewalld

[root@bogon ~]# systemctl disable firewalld

一)部署DHCP

1、安装dhcp服务端程序

[root@bogon ~]# yum -y install dhcp

2、修改dhcpd配置文件

[root@bogon ~]# \cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

用 \cp 执行cp命令时不走alias别名设置。

[root@bogon ~]# vim /etc/dhcp/dhcpd.conf

从配置文件47行开始修改成如下信息:

# A slightly different configuration for an internal subnet.

subnet 192.168.0.0 netmask 255.255.255.0 {  //指定为 192.168.0.0网段分配动态IP地址

  range 192.168.0.140 192.168.0.177;   //配置dhcp服务器为客户端分配的租用地址范围

  option domain-name-servers 8.8.8.8; //为客户端分配的DNS地址

  option routers 192.168.0.1;  为客户端分配的网关地址

  default-lease-time 600;   //默认租约时间

  max-lease-time 7200;   //最大租约时间

  next-server 192.168.0.123;  // tftp服务器地址

  filename "pxelinux.0";   //tftp服务器根目录下的文件名

}

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_03

3、启动DHCP服务

[root@bogon ~]# systemctl start dhcpd

[root@bogon ~]# systemctl enable dhcpd

二)部署TFTP

1、安装TFTP服务端程序

[root@localhost ~]# yum -y install tftp-server xinetd

2、修改TFTP服务的配置文件

[root@localhost ~]# vim /etc/xinetd.d/tftp

编辑配置文件/etc/xinetd.d/tftp 内容如下

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_04

    在TFTP配置文件/etc/xinetd.d/tftp中,disable默认值由yes改为no,表示该服务由默认的禁用状态变为启动该服务。另外,该配置文件中server_args选项定义了共享文件放置的目录(TFTP的根目录),路径为:/var/lib/tftpboot。

3、将客户端所需要的启动文件复制到TFTP服务器

    一般从本地来引导系统,需要grub引导加载器程序。如果要使用PXE的开机引导的话,需要使用CentOS提供的syslinux包。里面包含引导程序文件pxelinux.0 ,syslinux是一个功能强大的引导加载程序,而且兼容各种介质。可以说SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。所以,需要安装syslinux软件包。

[root@localhost ~]# yum install -y syslinux

复制pxelinux.0文件至TFTP的根目录/var/lib/tftpboot/文件夹中

[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

将提供图形化菜单功能文件拷贝到TFTP服务根目录下

[root@localhost~]# cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/

    如果没有menu.c32或vesamenu.c32时,菜单会以纯文字模式一行一行显示。如果使用menu.c32或vesamenu.c32,就会有类似反白效果出现,此时可以使用上下键来选择选项,而不需要看着屏幕去输入数字键来选择开机选项。经过测试,使用vesamenu.c32比menu.c32更加好看些。

4、将boot loader和内核等文件拷贝到TFTP服务器,boot loader相关的配置文件在光盘中,首先挂载光盘

[root@bogon ~]# mount /dev/cdrom /media/cdrom/

在TFTP共享目录中新建pxelinux.cfg目录

[root@bogon ~]# mkdir /var/lib/tftpboot/pxelinux.cfg  

导入配置文件到pxelinux.cfg目录

[root@localhost~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

将窗口提示信息文件boot.msg和窗口背景图片splash.png拷贝到TFTP服务根目录下

[root@localhost~]# cp /media/cdrom/isolinux/{boot.msg,splash.png} /var/lib/tftpboot/

从光盘中复制启动镜像文件和启动配置文件至TFTP共享目录。

[root@localhost~]# cp /media/cdrom/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/

[root@bogon ~]# ll /var/lib/tftpboot/

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_05

5、修改引导菜单文件

[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default

首先修改菜单等待时间,在第2行

timeout 60  //菜单显示等待时间,单位为1/10秒,默认等待60秒,将其改为6秒。

下一步修改引导菜单,在label linux下添加menu default ,表示默认的光标停留在此label上,直接安装系统即可

再将label check下menu default(原68行)删除,表示不用检查光盘并安装

效果如下:

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_06

    从上面配置信息中可以看出,以label开始名称为Linux的常规引导方式,menu label指定引导菜单的名称,menu后面的default指定为默认引导菜单,kernel指定的是系统内核文件,在上面步骤中,已经从光盘将vmlinuz文件复制到TFTP服务的共享目录下。若没有ks参数,可以实现无光盘启动,后面安装步骤需要手动进行,设置ks参数可以指定自动应答文件的位置,从而实现无人值守自动安装部署操作系统。

6、启动TFTP服务,并设置为开机启动

[root@bogon ~]# systemctl start xinetd

[root@bogon ~]# systemctl enable xinetd

[root@localhost ~]# systemctl enable tftp   //可选

因为tftp服务是属于简单的文件共享服务,由超级服务xinetd进行管理的,所以通过启动xinetd来启动tftp服务。

三)部署NFS

    NFS是network file system的简写,即网络文件系统。它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。

1、使用NFS方式提供安装文件,首先安装软件

[root@bogon ~]# yum install nfs-utils -y   //会连同rpcbind依赖包一起安装。

2、挂载光盘

[root@bogon ~]# mount /dev/cdrom /media/cdrom

3、NFS服务配置

[root@bogon ~]# vim /etc/exports

添加信息:

/media/cdrom/ 192.168.0.0/24(ro)

/ks/ks.cfg 192.168.0.0/24(ro)

    /etc/exports文件默认内容为空,里面每行指定一个输出的文件系统和哪些机器可以访问该文件系统。在指定机器访问权限的同时,访问选项开关也可以被指定。在上面的内容中,共享目录为/media/cdrom/,后面的IP地址表示仅192.168.0.0/24网段可以访问该共享目录,ro表示客户端访问的权限为只读(read only)。

    这里使用它作为centos系统文件的共享服务平台,当客户端从网络启动正式进入安装界面后,还需要读取centos光盘中的系统文件,以完成最后的安装。

4、启动NFS服务

[root@bogon ~]# systemctl start nfs

[root@bogon ~]# systemctl enable nfs

5、在客户端进行查看服务端挂载情况

[root@bogon ~]# showmount -e 192.168.0.120

在客户端将服务端共享的目录挂载到本地

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_07

6、在NFS服务器上安装自动应答文件生产工具

    生成kickstart文件时,需要安装通过yum -y install system-config-kickst 安装此软件包,安装的软件包之前,首先需要repo文件中第一行写成[development],括号中填写development,填写其他内容会导致后面system-config-kickstart命令生成kickstart文件时无法选择软件包。如下图:

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_08

修改yum源即可,如下:

[root@bogon ~]# cat /etc/yum.repos.d/local.repo

[development]     //一定叫这个名称,否则报软件包选择禁止的错误

name=local repo centos 7.3 on /media/cdrom

baseurl=file:///media/cdrom

gpgcheck=0

7、安装创建kickstart文件的图形工具

[root@bogon ~]# yum -y install system-config-kickstart

8、执行system-config-kickstart命令进入kickstart配置程序

[root@bogon ~]# system-config-kickstart

    使用xshell软件远程连接NFS服务器时,选择连接中ssh的隧道选项,一定勾选转发X11连接到xmanager选项,同时要在真实客户端电脑中安装xmanager软件。

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_09

1】基本配置选项如下:

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_10

2】安装方法选择全新安装和NFS方式

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_11

3】引导装载程序选项

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_12

4】分区信息

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_13

5】网络配置

    网络配置选项可以现在配置也可以安装完系统后配置,现在配置的话,最好不要选择DHCP动态获取IP,不然下次远程连接系统指不定换成什么IP了。这里选择配置静态IP,如下

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_14

6】验证选项保持默认即可

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_15

7】防火墙配置

实际配置设备时,最好启动selinux安全机制和防火墙,并勾选需要的服务,这里实验就禁用了。

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_16

】显示配置

安装图形环境,可不勾选,不是安装桌面。

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_17

9】软件选择

根据需要勾选需要安装的软件包。

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_18

10】安装后脚本

预安装脚本选项,在安装系统前需要执行的脚本或命令很少,保持默认即可。安装后脚本可以添加一些系统完成安装后要执行的命令。

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_19

最后点击文件选择保存,文件名称随意,后缀名称必须为.cfg,选择好保存位置,提供给客户端访问。

安装后:

cat <<EOF> /etc/yum.repos.d/local.repo

[local_repo]

name=local repo centos 7.3 on /media/cdrom

baseurl=file:///media/cdrom

gpgcheck=0

EOF

rm -f /etc/yum.repos.d/{CentOS-Debuginfo.repo,CentOS-Vault.repo,CentOS-CR.repo,CentOS-fasttrack.repo,CentOS-Sources.repo,CentOS-Media.repo}

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

echo "set nu" > /root/.vimrc

ping -c 4 www.baidu.com > /root/ping.txt

yum -y install wget lrzsz vim

保存后使用命令检查语法是否正确

[root@bogon ~]# ksvalidator /ks/ks.cfg

9、重启NFS服务

[root@bogon ~]# systemctl restart nfs

四)在裸机中测试

1、引导菜单有效果,

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_20

2、安装过程

DHCP+TFTP+NFS+kickstart分布式无人值守自动安装系统_pxe 自动安装系统_21

最后,若在图形界面安装,裸机客户端内存最好2G左右,文本安装则1G左后!