PXE网络批量装机与kickstart无人值守安装

993 阅读7分钟

一、关于pxe

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

PXE是通过网卡引导启动。

1、PXE服务优点

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

2、搭建PXE网络体系所需条件

① 客户机

  • 客户机的网卡要支持PXE协议(集成BOOTROM芯片)。
  • 网卡自带DHCP服务和TFTP服务。
  • 主板支持网络引导。有一些需在BIOS设置中允许从 Network 或 LAN 启动即可。

② 服务端

  • 配置 DHCP 服务器 :为客户机自动分配地址、指定引导文件位置(指明TFTP服务器地址)。
  • 服务器要开启 TFTP 服务(简单文件传输协议):用来提供系统内核和引导镜像文件的下载。
  • 安装软件包syslinux :提供PXE引导程序。
  • 服务器提供FTP服务(或http) :提供安装源(例如镜像文件系统等)。

3、PXE装机需要的四大文件

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

说明initrd的作用:

  • initrd 的英文含义是 boot loader initialized RAM disk,即由引导程序初始化的RAM磁盘。initrd是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd与内核绑定在一起, 并作为内核引导过程的一部分进行加载。内核然后会将这个initrd文件作为其阶段引导过程的一部分来加载模块,这样才能在以后的引导过程中使用真正的文 件系统,并挂载实际的根文件系统。根文件系统可以存储在包括IDE、SCSI、USB在内的多种介质上,如果将这些设备的驱动都编译进内核,可以想象内核 会多么庞大、臃肿。所以可以把initrd看做是在启动过程中连接内核与根文件系统的一个桥梁。

4、PXE实现过程讲解

image.png

  • 客户机的网卡查找相关的dhcp服务器(获取地址和时间)。

  • DHCP服务器给客户机分配IP地址和引导程序(boot loader)的地址 ,同时通过offer报文把TFTP服务器的地址发给客户机。

  • TFTP服务器把引导文件(pxelinux.0)传给客户机。

  • 客户机将引导程序加载到内存中来。

  • 引导程序去TFTP服务器中查找配置文件,服务器将配置文件传给客户机。(配置文件中指定客户机使用ftp方式连接服务器获取系统镜像文件)

  • 服务端安装并启动vsftpd服务,客户机使用ftp服务获取系统镜像文件。

二、搭建过程中服务详解

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

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

1、DHCP服务

DHCP是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。

2、TFTP服务

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

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

  • 自带的站点:/var/lib/tftpboot

3、syslinux

syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间, 并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后, sysLinux启动盘就可以引导各种基于DOS的工具, 以及MS-DOS/Windows或者 任何其它操作系统。

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

4、vsftp:安装系统镜像文件获取方式

可以使用http、ftp等方式,ftp文件传输的一种,vsftpd是提供ftp服务的软件之一。

五、PXE网络装机操作过程

实验环境:

服务器内网IP地址:192.168.37.133。

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

简易流程:

  1. 分配给同一局域网内新加机器的地址(配置文件) dhcp 分配地址 指明tftp 服务器的地址
  2. tftp服务端开启 udp 配置 默认关闭
  3. 安装syslinux 取得 pxelinux.0 文件
  4. 安装vsftpd服务挂载软件安装源(mount /dev/sr0 /var/ftp/centos7)
  5. 将四大文件拷入 (/var/lib/tftpboot )
  • initrd.img 
  • pxelinux.0  (类似grub)
  • pxelinux.cfg/default (手写) 
  • vmlinuz

6.将服务开启,关闭防火墙,selinux

具体操作步骤:

1)安装tftp-server vsftpd syslinux dhcp四个软件

image.png

2)将配置文件模板复制到dhcp目录下

[root@localhost ~]# cat /etc/dhcp/dhcpd.conf  
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example  //配置文件在此目录下
#   see dhcpd.conf(5) man page
#
[root@localhost ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.37.0 netmask 255.255.255.0 {
  range 192.168.37.133 192.168.37.153;
  option routers 192.168.37.133;
  next-server 192.168.37.133; 
  filename "pxelinux.0";
}

[root@localhost ~]# 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@localhost ~]# vim /etc/xinetd.d/tftp

# default: off
# description: The tftp server serves files using the trivial file transfer \
#       protocol.  The tftp protocol is often used to boot diskless \
#       workstations, download configuration files to network-aware printers, \
#       and to start the installation process for some operating systems.
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no   //将yes改成no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4

[root@localhost ~]# rpm -ql syslinux |grep pxelinux.0  //寻找安装完成后找到该文件的地址 
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0   //地址

[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/      //拷贝到站点文件里

[root@localhost ~]# rpm -ql vsftpd      //寻找安装完成后找到该文件的地址
/var/ftp​   //找到地址
[root@localhost ~]# cd /var/ftp    //前往该文件夹
[root@localhost ftp]# mkdir centos7
[root@localhost ftp]# mount /dev/sr0 /var/ftp/centos7/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ftp]# cd /var/ftp/centos7/
[root@localhost centos7]# ls
CentOS_BuildTag  EULA  images    LiveOS    repodata              RPM-GPG-KEY-CentOS-Testing-7
EFI              GPL   isolinux  Packages  RPM-GPG-KEY-CentOS-7  TRANS.TBL
[root@localhost centos7]# cd images/
[root@localhost images]# ls
efiboot.img  pxeboot  TRANS.TBL
[root@localhost images]# cd pxeboot/
[root@localhost pxeboot]# ls
initrd.img  TRANS.TBL  vmlinuz
[root@localhost pxeboot]# cp initrd.img vmlinuz /var/lib/tftpboot/
[root@localhost pxeboot]# cd /var/lib/tftpboot/
[root@localhost tftpboot]# mkdir pxelinux.cfg
[root@localhost tftpboot]# cd pxelinux.cfg/

[root@localhost pxelinux.cfg]# vim default

default auto
prompt 1

label auto
        kernel vmlinuz
        append initrd=initrd.img method=ftp://192.168.37.133/centos7

label linux text
        kernel vmlinuz
        append text initrd =initrd.img method=ftp://192.168.37.133/centos7

label linux rescue
        kernel vmlinuzs
        append rescue initrd=initrd.img method=ftp://192.168.37.133./centos7

[root@localhost pxelinux.cfg]# systemctl stop firewalld.service
[root@localhost pxelinux.cfg]# setenforce 0
[root@localhost pxelinux.cfg]# systemctl start dhcpd
[root@localhost pxelinux.cfg]# systemctl start tftp
[root@localhost pxelinux.cfg]# systemctl start vsftpd

3)客户端,创建空白虚拟机测试能否自动装机

1、创建新的空白虚拟机

image.png

2、开启虚拟机:

虚拟机自动获取IP地址、自动安装镜像文件系统,最后出现图形化界面,之后的参数需要手动设置。

六、kickstart

1、服务端,yum install system-config-kickstart -y 安装kickstart软件

 [root@localhost yum.repos.d]# yum install system-config-kickstart -y

image.png

2、进入虚拟机,在应用程序中找到 Kickstart 工具进行配置

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

3、ks.cfg文件成功保存到/var/ftp目录下。需要再次修改/var/lib/tftpboot/pxelinux.cfg目录下的default文件,添加ks参数。

 [root@localhost ~]# ls /var/ftp     //查看/var/ftp 目录下的ks.cfg文件
 centos7  ks.cfg  pub
 [root@localhost ~]# cd /var/lib/tftpboot/pxelinux.cfg
 [root@localhost ~]# ls
 default
 [root@localhost ~]# vim default     //编辑default文件,添加ks参数
 default auto
 ​
 label auto
   kernel vmlinuz
   append initrd=initrd.img method=ftp://192.168.137.100/centos7 ks=ftp://192.168.137.101/ks.cfg

4、重新启动空白客户机,安装完毕后系统自动配置相应参数