Linux网络——PXE网络批量装机

2,487 阅读8分钟

本章结构:

  • 部署PXE远程安装服务
    • 搭建PXE远程安装服务器
    • 验证PXE网络安装
  • 实现Kickstart无人值守安装
    • 准备安装应答文件
    • 实现批量自动装机

一、 系统安装

1. 系统装机的三种引导方式

  • 硬盘
  • 光驱 (u盘)
  • 网络启动 pxe

2. 系统安装过程

  • 加载 boot loader
  • 加载启动安装菜单
  • 加载内核和initrd系统
  • 加载根系统
  • 运行anaconda的安装向导

3. Linux安装光盘的安装相关文件

在系统光盘的isolinux目录下有和安装相关的文件: isolinux.png

  • boot.cat: 相当于grub的第一阶段
  • initrd.img:ramfs文件(精简版的linux系统,文件系统驱动等)
  • isolinux.bin:光盘引导程序,在mkisofs的选项中需要明确给出文件路径,这个文件属于SYSLINUX项目
  • isolinux.cfg:启动菜单的配置文件,当光盘启动后(即运行isolinux.bin),会自动去找isolinux.cfg文件
  • memtest:内存检测程序
  • splash.png:光盘启动菜单界面的背景图
  • vesamenu.c32:是光盘启动后的启动菜单图形界面,也属于SYSLINUX项目,menu.c32提供纯文本的菜单
  • vmlinuz:是内核映像

二、 PXE 概述

PXE (Preboot eXecution Environment)预启动执行环境。是由Inter公司开发的网络引导技术,工作在Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或整个操作系统来安装。

PXE提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

PXE是通过网卡引导启动。

1. PXE服务的优点

  • 规模化:同时装配多台服务器,无需每一台单独安装操作系统;
  • 自动化:实现服务器的自动安装及自动配置各种服务;
  • 远程实现:不需要光盘、U盘等安装介质,方便快捷的同时又可以保障服务器安全。

2. PXE装机需要的四大文件

  • pxelinux.0:引导程序。(来自syslinux程序)
  • pxelinux.cfg/default :引导程序的配置文件。(位于 /var/lib/tftpboot/ 下,需要手写,可参考光盘 isolinux 目录下的 isolinux.cfg 文件)
  • vmlinuz:内核文件。(从光盘中获取,位于 isolinux 目录下)
  • initrd.img: 系统启动镜像文件。(从光盘中获取,位于 isolinux 目录下)

3. PXE实现过程讲解

  1. 客户机的网卡查找相关的dhcp服务器(获取地址和时间)。
  2. DHCP服务器给客户机分配IP地址和引导程序(boot loader)的地址 ,同时通过offer报文把TFTP服务器的地址发给客户机。
  3. TFTP服务器把引导文件(pxelinux.0)传给客户机。
  4. 客户机将引导程序加载到内存中来。
  5. 引导程序去TFTP服务器中查找配置文件,服务器将配置文件传给客户机。(配置文件中指定客户机使用ftp方式连接服务器获取系统镜像文件)
  6. 服务端安装并启动vsftpd服务,客户机使用ftp服务获取系统镜像文件。
PXE实现过程.png

三、PXE搭建过程中服务详解

PXE 远程安装服务器集成了 CentOS 7 安装源、TFTP 服务、DHCP 服务,能够向客户机裸机发送 PXE 引导程序、Linux 内核、启动菜单等数据,以及提供安装文件。

网卡自带DHCP服务和TFTP服务。

1. DHCP服务

用于自动分配IP地址、子网掩码、默认网关、DNS服务器等网络参数给启动的客户端计算机。在PXE场景下,DHCP服务器还会提供一个特殊选项,其中包含TFTP服务器的IP地址以及引导文件名,这样客户端就知道去哪里下载引导程序。

2. TFTP服务

TFTP(简单文件传输协议),是一种基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于小型文件传输的应用场合。TFTP服务默认由xinetd服务进行管理,使用UDP69端口。

TFTP服务一般只在装机这种场景下使用,用于传输内核和引导文件。因为安全性不高。

PXE客户端根据DHCP获取到的信息,通过TFTP从指定的服务器下载预启动执行环境的引导程序(pxelinux.0)及后续的内核镜像、initrd等安装所需文件。

3. FTP服务 (vsftpd)

vsftpd的作用是提供FTP服务,用于在客户端和服务器之间传输文件。安装系统镜像文件获取方式。

4. syslinux

安装syslinux程序后,可获得 pxelinux.0 文件。

在PXE环境中,TFTP服务器上通常会提供一个由Syslinux提供的名为pxelinux.0的引导加载程序。当客户端通过PXE启动时,会下载这个文件并执行。

四、 PXE网络装机操作过程

1. 配置

实验环境:

服务器内网IP地址:172.16.235.150

DHCP、TFTP、FTP服务全都搭建在这一台服务器上。

实验步骤:

  1. 安装四个软件包:dhcp、tftp-server、vsftpd、syslinux ;
[root@node3 ~]# yum install  dhcp  tftp-server  vsftpd  syslinux  -y  //安装4个软件包
  1. 配置DHCP服务器,分配IP地址,指明tftp服务器的地址;
[root@node3 ~]#  cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example   //配置文件模板在此目录下
#   see dhcpd.conf(5) man page
#
[root@node3 ~]#  cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf   //将配置文件模板复制到dhcp目录下
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
[root@node3 ~]#  cd /etc/dhcp
[root@node3 dhcp]#  ls
dhclient.d  dhclient-exit-hooks.d  dhcpd6.conf  dhcpd.conf  scripts
[root@node3 dhcp]#  vim dhcpd.conf       //编辑dhcp配置文件
  subnet 172.16.235.0 netmask 255.255.255.0 {    //设置子网IP、子网掩码
    range 172.16.235.60 172.16.35.90;            //设置地址池
    option routers 172.16.235.150;               //设置网关地址
    next-server 172.16.235.150;                  //指定tftp的服务器地址
    filename "pxelinux.0";                       //指定启动文件 
  }
[root@node3 dhcp]#  systemctl start dhcpd        //开启服务
dhcp配置.png
  1. 修改TFTP服务配置文件 /etc/xinetd.d/tftp ,将服务开启(默认是关闭状态);
[root@node3 dhcp]#  rpm -ql tftp-server       //查看所有文件列表
/etc/xinetd.d/tftp   //配置文件
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd
/usr/share/doc/tftp-server-5.2
/usr/share/doc/tftp-server-5.2/CHANGES
/usr/share/doc/tftp-server-5.2/README
/usr/share/doc/tftp-server-5.2/README.security
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot   //站点
[root@node3 dhcp]#  vim /etc/xinetd.d/tftp   //修改配置文件
  service tftp
  {
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no        //改为no,启动tftp服务
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
  }
TFTP配置文件.png
  1. 将光盘挂载到 /var/ftp 的子目录centos7下,并将四大文件中的2个(vmlinuzinitrd.img)先拷入 /var/lib/tftpboot/ 目录中;
[root@node3 dhcp]# cd /var/ftp
[root@node3 ftp]# mkdir centos7           //创建子目录centos7
[root@node3 ftp]# mount /dev/sr0 centos7  //将光盘挂载到/var/ftp/centos7/目录下
mount: /dev/sr0 写保护,将以只读方式挂载
[root@node3 ftp]# cd centos7
[root@node3 centos7]#  ls
CentOS_BuildTag  EFI  EULA  GPL  images  isolinux  LiveOS  Packages  repodata  RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Testing-7  TRANS.TBL
[root@node3 mnt]#  cd isolinux/
[root@node3 isolinux]#  ls                //查看isolinux内的文件
boot.cat  boot.msg  grub.conf  initrd.img  isolinux.bin  isolinux.cfg  memtest  splash.png  TRANS.TBL  vesamenu.c32  vmlinuz
[root@node3 isolinux]#  cp initrd.img vmlinuz /var/lib/tftpboot/  //把内核文件和虚拟文件系统拷贝到站点
[root@node3 isolinux]#  cd /var/lib/tftpboot/
[root@node3 tftpboot]#  ls
initrd.img  vmlinuz               //站点内有2个文件
  1. 查找 pxelinux.0 文件位置,并将其拷贝到 /var/lib/tftpboot/ 目录中;
[root@node3 tftpboot]#  rpm -ql syslinux |grep pxelinux.0   //查找pxelinux.0文件位置
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0      //找到此文件
[root@node3 tftpboot]#  cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/  //把pxelinux.0拷贝到站点
[root@node3 tftpboot]#  ls
initrd.img  pxelinux.0  vmlinuz   //站点内有3个文件
  1. /var/lib/tftpboot/ 目录下,创建子目录 pxelinux.cfg ,在pxelinux.cfg目录下编写引导程序的配置文件 default
[root@node3 tftpboot]#  mkdir pxelinux.cfg   //创建子目录pxelinux.cfg
[root@node3 tftpboot]#  ls
initrd.img  pxelinux.0  pxelinux.cfg  vmlinuz
[root@node3 tftpboot]#  cd pxelinux.cfg/ 
[root@node3 pxelinux.cfg]#  vim default     //编写default文件

pxelinux.0配置文件.png

配置文件内容:

default配置不回车.png
  1. 查看四大文件是否都已放入 /var/lib/tftpboot/ 中,开启服务。
[root@node3 pxelinux.cfg]#  cd ..           //切换到上级目录
[root@node3 tftpboot]#  tree                //以树形图查看目录下的文件
.
├── initrd.img
├── pxelinux.0
├── pxelinux.cfg
│   └── default
└── vmlinuz                                 //四大文件齐全

1 directory, 4 files
[root@node3 tftpboot]#  systemctl start dhcpd tftp vsftpd  //开启所有服务

2. 测试

创建空白虚拟机测试能否自动装机

  1. 新建虚拟机
1-1.png 1-2.png 1-3.png 1-4.png 1-5.png 1-6.png
  1. 编辑虚拟机设置,内存至少2G!
1-7.png
  1. 开启虚拟机
1-8.png

虚拟机自动获取IP地址、自动安装镜像文件系统

1-11不敲回车.png

出现图形化界面,实验成功。之后的参数需要手动设置。

1-10.png

五、kickstart无人值守安装

1. kickstart文件

kickstart文件主要包括三个部分:

  • 命令段
  • 程序包段
  • 脚本段

2. 实验

  1. 服务端安装kickstart软件;
[root@node3 ~]#  yum install system-config-kickstart -y   //安装kickstart软件
  1. 进入虚拟机,在应用程序中找到 Kickstart 工具进行配置;
2-1.png

基本配置:

2-2.png

安装方法:

2-3.png

引导文件:

2-4.png

分区:

2-5.png 2-6.png 2-7.png 2-8.png

禁用防火墙:

2-9.png

取消图形化安装:

2-10.png

安装后脚本:

2-useradd.png

保存配置:

2-11.png 2-12.png
  1. ks.cfg文件成功保存到/var/ftp目录下。需要再次修改/var/lib/tftpboot/pxelinux.cfg目录下的default文件,添加ks参数;
[root@node3 ~]#  cd /var/ftp   //查看ks.cfg文件是否成功保存到/var/ftp
[root@node3 ftp]#  ls
centos7  ks.cfg  pub           //成功保存
[root@node3 ftp]#  cd /var/lib/tftpboot/pxelinux.cfg/
[root@node3 pxelinux.cfg]#  ls
default
[root@node3 pxelinux.cfg]#  vim default  //编辑default文件,添加ks参数

[root@node3 pxelinux.cfg]#  systemctl start dhcpd tftp vsftpd   //开启服务
修改default.png
  1. 创建空白虚拟机测试,安装完毕后系统自动配置相应参数。

2实验成功.png