从 RHEL 7 升级至 RHEL 8

Red Hat Enterprise Linux 8

把 Red Hat Enterprise Linux 7 原位(in-place)升级到 Red Hat Enterprise Linux 8

Red Hat Customer Content Services

摘要

本文档提供如何用 Leapp 程序将 Red Hat Enterprise Linux 7 原位升级到 Red Hat Enterprise Linux 8。在原位升级过程中,现有 RHEL 7 操作系统被 RHEL 8 替换。

使开源包含更多

红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息

对红帽文档提供反馈

我们感谢您对我们文档的反馈。让我们了解如何改进它。

通过 Jira 提交反馈(需要帐户)

  1. 登录到 Jira 网站。
  2. 单击顶部导航栏中的 Create
  3. Summary 字段中输入描述性标题。
  4. Description 字段中输入您对改进的建议。包括文档相关部分的链接。
  5. 点对话框底部的 Create

主要迁移术语

尽管以下与迁移相关的术语在软件业中常用,但这里的定义特定于 Red Hat Enterprise Linux (RHEL)。

Update(更新)

更新(有时称为软件补丁)是您正在运行的应用程序、操作系统或软件的一个补充。软件更新用于解决存在的问题或漏洞,以便提供更好的使用体验。在 RHEL 中,更新与次版本相关,例如,从 RHEL 8.1 更新到 8.2。

Upgrade(升级)

升级是使用一个新的版本替换当前运行的应用程序、操作系统或软件的版本。通常情况下,您需要首先根据红帽的指导对数据进行备份。升级 RHEL 时,有两个选项:

  • 原位升级(In-place upgrade):在原位升级过程中,您可以在不先删除旧版本的情况下将旧版本替换为新版本。安装的应用程序和实用程序,以及相关的配置和首选项都会融合到新版本中。
  • 全新安装(Clean install):干净安装会删除之前安装的操作系统、系统数据、配置和应用程序的所有数据,并安装最新版本的操作系统。如果您不需要之前的数据或应用程序,或者您要部署的新项目不依赖于以前的构建,则全新安装是一个理想的选择。

操作系统转换

转换是将操作系统从不同的 Linux 发行版转换为 Red Hat Enterprise Linux。通常情况下,您需要首先根据红帽的指导对数据进行备份。

Migration(迁移)

通常,迁移表示对平台(软件或硬件)进行更改。从 Windows 变为 Linux 是一种迁移.用户从使用一个笔记本电脑换为使用另外一个笔记本电脑,公司从使用一个服务器换为使用另一台服务器,都是迁移。但是,大多数迁移都涉及到升级,因此有时此术语可以互换使用。

  • 迁移到 RHEL:将现有操作系统转换到 RHEL
  • 跨 RHEL 迁移:从一个 RHEL 升级到另一个版本

第 1 章 支持的升级路径

原位升级会将系统上的 RHEL 7 操作系统(OS)替换为 RHEL 8 版本。

目前,可以执行从 RHEL 7 原位升级到以下目标 RHEL 8 次版本:

表 1.1. 支持的升级路径

架构和系统配置源操作系统版本目标操作系统版本支持结束

64 位 Intel、IBM POWER 8(little endian)和 64 位 IBM Z

RHEL 7.9

RHEL 8.6

2024 年 5 月 31 日(EUS)

RHEL 8.8

2025 年 5 月 31 日(EUS)

RHEL 8.9 (默认)

2024 年 5 月 31 日

带有 SAP HANA 的 RHEL

RHEL 7.9

RHEL 8.6

2024 年 5 月 31 日(EUS)

RHEL 8.8 (默认)

2025 年 5 月 31 日(EUS)

有关支持的升级路径的更多信息,请参阅 支持的 Red Hat Enterprise Linux 原位升级路径

第 2 章 计划升级

原位升级(in-place upgrade)是把系统升级到下一个主要 RHEL 版本的推荐并支持的方法。

在升级到 RHEL 8 前请考虑以下几点:

  • 操作系统 — 在以下情况下使用 Leapp 程序升级操作系统:

  • 应用程序 - 您可以使用 Leapp 迁移安装在系统上的应用程序。然而,在某些情况下,您必须创建 custom actors,它用来在升级过程中指定 Leapp 要执行的操作,例如: 重新配置应用程序或安装特定的硬件驱动程序。如需更多信息,请参阅处理自定义应用程序和第三方应用程序的迁移。请注意,红帽不支持自定义参与者。
  • 安全性 - 您应该在升级前评估这个方面,并在升级过程完成后采取其他步骤。请特别考虑以下几点:

    • 在升级前,定义您系统需要满足的安全标准,并了解 RHEL 8 中的安全变化
    • 在升级过程中,Leapp 会将 SELinux 的模式设置为 permissive。
    • Leapp 无法完全自动升级联邦信息处理标准(FIPS)模式的系统。如果您需要升级在 FIPS 模式运行的 RHEL 7 系统,您必须:

      重要

      为确保所有加密密钥都符合 FIPS 140-2 标准,请在 FIPS 模式下启动新安装,而不是对已部署的系统执行原位升级。只有在您公司的安全策略允许这个替代升级过程,且您可以确保在升级的系统上重新生成和重新评估所有加密密钥时,才执行以下步骤。。

      1. 在 RHEL 7 中 禁用 FIPS 模式
      2. 使用 Leapp 升级系统。您必须遵循与其它原位升级一样的预升级、升级和升级后的说明。
      3. 在 RHEL 8 中启用 FIPS 模式。详情请参阅 RHEL 8 安全强化文档中的将系统切换到 FIPS 模式
      4. 在您的系统中重新生成加密密钥。如需更多信息,请参阅 附录 C, RHEL 8 中加密密钥的位置
    • 升级完成后,重新评估并重新应用您的安全策略。有关应用升级过程中禁用的安全策略或 RHEL 8 中新引进的安全策略的详情,请参阅应用安全策略
  • 存储和文件系统 - 总是在升级前备份您的系统。例如,您可以使用 Relax-and-Recover (ReaR)工具LVM 快照RAID 拆分 或虚拟机快照。

    注意

    文件系统格式没有改变。因此,文件系统有与最初创建时相同的限制。

  • 高可用性 - 如果您使用高可用性附加组件,请按照 对 RHEL 高可用性或弹性存储集群应用软件升级的推荐的实践 知识库文章。
  • 停机时间 — 升级过程可能会需要几分钟到几小时。
  • Satellite - 如果您通过 Satellite 管理主机,您可以使用 Satellite Web UI 同时将多个主机从 RHEL 7 升级到 RHEL 8。如需更多信息,请参阅 将主机升级到下一个主 Red Hat Enterprise Linux 版本
  • SAP HANA - 如果您正在使用 SAP HANA,请遵循如何将 SAP 环境从 RHEL 7 原位升级到 RHEL 8。请注意,使用 SAP HANA 的 RHEL 的升级路径可能会有所不同。
  • RHEL for Real Time - 支持对实时系统的升级。
  • Red Hat OpenStack Platform 中的 Real Time for Network Functions Virtualization (NFV) - 支持对实时系统的升级。
  • 公有云 - 支持在带有 Red Hat Update Infrastructure (RHUI) 的 Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud Platform 中的 Pay-As-You-Go (PAYG) 实例进行原位升级。原位升级还支持在所有使用 Red Hat Subscription Manager (RHSM)进行 RHEL 订阅的公有云上的 Bring Your Own Subscription 实例。
  • 语言 - 无论语言配置如何,所有 Leapp 报告、日志和其他生成的文档均为英语。
  • 引导装载程序 - 在 RHEL 7 或 RHEL 8 中无法将引导装载程序从 BIOS 切换到 UEFI。如果您的 RHEL 7 系统使用 BIOS,而您希望 RHEL 8 系统使用 UEFI,请执行全新的 RHEL 8 安装,而不是原位升级。如需更多信息,请参阅 是否可以在预安装的 Red Hat Enterprise Linux 机器上将 BIOS 引导切换到 UEFI 引导?
  • Red Hat JBoss Enterprise Application Platform (EAP) - 升级到 RHEL 9 不支持 JBoss EAP。升级后,您必须手动在系统中安装和配置 JBoss EAP。如需更多信息,请参阅 使用 leapp 实用程序( 使用 leapp 实用程序)将 Jboss EAP 和 websphere 服务器与 Linux 原位升级
  • 已知的限制 - 目前已知的重要的 Leapp 限制包括:

    • 目前,对整个磁盘或者分区进行加密,或对文件系统加密还不能用于计划进行原位升级的系统中。
    • 不支持对使用以太网或 Infiniband 的基于网络的多路径和网络存储的升级。这包括使用 FCoE 的 SAN,以及从使用 FC 的 SAN 引导。请注意,支持使用 FC 的 SAN。
    • 目前,在使用 Red Hat Update Infrastructure 而不是 RHEL 订阅的 RHSM 的其余公有云(Huawei Cloud、Alibabawei Cloud)上的按需 PAYG 实例不支持原位升级。
    • 安装了任何 Ansible 产品,包括 Ansible Tower 的系统不支持原位升级。要在 RHEL 8 上使用 RHEL 7 Ansible Tower 安装,请参阅 如何将我的 Ansible Automation Platform 安装从一个环境迁移到另一个环境?知识库解决方案。

请参阅 已知问题

您可以使用 Red Hat Insights 确定您注册到 Insights 的哪些系统位于 RHEL 8 的升级路径中。要做到这一点,请进入到 Insights 中相应的 顾问建议,在 Actions 下拉菜单下启用建议,并检查 Affected systems 标题下的列表。请注意: Advisor 推荐只会考虑 RHEL 7 次要版本,它不会执行系统升级前评估。另请参阅 Advisor-service 建议概述

第 3 章 准备升级

要防止升级后出现问题,并确保您的系统已准备好升级到 RHEL 的下一个主要版本,请在升级前完成所有必要的准备步骤。

您必须在所有系统上执行 为升级准备 RHEL 7 系统 中所描述的准备步骤。另外,在注册到 Satellite 服务器的系统上,还必须执行 为升级准备 Satellite 注册系统 中描述的准备步骤

3.1. 为升级准备 RHEL 7 系统

这个流程描述了在使用 Leapp 工具执行原位升级到 RHEL 8 前必需执行的步骤。

如果您在升级过程中不计划使用 Red Hat Subscription Manager,请参阅在没有 Red Hat Subscription Manager 的情况下升级到 RHEL 8

先决条件

  • 系统满足规划升级中列出的条件。
  • 如果您之前从 RHEL 6 升级到 RHEL 7,则代表所有需要手动升级后的步骤。这包括手动迁移到 RHEL 7 机器上的 GRUB2 引导装载程序。如需更多信息,请参阅从 GRUB Legacy 升级到 GRUB 2

流程

  1. 可选: 使用 Leapp 知识库文章查看执行 RHEL 升级的最佳实践和建议
  2. 使用 Red Hat Subscription Manager 确保您的系统已被成功注册到 Red Hat Content Delivery Network (CDN)或 Red Hat Satellite。
  3. 如果您的系统已注册到 Satellite 服务器,请完成 为升级准备 Satellite 注册系统 中的步骤,以确保您的系统满足升级要求。

    重要

    如果您的系统已注册到 Satellite 服务器,则您必须为升级完成 为升级准备一个注册了 Satellite 的系统 中的步骤,然后才能继续此流程中的步骤,以防止问题的发生。

  4. 可选:卸载升级不需要的非系统操作系统文件系统,例如,仅包含与系统本身不相关的数据文件的文件系统,并从 /etc/fstab 文件中注释掉它们。这可减少升级过程所需的时间,并防止与升级期间未正确迁移的第三方应用程序相关的潜在问题。
  5. 使用 subscription-manager 验证系统是否已订阅:

    1. 如果您的系统使用启用了 Simple Content Access (SCA)的帐户注册了,请验证 Content Access Mode is set to Simple Content Access 消息是否出现:

      # subscription-manager status
      +-------------------------------------------+
         System Status Details
      +-------------------------------------------+
      Overall Status: Disabled
      Content Access Mode is set to Simple Content Access. This host has access to content, regardless of subscription status.
      System Purpose Status: Disabled
    2. 如果您的系统使用禁用了 SCA 的帐户注册了,请验证是否已附加了 Red Hat Linux Server 订阅,产品名称是否为 Server,其状态是否为 Subscribed

      # subscription-manager list --installed
      +-------------------------------------------+
          	  Installed Product Status
      +-------------------------------------------+
      Product Name:  	Red Hat Enterprise Linux Server
      Product ID:     69
      Version:        7.9
      Arch:           x86_64
      Status:         Subscribed
  6. 确定启用了适当的软件仓库。以下命令列出 64 位 Intel 架构的软件仓库 ; 有关其他架构请参阅 RHEL 7 软件仓库

    1. 启用 Base 软件仓库:

      # subscription-manager repos --enable rhel-7-server-rpms
    2. 启用提供 Leapp 及其依赖软件包的 Extras 软件仓库:

      # subscription-manager repos --enable rhel-7-server-extras-rpms
      注意

      另外,您还可以启用 Optional (也称为 CodeReady Linux Builder)或 Supplementary 存储库。有关存储库 ID 的更多信息,请参阅 RHEL 7 软件仓库中的 Optional 和 Supplementary 软件仓库 列表。有关这些软件仓库的内容的更多信息,请参阅 CodeReady Linux Builder 存储库Supplementary 存储库

  7. 设置 Red Hat Subscription Manager ,以使用最新的 RHEL 7 内容:

    # subscription-manager release --unset
  8. 可选:要使用自定义软件仓库,请参阅 配置自定义存储库 知识库文章。
  9. 如果您使用 yum-plugin-versionlock 插件把软件包锁定到特定版本,请运行以下命令来清除锁:

    # yum versionlock clear

    详情请查看 How to restrict yum to install or upgrade a package to a fixed specific package version?

  10. 如果您要在公有云上使用 Red Hat Update Infrastructure (RHUI) 升级,请启用所需的 RHUI 软件仓库并安装所需的 RHUI 软件包,以确保您的系统已准备好升级。

    1. 对于 AWS:

      # yum-config-manager --enable rhui-client-config-server-7
      # yum-config-manager --enable rhel-7-server-rhui-extras-rpms
      # yum -y install rh-amazon-rhui-client leapp-rhui-aws
    2. 对于 Microsoft Azure:

      # yum-config-manager --enable rhui-microsoft-azure-rhel7
      # yum -y install rhui-azure-rhel7
      # yum-config-manager --enable rhui-rhel-7-server-rhui-extras-rpms
      # yum -y install leapp-rhui-azure
      注意

      如果您将 Azure 虚拟机 (VM) 锁定到一个次发行版本,请删除版本锁定。如需更多信息,请参阅将 RHEL 7.x 虚拟机切回到非 EUS

    3. 对于 Google Cloud Platform,请遵循 Google Cloud Platform (GCP) 知识库文章。
  11. 如果您在 Docker 中管理容器,请通过 Podman 使用合适的容器镜像重新创建这些容器,然后附加任何使用的卷。如需更多信息,请参阅如何在从 Red Hat Enterprise Linux 7 迁移到 Red Hat Enterprise Linux 8 之前将 Docker 容器迁移到 Podman?
  12. 将所有软件包更新到最新的 RHEL 7 版本:

    # yum update
  13. 重启系统:

    # reboot
  14. 安装 Leapp

    # yum install leapp-upgrade

    请注意,您目前需要 leapp 软件包版本 0.16.0 或更高版本,leapp-repository 软件包版本 0.19.0 或更高版本,其包含 leapp-upgrade-el7toel8 RPM 软件包。

    注意

    如果您的系统无法访问互联网,请从红帽客户门户网站下载以下软件包

  15. leapp-upgrade-el7toel8 软件包的最新版本包含所有所需的数据文件。如果您使用旧版本替换了这些数据文件,请删除 /etc/leapp/files 目录中的所有 JSON 文件,并重新安装 leapp-upgrade-el7toel8 软件包,以确保您的数据文件是最新的。
  16. 临时禁用防病毒软件以防止升级失败。
  17. 确保任何配置管理系统都不会干扰原位升级过程:

  18. 请确定您的系统没有使用多于一个的、名称基于内核使用的前缀(eth)的网络接口卡(NIC)。如需了解如何在原位升级到 RHEL 8 前迁移到另外一个命名模式的更多信息,请参阅 How to perform an in-place upgrade to RHEL 8 when using kernel NIC names on RHEL 7
  19. 如果您要使用 ISO 镜像升级,请验证 ISO 镜像是否包含目标操作系统版本,如 RHEL 8.8,是否被保存到一个持久本地挂载点,以确保 Leapp 工具可以在升级过程中访问镜像。
  20. 确定您有完整的系统备份或虚拟机快照。请确定您可以按照您的环境中的标准灾难恢复步骤,把系统恢复到升级前的状态。您可以使用以下备份选项:

3.2. 为升级准备注册了 Satellite 的系统

此流程描述了为升级到 RHEL 8 准备已注册到 Satellite 的系统所需的步骤。

注意

如果您计划升级 Satellite 系统本身,请按照 使用 Leapp 将 Satellite 或 Capsule 升级到 Red Hat Enterprise Linux 8 In-Place 中所述的步骤。

重要

Satellite 系统上的用户必须完成此流程和 为升级准备 RHEL 7 系统 中所描述的步骤。

先决条件

  • 您有对 Satellite 服务器的管理特权。

流程

  1. 验证 Satellite 是否是完全支持或维护支持的版本。如需更多信息,请参阅 Red Hat Satellite 产品生命周期
  2. 将带有 RHEL 8 存储库的订阅清单导入到 Satellite 服务器。如需更多信息,请参阅 Red Hat Satellite 特定版本(例如 6.12 版本)的管理内容指南中的管理红帽订阅一章。
  3. 在 Satellite 服务器上启用所有所需的 RHEL 7 和 RHEL 8 存储库,并与 RHEL 7.9 和目标操作系统版本(如 RHEL 8.6)的最新更新同步。所需的软件仓库必须在内容视图中提供,并在关联的激活码中启用。

    注意

    对于 RHEL 8 存储库,启用每个存储库的目标操作系统版本,如 8.6。如果您只启用了存储库的 RHEL 8 版本,则原位升级被禁止。

    例如,对于没有延长更新支持(EUS)订阅的 Intel 构架,至少启用以下软件仓库:

    • Red Hat Enterprise Linux 7 Server (RPMs)

      rhel-7-server-rpms

      x86_64 7Server

    • Red Hat Enterprise Linux 7 Server - Extras (RPMs)

      rhel-7-server-extras-rpms

      x86_64

    • Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)

      rhel-8-for-x86_64-appstream-rpms

      x86_64 <target_os_version>

    • Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)

      rhel-8-for-x86_64-baseos-rpms

      x86_64 <target_os_version>

      target_os_version 替换为目标操作系统版本,如 8.6。

      有关其他构架,请参阅 RHEL 7 软件仓库RHEL 8 软件仓库

      如需更多信息,请参阅 Red Hat Satellite 特定版本(例如 版本 6.12)的 管理内容指南 中的 导入内容 一章。

  4. 将内容主机附加到包含所需的 RHEL 7 和 RHEL 8 软件仓库的内容视图。

    如需更多信息,请参阅 Red Hat Satellite 特定版本(例如 6.12 版本)的 管理内容指南 中的 管理内容视图 一章。

验证

  1. 验证正确的 RHEL 7 和 RHEL 8 存储库是否已添加到 Satellite 服务器上正确的内容视图中。

    1. 在 Satellite Web UI 中,导航到 Content > Lifecycle > Content Views,然后点击内容视图的名称。
    2. Repositories 选项卡,并验证存储库是否正确出现。

      注意

      您还可以使用以下命令验证存储库是否已添加到内容视图中:

      # hammer repository list --search 'content_label ~ rhel-7' --content-view <content_view_name> --organization <organization> --lifecycle-environment <lifecycle_environment>
      # hammer repository list --search 'content_label ~ rhel-8' --content-view <content_view_name> --organization <organization> --lifecycle-environment <lifecycle_environment>

      <content_view_name> 替换为内容视图的名称,将 <organization> 替换为机构,将 <lifecycle_environement> 替换为生命周期环境的名称。

  2. 验证与内容视图关联的激活码中是否启用了正确的 RHEL 8 存储库:

    1. 在 Satellite Web UI 中,导航到 Content > Lifecycle > Activation Keys,然后点击激活码的名称。
    2. 单击 Repository Sets 选项卡,验证所需存储库的状态是否为 Enabled
  3. 验证所有期望的 RHEL 7 存储库是否已在主机上启用。例如:

    # subscription-manager repos --list-enabled | grep "^Repo ID"
    Repo ID:   rhel-7-server-extras-rpms
    Repo ID:   rhel-7-server-rpm

第 4 章 查看升级前报告

要评估系统的可升级性,请使用 leapp preupgrade 命令启动预升级过程。在这个阶段中,Leapp 工具收集有关系统的数据,评估可升级性,并生成一个预升级报告。预升级报告总结了潜在的问题,并建议推荐的解决方案。本次报告还帮助您决定升级是否可行。

注意

预升级评估不会修改系统配置,但它消耗 /var/lib/leapp 目录中的不可忽略空间。在大多数情况下,预升级评估最多需要 4 GB 空间,但实际大小取决于您的系统配置。如果托管文件系统中没有足够的空间,则预升级报告可能无法显示分析的完整结果。要防止问题,请确定您的系统在 /var/lib/leapp 目录中有足够的空间,或者将目录移到专用分区,以便空间消耗不会影响系统的其他部分。

重要

始终查看整个预升级报告,即使报告中没有发现升级的阻碍因素。预升级报告包含在升级前要完成的建议操作,以确保升级的系统工作正常。

如果要执行全新的 RHEL 8 系统安装而不是原位升级过程,审核预升级报告也很有用。

您可以使用以下方法之一评估预升级阶段中的可升级性:

  • 查看生成的 leapp-report.txt 文件中的预升级报告,并使用命令行界面手动解决问题。
  • 使用 Web 控制台查看报告,在可用的情况下应用自动修复,并使用推荐的修复提示修复剩余的问题。
注意

您可以使用自己的自定义脚本处理预升级报告,例如,比较不同环境中多个报告的结果。如需更多信息,请参阅自动 Red Hat Enterprise Linux 预升级报告工作流

重要

预升级报告无法模拟整个原位升级过程,因此无法识别系统的所有阻碍问题。因此,即使您已审核并修复了报告中的所有问题,您的原位升级也可能被终止。例如,预升级报告无法检测与损坏的软件包下载相关的问题。

4.1. 从命令行评估可升级性

在预升级阶段,使用命令行界面识别潜在的升级问题。

先决条件

流程

  1. 在 RHEL 7 系统中,执行预升级阶段:

    # leapp preupgrade --target <target_os_version>

    <target_os_version > 替换为目标操作系统版本,如 8.6。如果没有定义目标操作系统版本,Leapp 将使用在 支持的升级路径 中的表 1.1 中所指定的默认目标操作系统版本。

  2. 检查 /var/log/leapp/leapp-report.txt 文件中的报告,并手动解决所有报告的问题。有些报告的问题包含补救建议。抑制因素 问题阻止您升级,直到您解决了它们。

    报告包含以下风险因素级别:

    High
    很有可能导致系统状态恶化。
    Medium
    可能会影响系统和应用程序。
    Low
    不应影响系统,但可能会影响应用程序。
    info
    对系统或应用程序没有预期影响的信息。
  3. 在某些系统配置中,Leapp 工具会产生您必须手动回答的 true 或 false 问题。如果预升级报告包含 Missing required answers in the answer file 消息,请完成以下步骤:

    1. 打开 /var/log/leapp/answerfile 文件,并查看 true 或 false 问题。
    2. 手动编辑 /var/log/leapp/answerfile 文件,删除 # 符号来取消文件的确认行的注释,并确认您的回答为 TrueFalse。如需更多信息,请参阅 Leapp answerfile

      注意

      另外,您可以通过运行以下命令来回答 true 或 false 问题:

      # leapp answer --section <question_section>.<field_name>=<answer>

      例如,要确认对 Disable pam_pkcs11 module in PAM configuration? 问题的 False 回答,请执行以下命令:

      # leapp answer --section remove_pam_pkcs11_module_check.confirm=False
  4. 重复前面的步骤来重新运行预升级报告,以验证您是否解决了所有关键问题。

4.2. 通过 web 控制台评估可升级性,并应用自动化修复方法

识别预升级阶段中的潜在问题,并使用 Web 控制台应用自动补救。

先决条件

流程

  1. 安装 cockpit-leapp 插件:

    # dnf install cockpit-leapp

    root 或有权使用 sudo 输入管理命令的用户身份登录到 web 控制台。如需有关 web 控制台的更多信息,请参阅 使用 RHEL web 控制台管理系统

  2. 在 RHEL 7 系统中,从命令行界面或 web 控制台终端执行预升级:

    # leapp preupgrade --target <target_os_version>

    <target_os_version > 替换为目标操作系统版本,如 8.6。如果没有定义目标操作系统版本,Leapp 将使用在 支持的升级路径 中的表 1.1 中所指定的默认目标操作系统版本。

  3. 在 web 控制台中,从导航菜单中选择 Upgrade Report 来查看所有报告的问题。抑制因素 问题阻止您升级,直到您解决了它们。要详细查看问题,请选择行来打开详情面板。

    图 4.1. Web 控制台中的原位升级报告

    Web 控制台中的原位升级报告

    报告包含以下风险因素级别:

    High
    很有可能导致系统状态恶化。
    Medium
    可能会影响系统和应用程序。
    Low
    不应影响系统,但可能会影响应用程序。
    info
    对系统或应用程序没有预期影响的信息。
  4. 在某些配置中,Leapp 工具会生成您必须手动回答的 true 或 false 问题。如果升级报告包含 Missing required answers in the answer file 行,请完成以下步骤:

    1. 选择 Missing required answers in the answer file 行,来打开 Details 面板。默认回答在补救命令的末尾说明。
    2. 要确认默认回答,请选择 Add to Remediation Plan 来稍后执行补救或 Run Remediation 来立即执行补救。
    3. 要选择非默认回答,请在终端中执行 leapp answer 命令,指定您要回答的问题以及您确认的回答。

      # leapp answer --section <question_section>.<field_name>=<answer>

      例如,要对问题 Disable pam_pkcs11 module in PAM configuration? 确认 False 响应,请执行以下命令

      # leapp answer --section remove_pam_pkcs11_module_check.confirm=False
      注意

      您还可以手动编辑 /var/log/leapp/answerfile 文件,通过删除 # 符号取消对文件的确认行的注释,并确认您的回答为 TrueFalse。如需更多信息,请参阅 Leapp answerfile 示例

  5. 有些问题有您可以运行的修复命令来自动解决问题。您可以在补救命令中单独或一起运行补救命令。

    1. 要运行单个补救命令,请打开此问题的 Detail 面板,然后点 Run Remediation
    2. 要在补救计划中添加补救命令,请打开此问题的Detail 面板,然后点击 Add to Remediation Plan

      图 4.2. 详细信息面板

      详细信息面板
    3. 要运行包含所有添加了补救命令的补救计划,请点击报告右上角的 Remediation plan 链接。点 Execute Remediation Plan 执行所有列出的命令。
  6. 审核报告并解决所有报告的问题后,重复第 3-7 步来重新运行报告,以验证您是否解决了所有关键问题。

第 5 章 执行从 RHEL 7 到 RHEL 8 的升级

使用 Leapp 程序升级到 RHEL 8。

先决条件

流程

  1. 在 RHEL 7 系统中,启动升级过程:

    # leapp upgrade --target <target_os_version>

    <target_os_version > 替换为目标操作系统(OS)版本,如 8.6。如果没有定义目标操作系统版本,Leapp 将使用在 支持的升级路径 中的表 1.1 中所指定的默认目标操作系统版本。

    注意

    如果您使用 /etc/yum.repos.d/ 目录中的 自定义存储库 进行升级,请启用所选的存储库,如下所示:

    # leapp upgrade --enablerepo <repository_id1> --enablerepo <repository_id2>

    如果您要进行 没有 RHSM 的升级 或使用RHUI,请添加 --no-rhsm 选项。

    如果您要使用 ISO 镜像升级,请添加 --no-rhsm--iso <file_path> 选项。将 <file_path> 替换为保存的 ISO 镜像的文件路径,如 /home/rhel8.iso

    如果您有 扩展升级支持(EUS)、高级更新支持(AUS)Update Services for SAP Solutions (E4S) 订阅,请添加 --channel < channel> 选项。将 <channel> 替换为您与 leapp preupgrade 命令一起使用的值,如 eusause4s。请注意,您必须在 leapp preupgradeleapp upgrade 命令中对 --channel 选项使用同样的值。

    在升级过程开始时,Leapp 会执行预升级阶段,如 检查预升级报告 中所述。

    如果系统是可升级的,Leapp 会下载必要的数据,并为升级准备 RPM 事务。

    如果您的系统没有达到可靠的条件,Leapp 会终止升级进程,并在 /var/log/leapp/leapp-report.txt 文件中提供描述这个问题和推荐解决方案的记录。如需更多信息,请参阅 故障排除

  2. 手动重启系统:

    # reboot

    在这个阶段,系统会引导进入基于 RHEL 8 的初始 RAM 磁盘镜像 initramfs。Leapp 升级所有软件包,然后自动重启到 RHEL 8 系统。

    另外,您可以使用 --reboot 选项输入 leapp upgrade 命令并跳过这个手动步骤。

    如果发生故障,请按照故障排除中所述调查日志。

  3. 登录到 RHEL 8 系统并验证其状态, RHEL 8 系统升级后状态的验证中所述。
  4. 执行升级报告和 执行升级后任务 中描述的所有升级后任务。特别是,重新检查并重新应用您的安全策略。
  5. 如果升级一个系统,并将以 FIPS 模式运行,请删除任何 RHEL 7 内核。然后,重新生成并确保所有加密密钥的 FIPS 合规性。如需更多信息 ,请参阅 RHEL 8 中的加密密钥位置

第 6 章 验证 RHEL 8 系统升级后的状态

此流程列出了在升级到 RHEL 8 后建议执行的验证步骤。

先决条件

流程

升级完成后,请确定系统是否处于所需状态,至少:

  • 验证当前的 OS 版本是否为 Red Hat Enterprise Linux 8:

    # cat /etc/redhat-release
    Red Hat Enterprise Linux release <target_os_version> (Ootpa)

    target_os_version 替换为目标操作系统版本,如 8.6。

  • 检查 OS 内核版本:

    # uname -r
    4.18.0-305.el<target_os>.x86_64

    target_os 应该是 8 或目标操作系统版本,如 8_6。请注意,.el8 很重要,版本不应早于 4.18.0-305。

  • 如果您使用 Red Hat Subscription Manager:

    • 验证是否安装了正确的产品:

      # subscription-manager list --installed
      +-----------------------------------------+
          	  Installed Product Status
      +-----------------------------------------+
      Product Name: Red Hat Enterprise Linux for x86_64
      Product ID:   479
      Version:      <target_os_version>
      Arch:         x86_64
      Status:       Subscribed

      target_os_version 替换为目标操作系统版本,如 8.6。

    • 升级后,验证发行版本是否马上设置为目标操作系统版本:

      # subscription-manager release
      Release: <target_os_version>

      target_os_version 替换为目标操作系统版本,如 8.6。

  • 例如,验证网络服务是否可操作,试着使用 SSH 连接到服务器。
  • 检查应用程序的升级后状态。在某些情况下,您可能需要手动执行迁移和配置更改。例如,要迁移您的数据库,请按照 RHEL 8 数据库服务器文档中的说明操作。

第 7 章 执行升级后的任务

在原位升级到 RHEL 8 后,建议执行以下主要任务。

先决条件

流程

执行升级后,完成以下任务:

  1. /etc/dnf/dnf.conf 配置文件中的排除列表中删除任何剩余的 Leapp 软件包,包括 snactor 软件包。在原位升级过程中,使用 Leapp 工具安装的Leapp 软件包会自动添加到 排除列表中,以防止删除或更新重要的文件。原位升级后,您必须在从系统中删除它们之前,从排除列表中删除这些 Leapp 软件包。

    • 要从排除列表中手动删除软件包,请编辑 /etc/dnf/dnf.conf 配置文件,并从 exclude 列表中删除所需的 Leapp 软件包。
    • exclude 列表中删除所有软件包:

      # yum config-manager --save --setopt exclude=''
  2. 删除剩余的 RHEL 7 软件包,包括剩余的 Leapp 软件包。

    1. 确定旧的内核版本:

      # cd /lib/modules && ls -d *.el7*
    2. 从旧内核中删除弱模块。如果您有多个旧内核,请对每个内核重复此步骤:

      # [ -x /usr/sbin/weak-modules ] && /usr/sbin/weak-modules --remove-kernel <version>

      &lt;version> 替换为上一步中决定的内核版本,例如:

      #  [ -x /usr/sbin/weak-modules ] && /usr/sbin/weak-modules --remove-kernel 3.10.0-1160.25.1.el7.x86_64
      注意

      忽略以下错误信息,如果内核包已被删除,就会产生这个错误信息:

      /usr/sbin/weak-modules: line 1081: cd: /lib/modules/<version>/weak-updates: No such file or directory
    3. 从引导装载程序条目中删除旧内核。如果您有多个旧内核,请对每个内核重复此步骤:

      # /bin/kernel-install remove <version> /lib/modules/<version>/vmlinuz

      使用上一步中决定的内核版本替换 version,例如:

      # /bin/kernel-install remove 3.10.0-1160.25.1.el7.x86_64 /lib/modules/3.10.0-1160.25.1.el7.x86_64/vmlinuz
    4. 找到剩余的 RHEL 7 软件包:

      # rpm -qa | grep -e '\.el[67]' | grep -vE '^(gpg-pubkey|libmodulemd|katello-ca-consumer)' | sort
    5. 从 RHEL 8 系统中删除剩余的 RHEL 7 软件包,包括旧的内核软件包和 kernel-workaround 软件包。
    6. 删除剩余的 Leapp 依赖软件包:

      # yum remove leapp-deps-el8 leapp-repository-deps-el8
    7. 删除任何剩余的空目录:

      # rm -r /lib/modules/*el7*
  3. 可选:从系统中删除所有剩余的与升级相关的数据:

    # rm -rf /var/log/leapp /root/tmp_leapp_py3 /var/lib/leapp
    重要

    删除这些数据可能会限制红帽支持调查并故障排除升级后问题的能力。

  4. 禁用在 RHEL 8 上无法安装或使用其软件包的 YUM 存储库。由 RHSM 管理的软件仓库会自动处理。禁用这些软件仓库:

    # yum config-manager --set-disabled <repository_id>

    <repository_id& gt; 替换为存储库 ID。

  5. 将当前内核命令行参数设置为新默认值,以确保将来的内核使用正确的参数更新引导:

    • 对于 IBM Z 架构:

      # BOOT_OPTIONS="$(tr -s "$IFS" '\n' </proc/cmdline | grep -ve '^BOOT_IMAGE=' -e '^initrd=' | tr '\n' ' ')"
      # echo $BOOT_OPTIONS > /etc/kernel/cmdline
    • 对于其他构架:

      # BOOT_OPTIONS="$(tr -s "$IFS" '\n' </proc/cmdline | grep -ve '^BOOT_IMAGE=' -e '^initrd=' | tr '\n' ' ')"
      # grub2-editenv - set "kernelopts=$BOOT_OPTIONS"
  6. 将旧的救援内核和初始 RAM 磁盘替换为当前的内核和磁盘:

    1. 删除现有救援内核和初始 RAM 磁盘:

      # rm /boot/vmlinuz-*rescue* /boot/initramfs-*rescue* 
    2. 重新安装救援内核和相关的初始 RAM 磁盘:

      # /usr/lib/kernel/install.d/51-dracut-rescue.install add "$(uname -r)" /boot "/boot/vmlinuz-$(uname -r)"
      注意

      如果您的系统的内核软件包有不同的名称,比如在实时系统上,请使用正确的软件包名称替换 kernel-core

    3. 如果您的系统位于 IBM Z 构架中,更新 zipl 引导装载程序:

      # zipl
  7. 重新检查并重新应用您的安全策略。特别是,需要将 SELinux 模式改为 enforcing。详情请参阅应用安全策略

验证步骤

  1. 验证旧内核是否已从 bootloader 条目中删除:

    # grubby --info=ALL | grep "\.el7" || echo "Old kernels are not present in the bootloader."
  2. 验证已为当前内核创建了之前删除的救援内核和救援初始 RAM 磁盘文件:

    # ls /boot/vmlinuz-*rescue* /boot/initramfs-*rescue* 
    # lsinitrd /boot/initramfs-*rescue*.img | grep -qm1 "$(uname -r)/kernel/" && echo "OK" || echo "FAIL"
  3. 验证救援引导条目是否指向现有救援文件。请查看 grubby 输出:

    # grubby --info $(ls /boot/vmlinuz-*rescue*)

第 8 章 应用安全策略

在原位升级过程中,必须禁用某些安全策略。RHEL 8 引进了系统范围加密策略的新概念,同时安全配置可能包含主要发行本之间的更改。要使您的系统更安全,请将 SELinux 切换到 enforcing 模式,并设置系统范围的加密策略。您可能还希望修复系统,以符合特定的安全配置文件。

8.1. 将 SELinux 模式改为 enforcing

在原位升级过程中,Leapp 会将 SELinux 的模式设置为 permissive。当成功升级系统时,您必须手动将 SELinux 模式改为 enforcing。

先决条件

流程

  1. 确保没有 SELinux denials,例如,使用 ausearch 工具程序:

    # ausearch -m AVC,USER_AVC -ts boot

    请注意,上一步只涵盖最常见的情况。要检查所有可能的 SELinux denials,请查看使用 SELinux 中的 识别 SELinux denials 部分。

  2. 在您选择的文本编辑器中打开 /etc/selinux/config 文件,例如:

    # vi /etc/selinux/config
  3. 配置 SELINUX=enforcing 选项:

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these two values:
    #       targeted - Targeted processes are protected,
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted
  4. 保存更改,重启系统:

    # reboot

验证

  1. 系统重启后,确认 getenforce 命令返回 Enforcing:

    $ getenforce
    Enforcing

8.2. 设置系统范围的加密策略

系统范围的加密策略是一个系统组件,它配置核心加密子系统,包括 TLS、IPSec、SSH、DNSSec 和 Kerberos 协议。

在成功安装或原位升级后,系统范围的加密策略会自动设置为 DEFAULTDEFAULT 系统范围的加密政策级别为当前的威胁模型提供了安全设置。

要查看或更改当前系统范围的加密策略,请使用 update-crypto-policies 工具:

$ update-crypto-policies --show
DEFAULT

例如,以下命令可将系统范围内的加密策略切换到 FUTURE,这样可防止任何近期可能出现的安全攻击:

# update-crypto-policies --set FUTURE
Setting system policy to FUTURE

您还可以自定义系统范围的加密策略。详情请参阅 自定义带有子策略的系统范围的加密策略创建并设置自定义系统范围的加密策略 部分。

其他资源

8.3. 将强化的系统升级到安全基线

要在成功升级到 RHEL 8 后获得完全强化的系统,您可以使用 OpenSCAP 套件提供的自动化补救功能。OpenSCAP 修复使您的系统符合安全基线,如 PCI-DSS、OSPP 或 ACSC Essential Eight。由于安全产品的发展,配置合规性建议在 Red Hat Enterprise Linux 的主版本之间有所不同。

当升级一个强化的 RHEL 7 系统时,Leapp 工具 提供保持完整强化的直接方法。根据组件配置中的更改,该系统可能会在升级过程中偏离 RHEL 8 的建议。

注意

您不能使用同样的 SCAP 内容来扫描 RHEL 7 和 RHEL 8。如果系统的合规性是由像 Red Hat Satellite 或 Red Hat Insights 这样的工具管理的,则更新管理平台。

作为自动化修复的替代方法,您可以按照 OpenSCAP 生成的报告手动进行更改。有关生成合规性报告的详情,请参考 扫描系统以了解安全合规性和漏洞

根据流程自动强化带有 PCI-DSS 配置文件的系统。

重要

在默认配置中,自动化修复支持 RHEL 系统。因为安装后已更改了系统升级,因此运行修复可能无法使其完全遵从所需的安全配置文件。您可能需要手动修复一些要求。

先决条件

  • scap-security-guide 软件包安装在 RHEL 8 系统上。

流程

  1. 查找合适的安全合规数据流 .xml 文件:

    $ ls /usr/share/xml/scap/ssg/content/
    ssg-firefox-cpe-dictionary.xml  ssg-rhel6-ocil.xml
    ssg-firefox-cpe-oval.xml        ssg-rhel6-oval.xml
    ...
    ssg-rhel6-ds-1.2.xml          ssg-rhel8-oval.xml
    ssg-rhel8-ds.xml              ssg-rhel8-xccdf.xml
    ...

    如需更多信息,请参阅 查看合规性配置文件 章节。

  2. 根据从合适的数据流所选的配置文件来修复系统:

    # oscap xccdf eval --profile pci-dss --remediate /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml

    您可以根据您要强化系统的配置文件的 ID 来替换 --profile 参数中的 pci-dss 值。有关 RHEL 8 中所支持的配置文件的完整列表,请参阅 RHEL 中所支持的 SCAP 安全配置文件

    警告

    如果没有谨慎使用,在启用 Remediate 选项的情况下运行系统评估可能会导致系统无法正常工作。红帽不提供任何自动的方法来恢复由强化安全的修复所做的更改。在 RHEL 系统上的默认配置中支持修复。如果在安装后更改了您的系统,运行修复可能无法使其遵守所需的安全配置文件。

  3. 重启您的系统:

    # reboot

验证

  1. 验证系统是否遵从配置文件,并将结果保存到 HTML 文件中:

    $ oscap xccdf eval --report pcidss_report.html --profile pci-dss /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml

第 9 章 故障排除

您可以参阅以下内容排除从 RHEL 7 升级到 RHEL 8 时出现的问题。

9.1. 故障排除资源

您可以参考以下故障排除资源。

控制台输出

默认情况下,Leapp 只会将错误和严重日志级别的信息输出到控制台输出中要改变日志级别,在leapp upgrade 命令中使用 --verbose--debug 选项。

  • verbose 模式中,Leapp 会输出 info, warning, error, 和 critical 信息。
  • debug 模式中,Lapp 会输出 debug、info、warning、error 和 critical 信息。

日志

  • /var/log/leapp/leapp-upgrade.log 文件列出了 initramfs 阶段里的问题。
  • /var/log/leapp/dnf-debugdata/ 目录包含了事务故障排除数据。只有在 leapp upgrade 命令使用了 --debug 选项执行时,才会生成这个目录。
  • /var/log/leapp/answerfile 包含 Leapp 回答所需的问题。
  • Journalctl 实用程序提供完整的日志。

Reports

9.2. 故障排除窍门

您可以参考以下故障排除信息。

预升级阶段

  • 确认您的系统满足规划升级中列出的所有条件。
  • 请确定您遵循了 准备升级 中描述的所有步骤,例如:您的系统没有使用多个网络接口卡(NIC),它们的名称基于内核使用的前缀(eth)。
  • 确保您已回答了 /var/log/leapp/answerfile 文件中 Leapp 所需的所有问题。如果缺少回答,Leapp 会阻止升级。问题示例:

    • 在 PAM 配置中禁用 pam_pkcs11 模块?
    • 在 PAM 配置中禁用 pam_krb5 模块?
    • 使用以下 authselect 调用来配置 PAM 和 nsswitch.conf?
  • 请确定您解决了在预升级报告(位于 /var/log/leapp/leapp-report.txt )中发现的所有问题。您也可以使用 web 控制台来达到此目的,如评估可升级性并通过 web 控制台应用自动化修复 中所述。

例 9.1. Leapp answerfile

以下是一个未编辑的 /var/log/leapp/answerfile 文件,它有一个未回答的问题:

[remove_pam_pkcs11_module_check]
# Title:          	None
# Reason:         	Confirmation
# =================== remove_pam_pkcs11_module_check.confirm ==================
# Label:          	Disable pam_pkcs11 module in PAM configuration? If no, the upgrade process will be interrupted.
# Description:    	PAM module pam_pkcs11 is no longer available in RHEL-8 since it was replaced by SSSD.
# Type:           	bool
# Default:        	None
# Available choices: True/False
# Unanswered question. Uncomment the following line with your answer
# confirm =

Label 字段指定需要回答的问题。在这个示例中,问题是 Disable pam_pkcs11 module in PAM configuration?

要回答这个问题,请取消对 confirm 行的注释并输入 TrueFalse 作为回答。在本例中,所选答案为 True

[remove_pam_pkcs11_module_check]
...
# Available choices: True/False
# Unanswered question. Uncomment the following line with your answer
confirm = True

下载阶段

  • 如果在下载 RPM 软件包时出现问题,请检查位于 /var/log/leapp/dnf-debugdata/ 目录的事务调试数据。

    注意

    如果没有生成事务调试数据,/var/log/leapp/dnf-debugdata/ 目录为空,则不存在。当所需的软件仓库不可用时,会出现这种情况。

initramfs 阶段

  • 在此阶段,潜在的故障会进入 Dracut shell。检查 Journal 日志:

    # journalctl

    或者,使用 reboot 命令从 Dracut shell 重启系统,并检查 /var/log/leapp/leapp-upgrade.log 文件。

升级后阶段

  • 如果您的系统看上去成功升级,但是使用旧的 RHEL 7 内核引导,重启系统并检查 GRUB 中默认条目的内核版本。
  • 确保您遵循了 RHEL 8 系统升级后状态的验证中推荐的步骤。
  • 如果您的应用程序或服务在您将 SELinux 切换到 enforcing 模式后停止工作或者行为不正确,请使用 ausearch, journalctl, 或 dmesg 检查拒绝:

    # ausearch -m AVC,USER_AVC -ts boot
    # journalctl -t setroubleshoot
    # dmesg | grep -i -e selinux -e type=1400

    最常见的问题是由错误的标记造成的。更多详情请参阅SELinux 故障排除

9.3. 已知问题

从 RHEL 7 升级到 RHEL 8 时可能会遇到的已知问题。

  • 在进行原位升级时,如果 Network Manager 被禁用或没有安装,则 network teaming 功能无法正常工作。
  • 如果您使用 HTTP 代理,则必须将 Red Hat Subscription Manager 配置为使用代理服务器,或在执行 subscription-manager 命令时使用 --proxy <hostname> 选项 。否则,subscription-manager 命令的执行会失败。如果您使用 --proxy 选项而不是配置更改,升级过程会失败,因为 Leapp 无法检测到代理。要防止这个问题发生,请手动编辑 rhsm.conf 文件,如 How to configure HTTP Proxy for Red Hat Subscription Management 所述。(BZ#1689294)
  • 如果您的 RHEL 7 系统使用由红帽提供但在 RHEL 8 中不可用的设备驱动程序,Leapp 将会限制升级。但是,如果 RHEL 7 系统使用了第三方设备驱动程序,而 Leapp/etc/leapp/files/device_driver_deprecation_data.json 文件中没有数据,则 Leapp 不会检测这样的驱动程序并进行升级。然后,该系统可能会在升级后无法引导。
  • 如果在 /etc/nsswitch.conf 文件中使用了 winbindwins Samba 模块,则不能执行原位升级。升级事务失败并显示以下出错信息,Lapp 会阻止升级:

    upgrade[469]: STDERR:
    upgrade[469]: Error in PREIN scriptlet in rpm package unbound-libs
    upgrade[469]: Error: Transaction failed
    upgrade[469]: Container el8userspace failed with error code 1.
    unbound-libs has a PREIN failure

    要临时解决这个问题,请配置系统以便在更新的过程中只使用本地供应商的 user, groups, 和 hosts 数据库。

    1. 打开系统 /etc/nsswitch.conf 配置文件并搜索包含 winbind 或者 wins 字符串的条目。
    2. 如果您找到这样的条目,请创建一个 /etc/nsswitch.conf 的备份。
    3. 编辑 /etc/nsswitch.conf 并从包含它们的条目中删除 winbind 或者 wins
    4. 执行原位升级。
    5. 升级后,根据您的系统配置要求,将 winbindwins 字符串添加到 /etc/nsswitch.conf 中的条目中。

      (BZ#1410154)

  • Leapp 实用程序不会在升级过程中更改自定义验证配置。如果您使用已弃用的 authconfig 工具在 RHEL 7 系统中配置身份验证,则 RHEL 8 的身份验证可能无法正常工作。要确保您的自定义配置在 RHEL 8 系统中正常工作,请使用 authselect 程序重新配置您的 RHEL 8 系统。

    重要

    在原位升级过程中,删除已弃用的 pam_krb5pam_pkcs11 可插拔验证模块 (PAM)。因此,如果 RHEL 7 系统上的 PAM 配置包含 pam_krb5pam_pkcs11 模块,如果这些模块具有 requiredrequisite 控制值,则如果执行原位升级,则您可能会被锁在系统之外。要临时解决这个问题,请在开始升级前将您的 RHEL 7 系统配置为不使用 pam_krb5 或者 pam_pkcs11

  • 如果系统上安装的第三方软件包(不是红帽签名的)的名称与红帽提供的软件包名称相同,则原位升级会失败。要临时解决这个问题,请在升级前选择以下选项之一:

    1. 删除第三方软件包
    2. 使用红帽提供的软件包替换第三方软件包
  • 为了安全起见,已从 RHEL 8 中删除了对 single-DES (DES)和 triple-DES (3DES)加密类型的支持。RHEL 7 Identity Management(IdM)仍支持 3DES 加密。
    将 IdM 客户端从 RHEL 7 升级到 RHEL 8 或将整个 IdM 环境从 RHEL 7 迁移到 RHEL 8 是可能的,因为两个 RHEL 版本都默认首选更强的 AES 加密类型:

    IdM 的版本默认加密类型其他支持的加密类型

    RHEL 7

    aes256-cts
    aes128-cts

    camellia256-cts
    camellia128-cts
    des3-hmac
    arcfour-hmac

    RHEL 8

    aes256-cts
    aes128-cts

    aes256-sha2
    aes128-sha2
    camellia256-cts
    camellia128-cts
    arcfour-hmac [a]

    [a] RHEL 8 中默认弃用并禁用了 RC4 加密,因为它被视为不如较新的 AES-128 和 AES-256 加密类型安全。有关启用对与传统活动目录环境兼容的 RC4 支持的更多信息,请参阅 确保 AD 和 RHEL 中对通用加密类型的支持

    如果您手动配置了一个非 IdM Kerberos 发行中心(KDC)、任何服务或任何用户为使用 DES 或 3DES 加密的用户,您可能会在升级到 RHEL 8 中最新 Kerberos 软件包后遇到服务中断,例如:

    • Kerberos 验证错误
    • unknown enctype 加密错误
    • 带有 DES 加密数据库主密钥 (K/M) 的 KDC 无法启动

    红帽建议不要在您的环境中使用 DES 或者 3DES 加密。有关重新加密 Kerberos 主体以使用更强大的加密类型的更多信息,请参阅 MIT Kerberos 文档中的 退出 DES

  • 在带有独立磁盘的软件冗余阵列(RAID)的系统上,原位升级可能会失败。(RHEL-3279)
  • 禁用 GRUB 引导装载程序规格的系统(如使用 Puppet 的系统)无法为较新的内核创建新的 initramfs。要临时解决这个问题,请从引导装载程序条目中手动删除软件包和旧内核,如 第 6 章:执行升级后的任务 中所述。(BZ#1955099)
  • IBM Z 构架中没有 Relax-and-Recover (ReaR) 程序。因此,IBM Z 系统无法完全由 OpenSCAP 套件修复,且可能无法与安全基准完全兼容。(BZ#1958939)
  • 在原位升级过程中,Leapp 工具通常会保留 RHEL 7 和 RHEL 8 之间的网络接口控制器(NIC)名称。但是,在某些系统上,如带有网络绑定的系统,NIC 名称需要在 RHEL 7 和 RHEL 8 之间更新。在这些系统上,执行以下步骤:

    1. 设置 LEAPP_NO_NETWORK_RENAMING=1 环境变量,来防止 Leapp 工具错误地保留原始 RHEL 7 NIC 名称。
    2. 执行原位升级。
    3. 验证您的网络是否正常工作。如果需要,请手动更新网络配置。

      (BZ#1919382)

  • 如果您的系统使用 BIOS 启动,如果引导磁盘的嵌入区域不包含用于内核镜像安装的足够空间,则在升级 GRUB2 引导装载程序时,原位升级失败。这导致系统损坏,在磁盘已被手动分区时可能会发生,例如使用 RHEL 6 fdisk 工具。要验证这个问题是否会影响您,请执行以下步骤:

    1. 确定哪个扇区启动了安装了引导装载程序的磁盘上的第一个分区:

      # fdisk -l

      标准分区(其确保有足够的空间用于内核镜像)从扇区 2048 开始。

    2. 确定启动扇区是否提供了足够的空间。RHEL 8 核心镜像至少需要 32 KiB。例如,如果扇区大小为标准的 512 字节,则从扇区 66 或较低开始不会提供足够的空间。

      注意

      RHEL 8 核心镜像可能大于 32 KiB,需要更高的启动扇区。始终验证当前 RHEL 8 核需要多少空间。

    3. 如果嵌入区域不包含足够的存储空间,请执行 RHEL 8 系统的全新安装,而不是执行原位升级。

      (BZ#2181380)

  • 原位升级后,如果系统满足以下条件,则 SSH 密钥将不再自动生成:

  • 在硬件级别 13 上创建的且使用 UEFI 引导的 VMware 虚拟机在升级过程中可能会遇到问题,因为 NVRAM 文件太小了。有关此问题以及如何解决它的更多信息,请参阅 VMWare: 当执行 efibootmgr 或 mokutil 命令添加条目时,得到 "No space left on device"。(RHEL-3362)
  • 如果您使用带有 ISO 镜像的 RHUI 升级,则升级可能会失败。您可以通过在升级时不使用 --iso 选项来临时解决此问题,或者按照 使用 ISO 离线 的 Leapp 升级失败,并显示 "Failed to synchronize cache for repo 'rhul-microsoft-azure-rhel8',gnoring this repo 中的说明操作。(RHEL-3296)
  • 预升级过程可能会失败,并显示以下错误消息:

    MountError:failed to create mount target directory …

    如果出现这个问题,请导出 LEAPP_OVL_IMG_FS_EXT4=1 环境变量。如需更多信息,请参阅 Leapp 可能失败,并显示 MountError (OverlayFS + XFS ftype=1)。(RHEL-3330)

  • 如果挂载了太多文件系统,则预升级过程可能会失败,并显示以下错误消息:

    OperationalError: unable to open database file

    如果出现这个问题,请完成以下步骤:

    1. 卸载与系统分区无关且在升级过程中不需要的文件系统。
    2. 注释掉 /etc/fstab 文件中卸载的文件系统的条目,以防止它们在升级过程中被挂载。
    3. 升级后恢复原始文件系统配置。

      (RHEL-3320)

  • 如果您的系统中没有 /etc/sysconfig/kernel 系统配置文件,升级会失败,从而导致系统中断。要防止这个问题,请使用预期的配置手动创建该文件。如需更多信息 ,请参阅验证引导装载程序。(RHEL-22306)
  • 如果 /etc/fstab 文件中定义的任何挂载的文件系统没有设置 共享 传播标志,则升级可能会失败。要防止这个问题,请重新挂载这些文件系统将其设置为共享:

    # mount -o remount --make-shared <mountpoint>

    使用每个文件系统的挂载点替换 mountpoint

    如需更多信息,请参阅 DNF 事务检查 中的 Leapp "Can not load RPM 文件 "。(RHEL-23449)

9.4. 获取支持

要创建一个支持问题单,请选择 RHEL 7 作为产品,并提供您系统的 sosreport

  • 要在您的系统中生成 sosreport,请运行:
# sosreport

请注意:您可以将问题单 ID 留空。

有关生成 sosreport 的详情,请参阅 What is an sosreport and how to create one in Red Hat Enterprise Linux?

有关在客户门户网站上提交和管理支持问题单的更多信息,请参阅 如何在客户门户网站上提交和管理支持问题单?

附录 A. RHEL 7 软件仓库

在升级前,确定您启用了合适的软件仓库,如 为升级准备 RHEL 7 系统 流程中的第 4 步所述。

如果您计划在升级过程中使用 Red Hat Subscription Manager,您 需要在升级前使用 subscription-manager repos --enable repository_id 命令启用以下软件仓库:

构架软件仓库仓库 ID

64-bit Intel

Base

rhel-7-server-rpms

Extras

rhel-7-server-extras-rpms

IBM POWER8 (little endian)

Base

rhel-7-for-power-le-rpms

Extras

rhel-7-for-power-le-extras-rpms

IBM Z

Base

rhel-7-for-system-z-rpms

Extras

rhel-7-for-system-z-extras-rpms

升级前,可以使用 subscription-manager repos --enable repoid 命令启用以下仓库

构架软件仓库仓库 ID

64-bit Intel

Optional

rhel-7-server-optional-rpms

Supplementary

rhel-7-server-supplementary-rpms

IBM POWER8 (little endian)

Optional

rhel-7-for-power-le-optional-rpms

Supplementary

rhel-7-for-power-le-supplementary-rpms

IBM Z

Optional

rhel-7-for-system-z-optional-rpms

Supplementary

rhel-7-for-system-z-supplementary-rpms

注意

如果您在原位升级前已经启用了 RHEL 7 Optional 或 RHEL 7 Supplementary 软件仓库, Leapp 会相应地启用 RHEL 8 CodeReady Linux BuilderRHEL 8 软件仓库。

如果您决定使用自定义软件仓库,请根据配置自定义软件仓库中的内容启用它们。

附录 B. RHEL 8 软件仓库

如果您的系统使用 Red Hat Subscription Manager(RHSM)注册到 Red Hat Content Delivery Network(CDN),则 RHEL 8 软件仓库会在原位升级过程中自动启用。但是,在使用 RHSM 注册到 Red Hat Satellite 的系统上,您必须在运行预升级报告前手动启用和同步 RHEL 7 和 RHEL 8 软件仓库。

注意

确保启用每个软件仓库的目标操作系统(OS)版本,如 RHEL 8.6。如果您只启用了 RHEL 8 版本的软件仓库,则会禁止原位升级。

如果您计划在升级过程中使用 Red Hat Satellite,在使用 Satellite Web UI 或 hammer repository-set enable 以及 hammer product synchronize 命令进行升级之前,您 必须启用并同步 以下 RHEL 8 存储库:

注意

<target_os_version > 替换为目标操作系统(OS)版本,如 8.6。

表 B.1. RHEL 8 软件仓库

架构软件仓库仓库 ID仓库名称发行版本

64 位 Intel

BaseOS

rhel-8-for-x86_64-baseos-rpms

Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)

x86_64 <target_os_version>

AppStream

rhel-8-for-x86_64-appstream-rpms

Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)

x86_64 <target_os_version>

IBM Power8 (little endian)

BaseOS

rhel-8-for-ppc64le-baseos-rpms

Red Hat Enterprise Linux 8 for Power, little endian - BaseOS(RPMs)

ppc64le <target_os_version>

AppStream

rhel-8-for-ppc64le-appstream-rpms

Red Hat Enterprise Linux 8 for Power, little endian - AppStream(RPMs)

ppc64le <target_os_version>

IBM Z

BaseOS

rhel-8-for-s390x-baseos-rpms

Red Hat Enterprise Linux 8 for IBM z Systems - BaseOS(RPMs)

s390x <target_os_version>

AppStream

rhel-8-for-s390x-appstream-rpms

Red Hat Enterprise Linux 8 for IBM z Systems - AppStream (RPMs)

s390x <target_os_version>

附录 C. RHEL 8 中加密密钥的位置

升级在联邦信息处理标准(FIPS)模式下运行的系统后,您必须重新生成,并确保所有加密密钥的 FIPS 合规性。下表中列出了此类密钥的一些已知位置。请注意,该列表没有完成,您也可以检查其他位置。

表 C.1. RHEL 8 中加密密钥的位置

Application(应用程序)密钥位置备注

Apache mod_ssl

/etc/pki/tls/private/localhost.key

如果 /etc/pki/tls/private/localhost.key 不存在,/usr/lib/systemd/system/httpd-init.service 服务运行 /usr/libexec/httpd-ssl-gencerts 文件。

Bind9 RNDC

/etc/rndc.key

named-setup-rndc.service 服务运行 /usr/libexec/generate-rndc-key.sh 脚本,该脚本生成 /etc/rndc.key 文件。

Cyrus IMAPd

/etc/pki/cyrus-imapd/cyrus-imapd-key.pem

cyrus-imapd-init.service 服务在启动时生成 /etc/pki/cyrus-imapd/cyrus-imapd-key.pem 文件。

DNSSEC-Trigger

/etc/dnssec-trigger/dnssec_trigger_control.key

dnssec-triggerd-keygen.service 服务生成 /etc/dnssec-trigger/dnssec_trigger_control.key 文件。

Dovecot

/etc/pki/dovecot/private/dovecot.pem

dovecot-init.service 服务在启动时生成 /etc/pki/dovecot/private/dovecot.pem 文件。

OpenPegasus

/etc/pki/Pegasus/file.pem

tog-pegasus.service 服务生成 /etc/pki/Pegasus/file.pem 私钥文件。

OpenSSH

/etc/ssh/ssh_host*_key

Ed25519 和 DSA 密钥不符合 FIPS。

FIPS 模式下不支持自定义 Diffie-Hellman (DH)参数。注释掉 sshd_config 文件中的 ModuliFile 选项,以确保与 FIPS 模式兼容。您可以在默认位置保留 moduli 文件(默认为/etc/ssh/moduli )。

Postfix

/etc/pki/tls/private/postfix.key

postfix 软件包中包含的安装后脚本会生成 /etc/pki/tls/private/postfix.key 文件。

RHEL web 控制台

/etc/cockpit/ws-certs.d/

Web 控制台运行 /usr/libexec/cockpit-certificate-ensure -for-cockpit-tls 文件,该文件会在 /etc/cockpit/ws-certs.d/ 目录中创建密钥。

sendmail

/etc/pki/tls/private/sendmail.key

sendmail 软件包中包含的安装后脚本会生成 /etc/pki/tls/private/sendmail.key 文件。

要确保对第三方应用程序的加密密钥的 FIPS 合规性,请参阅相应应用程序的对应文档。另外:

  • 打开端口的任何服务都可以使用 TLS 证书。

    • 并非所有服务都会自动生成加密密钥,但许多默认自动启动的服务通常会这样做。
  • 还侧重于使用任何加密库的服务,如 NSS、GnuTLS、OpenSSL 和 libgcrypt。
  • 也检查备份、disk-encryption、file-encryption 和类似的应用程序。
重要

因为 RHEL 8 中的 FIPS 模式限制 DSA 密钥、DH 参数、小于 1024 位的 RSA 密钥以及其它密码,所以旧的加密密钥在从 RHEL 7 升级后停止工作。如需更多信息,请参阅采用 RHEL 8 的注意事项文档中的 核心加密组件中的变化 部分和 RHEL 8 安全强化文档中的 使用系统范围的加密策略 一章。

其他资源

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.