Red Hat Training

A Red Hat training course is available for RHEL 8

第 16 章 设置远程无盘系统

以下小节概述了在网络环境中部署远程无盘系统所需的步骤。当您需要多个具有相同配置的客户端时,实施此解决方案非常有用。此外,这将节省客户端数量的硬盘驱动器成本。假设服务器安装了 Red Hat Enterprise Linux 8 操作系统。

图 16.1. 远程无盘系统设置图

远程无盘系统设置图

请注意,可以在单独的服务器上配置网关。

16.1. 为远程无盘系统准备环境

这个过程描述了为远程无盘系统准备环境。

远程无盘系统引导需要 tftp 服务(由 tftp-server提供)和 DHCP 服务(由 dhcp提供)。tftp 服务用于通过 PXE 加载器通过网络检索内核镜像和 initrd

先决条件

  • 安装以下软件包:

    • tftp-server
    • xinetd
    • dhcp-server
    • syslinux
  • 设置网络连接。

流程

  1. 安装 dracut-network 软件包:

    # yum install dracut-network
  2. 安装 dracut-network 软件包后,在 /etc/dracut.conf 中添加以下行:

    add_dracutmodules+="nfs"
重要

有些 RPM 软件包已经使用文件功能启动(如 setcapgetcap)。但是,NFS 目前不支持它们,因此尝试安装或更新任何使用文件功能的软件包都会失败。

此时,您的服务器已准备好继续远程无盘系统实施。

16.2. 为无盘客户端配置 tftp 服务

这个步骤描述了如何为无盘客户端配置 tftp 服务。

先决条件

配置 tftp

  1. 通过网络启用 PXE 引导:

    # systemctl enable --now tftp
  2. tftp 根目录(chroot)位于 /var/lib/tftpboot 中。将 /usr/share/syslinux/pxelinux.0 复制到 /var/lib/tftpboot/

    # cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
  3. /usr/share/syslinux/ldlinux.c32 复制到 /var/lib/tftpboot/

    # cp /usr/share/syslinux/ldlinux.c32 /var/lib/tftpboot/
  4. tftp 根目录中创建 pxelinux.cfg 目录:

    # mkdir -p /var/lib/tftpboot/pxelinux.cfg/
  5. 为无盘客户端配置 tftp 后,请相应地配置 DHCP、NFS 和导出的文件系统。

16.3. 为无盘客户端配置 DHCP 服务器

这个步骤描述了如何为无盘系统配置 DHCP。

先决条件

流程

  1. 通过在 /etc/dhcp/dhcpd.conf 中添加以下配置来设置 DHCP 服务器并启用 PXE 引导:

    allow booting;
    allow bootp;
    subnet 192.168.205.0 netmask 255.255.255.0 {
      pool
      {
        range 192.168.205.10 192.168.205.25;
      }
    
      option subnet-mask 255.255.255.0;
      option routers 192.168.205.1;
    }
    class "pxeclients" {
       match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
       next-server server-ip;
       filename "pxelinux.0";
    }

    这个配置不会通过 UEFI 引导。要为 UEFI 执行安装,请按照本文档中的步骤: 为基于 UEFI 的客户端配置 TFTP 服务器。另外,请注意 /etc/dhcp/dhcpd.conf 是一个示例文件。

    注意

    libvirt 虚拟机用作无盘客户端时,libvirt 提供 DHCP 服务,并且不使用独立 DHCP 服务器。在这种情况下,必须使用 libvirt 网络配置 virsh net-edit 中的 bootp file='filename' 选项启用网络引导。

  2. 输入以下命令启用 dhcpd.service:

    # systemctl enable --now dhcpd.service

16.4. 为无盘客户端配置导出的文件系统

这个步骤描述了如何为无盘客户端配置导出的文件系统。

先决条件

流程

  1. 将 NFS 服务器配置为导出根目录,方法是将其添加到 /etc/exports 中。具体步骤请查看 NFS 服务器配置
  2. 要完全使用无盘客户机,根目录应该包含完整的 Red Hat Enterprise Linux。您可以安装新的基础系统或克隆现有安装:

    • 要将 Red Hat Enterprise Linux 安装到导出位置,请使用带 --installroot 选项的 yum 工具:

      # yum install @Base kernel dracut-network nfs-utils \
            --installroot=exported-root-directory --releasever=/
    • 要与正在运行的系统同步,请使用 rsync 实用程序:

      # rsync -a -e ssh --exclude='/proc/' --exclude='/sys/' \
             example.com:/  exported-root-directory
      • 使用正在运行的系统的主机名替换 example.com,以便通过 rsync 实用程序同步。
      • 使用导出的文件系统的路径替换 exported-root-directory

        请注意,对于此选项,您必须有一个单独的现有运行系统,系统将通过上述命令克隆到服务器。

导出的文件系统仍然需要进一步配置,然后才能被无盘客户端使用。要做到这一点,请执行以下步骤:

配置文件系统

  1. 选择无盘客户端应使用(vmlinuz-kernel-version)的内核,并将其复制到 tftp 引导目录中:

    # cp /exported-root-directory/boot/vmlinuz-kernel-version /var/lib/tftpboot/
  2. 创建带有 NFS 支持的 initrd (即 initramfs-kernel-version.img):

    # dracut --add nfs initramfs-kernel-version.img kernel-version
  3. 使用以下命令将 initrd 的文件权限改为 644:

    # chmod 644 /exported-root-directory/boot/initramfs-<kernel-version>.img
    警告

    如果您不更改 initrd 的文件权限,pxelinux.0 引导装载程序将失败,并显示 "file not found" 错误。

  4. 将生成的 initramfs-kernel-version.img 复制到 tftp 引导目录中:

    # cp /exported-root-directory/boot/initramfs-kernel-version.img /var/lib/tftpboot/
  5. 编辑默认引导配置,使用 /var/lib/tftpboot/ 目录中的 initrd 和内核。此配置应该指示无盘客户端的 root 以读写模式挂载导出的文件系统(/exported-root-directory)。在 /var/lib/tftpboot/pxelinux.cfg/default 文件中添加以下配置:

    default rhel8
    
    label rhel8
      kernel vmlinuz-kernel-version
      append initrd=initramfs-kernel-version.img root=nfs:server-ip:/exported-root-directory rw

    server-ip 替换为主机的 tftp 和 DHCP 服务所在主机的 IP 地址。

  6. 另外,您可以使用 /var/lib/tftpboot/pxelinux.cfg/default 文件中的以下配置以只读格式挂载系统

    default rhel8
    
    label rhel8
      kernel vmlinuz-kernel-version
      append initrd=initramfs-kernel-version.img root=nfs:server-ip:/exported-root-directory ro
  7. 重启 NFS 服务器。

NFS 共享现在可以导出到无盘客户端。这些客户端可通过 PXE 通过网络引导。

16.5. 重新配置远程无盘系统

在某些情况下您需要重新配置该系统。以下步骤演示了如何更改用户的密码、如何在系统中安装软件以及如何将系统分割为只读模式的 /usr 以及处于读写模式的 /var

先决条件

  • no_root_squash 选项在导出的文件系统中启用。

流程

  1. 要更改用户密码,请按照以下步骤执行:

    • 将命令行改为 /exported/root/directory:

      # chroot /exported/root/directory /bin/bash
    • 更改您想要的用户的密码:

      # passwd <username>

      使用您要更改密码的实际用户替换 <username>

    • 退出命令行:

      # exit
  2. 要将软件安装到远程无盘系统中,请使用以下命令:

    # yum install <package> --installroot=/exported/root/directory --releasever=/ --config /etc/dnf/dnf.conf --setopt=reposdir=/etc/yum.repos.d/

    用要安装的实际软件包替换 <package>

  3. 要将远程无盘系统分成 /usr/var,您必须配置两个独立的导出。详情请阅读 NFS 服务器配置 文档。

16.6. 加载远程无盘系统的最常见的问题

下面的部分描述了在无盘客户端中加载远程无盘系统期间的问题,并显示了这些问题可能的解决方案。

16.6.1. 客户端无法获得 IP 地址

要排除这个问题,请执行以下操作:

  1. 检查是否在服务器中启用了 DHCP 服务。

    • 检查 dhcp.service 是否在运行:

      # systemctl status dhcpd.service
    • 如果 dhcp.service 不活跃,您必须启用并启动它:

      # systemctl enable dhcpd.service
      # systemctl start dhcpd.service

      重启无磁盘客户端。

  2. 如果问题仍然存在,请检查服务器上的 DHCP 配置文件 /etc/dhcp/dhcpd.conf。更多信息请参阅 第 16.3 节 “为无盘客户端配置 DHCP 服务器”
  3. 检查防火墙端口是否已打开。

    • 检查 tftp.service 是否在活跃服务中列出:

      # firewall-cmd --get-active-zones
      # firewall-cmd --info-zone=public
    • 如果 tftp.service 没有在活跃的服务中列出,将其添加到列表中:

      # firewall-cmd --add-service=tftp
    • 检查 nfs.service 是否在活跃服务中列出:

      # firewall-cmd --get-active-zones
      # firewall-cmd --info-zone=public
    • 如果 nfs.service 没有在活跃的服务中列出,将其添加到列表中:

      # firewall-cmd --add-service=nfs

16.6.2. 在引导远程无盘系统的过程中这些文件不可用

要排除这个问题,请执行以下操作:

  1. 检查这个文件是否就位。服务器 /var/lib/tftpboot/ 中的位置。
  2. 如果这个文件存在,请检查它的权限:

    # chmod 644 pxelinux.0
  3. 检查防火墙端口是否已打开。

16.6.3. 在载入 kernel/initrd 后系统引导失败

要排除这个问题,请执行以下操作:

  1. 检查是否在服务器中启用了 NFS 服务。

    • 检查 nfs.service 是否在运行:

      # systemctl status nfs.service
    • 如果 nfs.service 不活跃,您必须启用并启动它:

      # systemctl enable nfs.service
      # systemctl start nfs.service
  2. 检查 pxelinux.cfg 中的参数是否正确。如需了解更多详细信息,请参阅 第 16.4 节 “为无盘客户端配置导出的文件系统”
  3. 检查防火墙端口是否已打开。