OS版本升级兼容性问题
当您选择RedHat 7.9 -> 8.x路径进行OS版本升级时,已识别的兼容性问题如表1所示,本章节针对表内各类兼容问题,提供了建议修复方案,帮助您快速恢复设备正常使用,降低升级对系统运行的影响。
|
组件 |
兼容性问题 |
兼容性问题类别 |
具体说明 |
检查步骤 |
修复建议 |
|---|---|---|---|---|---|
|
vsftpd (FTP服务器软件) |
RHEL-8中不再支持tcp_wrappers配置(一种基于TCP层的简易防火墙软件)。 |
配置项unsupport |
Red Hat Enterprise Linux (RHEL) 8不再支持tcp_wrappers配置,因此要移除相关的配置项,减少系统组件冗余。检测相关配置,可用firewalld替代。 |
在RHEL 8中检查vsftpd配置是否支持,特别是检查配置文件中没有设置“tcp_wrappers=YES”,并且vsftpd相关的配置在tcp_wrappers的配置文件中没有同时存在。您可以按照以下步骤进行:
通过以上步骤,您可以确保vsftpd的配置不会因为tcp_wrappers的存在而产生冲突或问题。 |
请参考官方文档进行修复:Replacing TCP Wrappers in RHEL 8 and 9。 |
|
openssh (SSH登录) |
|
|
Ciphers和Mac配置中的一些安全算法过期,需要查询关键词,删除废弃的安全算法。
|
配置文件过滤ciphers和Mac关键词,查询是否存在废弃的安全算法。 |
执行以下命令进入配置文件: vi /etc/ssh/sshd_config 删除如下废弃的安全算法: removed_ciphers = [
"blowfish-cbc",
"cast128-cbc",
"arcfour",
"arcfour128",
"arcfour256",
]
removed_macs = [
"hmac-ripemd160",
] |
|
openssh (SSH登录) |
配置项数值废弃 |
配置项数值废弃 |
ShowPatchLevel是SSH服务器(sshd)的一个配置选项,用于指定在身份验证字符串中是否显示二进制文件的补丁级别。这个选项仅适用于SSH协议版本1,并且默认情况下是关闭的(即不显示补丁级别)。 ShowPatchLevel的作用是开启后向客户端显示sshd的补丁级别信息。在RHEL8中,SSHD默认完全禁用SSH v1协议,仅支持V2,ShowPatchLevel这个配置在v2中毫无作用。SSH v1被认为是不安全的。如果您需要查看特定版本的SSH服务器的补丁级别信息,可能需要查阅该软件的编译时配置或相关文档,而不是依赖于这个已经过时的选项。 删除ShowPatchLevel相关的配置文件。 |
执行以下命令,查询是否存在ShowPatchLevel: bash: grep "ShowPatchLevel" /etc/ssh/sshd_config |
执行以下命令,删除ShowPatchLevel参数:bash: sed -i /^\\s*ShowPatchLevel.*$/Id |
|
openssh (SSH登录) |
配置项数值PermitRootLogin必须设置为YES |
配置默认值变化 |
PermitRootLogin用于控制是否允许 root 用户直接通过 SSH 登录,当从 RHEL 7 升级到 RHEL 8 时,若沿用旧的 sshd_config 配置(如 PermitRootLogin without-password),可能导致 root 用户无法通过 SSH 登录,此时需要将其修改为 PermitRootLogin yes 才能保持兼容性(允许 root 登录)。 |
执行以下命令,如果输出为空,说明没有“PermitRootLogin”相关语句。 bash: grep "PermitRootLogin" /etc/ssh/sshd_config |
执行以下命令: bash: sed -i "s#^PermitRootLogin.*#PermitRootLogin yes#g" /etc/ssh/sshd_config |
|
Bind (DNS服务器软件) |
|
|
1. dnssec-lookaside:这个选项用于指定DNSSEC验证时使用的DLV(Delegation Signer)服务器。随着DNSSEC技术的发展,BIND默认不再支持通过DLV进行签名验证,因此`dnssec-lookaside`语句可能不再被接受。升级到RHEL 8后,Bind会忽略该配置(无报错,配置失效);若配置了自定义 lookaside 区域,可能导致无效查询,影响 DNS 响应效率。如果您需要使用DNSSEC功能,建议检查最新的BIND文档来了解如何正确配置DNSSEC。 2. listen-on-v6:这是BIND配置文件中用来指定监听IPv6地址的选项。如果您的配置文件中没有明确设置`listen-on-v6`,BIND会根据其默认行为来决定是否监听IPv6连接。通常情况下,默认行为是监听所有可用的网络接口,包括IPv6接口。这意味着即使您没有显式地在配置文件中设置`listen-on-v6`,BIND也可能已经在监听IPv6请求了。 RHEL 7默认关闭,RHEL 8默认开启。RHEL 8即使没有配置listen-on-v6,也会监听所有可用的ipv6接口。升级以后可能与预期冲突,如果在RHEL 7是明确关闭了(如listen-on-v6 { none; };) 升级以后可能因配置改变或者优先级变化导致失效。建议修复方式是显示配置,确保与预期一致。 |
|
删除dnssec-lookaside,如果仍然需要该功能,参考官方文档去修订; 根据期望用法去显示配置开关或者不配置listen-on-v6。 |
|
pam_pkcs11.so pam_krb5.so |
so库不再支持 |
so库不再支持 |
|
执行以下两条命令,查询对应的so库配置: bash: grep "pam_pkcs11.so" /etc/pam.d/* grep "pam_krb5.so" /etc/pam.d/* |
移除或者注释不支持的so库配置。 更多请参考官方文档。 |
|
pam_tally2.so |
so库不再支持 |
so库不再支持 |
pam_tally2.so 是一个 PAM(Pluggable Authentication Modules,可插拔认证模块)模块,它主要用于对用户的登录失败次数进行统计和限制。该模块可以跟踪用户连续登录失败的次数,当达到预设阈值时,会临时锁定用户账户,防止暴力破解或恶意登录尝试,增强系统的安全性(适用于本地登录、SSH 远程登录等多种认证场景)。 在RHEL 8中,该模块被pam_faillock.so 取代,pam_tally2.so 不再默认安装且官方不再维护。若升级后仍在 PAM 配置文件(如 /etc/pam.d/sshd、/etc/pam.d/system-auth)中引用 pam_tally2.so,会导致模块找不到(module not found),进而引发认证流程失败。 |
执行以下命令,查询so库配置: bash: grep "pam_tally2.so" /etc/pam.d/* |
移除或者注释不支持的so库配置。 |
|
Firewalld (防火墙软件) |
防火墙规则大量变动,多项用法不再支持 |
配置项大change |
Firewalld 对防火墙规则的支持范围进行了精简,尤其在 Ebtables 类型 和 IpSetType 上明确了仅支持的子集,不符合的类型会导致规则失效或防火墙启动失败。 |
排除法:
|
需检查所有防火墙规则和配置文件,将不符合的类型替换为支持的类型,删除不支持的用法(按照对应版本文档说明重新修正,RHEL8防火墙配置链接)。 |
|
Btrfs (新型文件系统) |
Btrfs组件在8中被弃用 |
组件废弃 |
Btrfs是一款设计用于高端存储需求的现代文件系统,支持快照、 RAID、动态卷管理等高级功能。在RHEL7中作为可选组件。 RHEL8中弃用btrfs,升级时不再提供btrfs作为可选文件系统,无法在系统安装时将分区格式化为btrfs。官方仓库中移除了btrfs的核心工具包。 |
可以参考官方文档进行检查修复。
|
|
|
XFS (高性能的日志型文件系统) |
配置项废弃 |
配置项unsupport |
XFS是一个高度可扩展、高性能、健壮和成熟的64位日志文件系统,支持单个主机上的非常大的文件和文件系统。它是RHEL 8中的默认文件系统,存在一些废弃的配置项: |
检查是否存在废弃的配置项。
使用以下命令查询: grep -E 'nodelaylog|delaylog|ihashsize|irixsgid|osyncisdsync|osyncisosync|nobarrier|barrier' /etc/fsta |
删除废弃的配置项,查看手册用新的配置项替代。 |
|
Docker (容器) |
Docker被Podman取代 |
组件替代 |
RHEL 7提供docker软件包,RHEL 8弃用了docker,推荐使用Podman。需要迁移现有Docker容器以适应 RHEL 8 的环境,升级方式可能是手动重装系统或通过leapp工具升级。 |
请参考官方文档进行迁移。 |
请参考官方文档进行迁移。 |
|
babeld (网流分析工具) |
babeld被RIP、OSPF 或EIGRP取代 |
组件替代 |
在RHEL 8中,由于许可问题,Babeld守护进程(之前是Quagga实现的一部分)不再包含在FRR(Frrouting)中。这意味着如果您您您需要使用Babel协议,可能需要寻找其他替代方案或手动安装Babeld。FRR项目已经从其官方软件包中移除了Babeld,因此用户需要单独处理Babel协议的支持。如果您有这方面的需求,可以考虑直接从Babel项目的官方网站获取并安装Babeld。 |
执行以下命令: bash: dnf list installed | grep -E "babeld|frr" 若RHEL 8中未显示上述包,且FRR已安装但无Babel组件,则确认Babeld被移除。 |
如需使用网流分析功能,需要在RHEL 8中手动部署Babeld(Babel官网下载源码编译安装)或者安装替代软件(如OSPF,RIP,IS-IS等)。 |
|
GRUB2 |
分区大小不足 |
分区大小 |
在GRUB2的启动机制中,核心映像(core.img)作为承载核心功能的中间镜像,包含了启动所需的核心功能模块,比如基本的硬件驱动、文件系统支持、引导逻辑等,需要被安装到磁盘的特定嵌入区。如果嵌入区空间不足,GRUB2在安装core.img时会失败,通常会提示 “嵌入区空间不足” 之类的错误,导致无法完成引导程序的安装。core.img一般占用20kb-30kb的空间。 |
传统 MBR 磁盘,请执行以下命令: bash: fdisk -l 检查第一个磁盘的起始位置,MBR占用一个扇区,嵌入区大小为(起始扇区-1)*512字节。以此验证嵌入区空间是否足够。 |
如空间不足,不支持原地升级,重装系统或者格式化分区。 |
|
GRUB2 |
不支持GRUB1版本升级,GRUB1版本已废弃在高版本中 |
组件废弃 |
从RHEL 7开始,GRUB Legacy已经被GRUB2所取代,因此在较新的系统上,GRUB Legacy通常不会出现在MBR中。 |
如果您已经安装了GRUB2,可以通过检查“/boot/grub2/grub.cfg”文件或者使用“grub-install”命令来确认GRUB2的状态,间接判断GRUB Legacy是否被移除。 bash: grub-install --version 或者 grub2-install --version 如果系统返回GRUB2的版本信息,则说明GRUB2已正确安装,并且GRUB Legacy很可能已经被移除。可以使用“ls -ld /boot/grub”判断是否有GRUB Legacy残留 bash: ls -ld /boot/grub |
请参考官方文档手动安装grub2软件。 |
|
pacemaker cluster |
不支持集群软件升级 |
组件废弃 |
对于 Pacemaker,从 RHEL 7到 RHEL 8的原地升级(通过 leapp 工具)不被支持。红帽官方明确指出,对于部署了 High Availability 或 Resilient Storage 附加组件的集群环境,不推荐使用 leapp 进行原地升级。 |
检测是否存在相关配置文件: bash: ls /etc/corosync/corosync.conf ls /var/lib/pacemaker/cib/cib.xml 若输出“No such file or directory”则没有相关配置文件。 |
不建议原地升级,建议逐个替换节点、分布迁移,然后销毁整个集群 sh -c pcs cluster stop --all --wait && pcs cluster destroy --all 更多详情可参考官方文档。 |
|
KDE |
不支持KDE桌面软件 |
组件废弃 |
在RHEL 8中,KDE桌面环境默认是不可用的。如果您当前系统中安装了与KDE相关的软件包,在进行升级操作时,这些KDE相关的软件包将会被移除。因此,升级完成后,您的系统将不会有任何桌面环境。 如果需要桌面,请安装GNOME替代软件。 |
执行以下命令,确认是否安装了GNOME桌面软件。 bash: rpm -qa | grep -i gnome-shell |
升级后手动安装GNOME桌面软件替代 dnf groupinstall "Server with GUI" -y 或 dnf groupinstall "Workstation" -y |
|
sendmail |
sendmail高版本不再支持TCP Wrappers |
配置项unsupport |
HEL 7升级到 RHEL 8的过程中,sendmail 与 TCP Wrappers产生冲突。要检查 sendmail是否已安装,并确定是否需要更新配置,同时如果使用了TCP Wrappers,则禁止升级。为避免升级后sendmail服务异常,需在升级前执行以下检查,若发现依赖TCP Wrappers,则需禁止升级或调整配置。 |
|
移除废弃的配置项或者迁移到新配置项 原TCP Wrappers配置用于sendmail访问控制,可改用firewalld实现同等功能(RHEL 8 推荐方式)。 |
|
SpamAssassin |
后向不兼容 |
后向不兼容 |
RHEL 8 对软件安全性、标准化和现代化的强化,SpamAssassin(一款常用的反垃圾邮件过滤工具)出现的 “后向不兼容” 问题。RHEL 7中的部分配置、命令选项或协议支持在新版本中被移除或修改。 |
对于配置文件的迁移,大部分工作将由SpamassassinConfigUpdate操作员自动完成。 |
大量不兼容,手动迁移。 |
|
kernel |
存在多个版本的kernel-debug rpm包 |
内核包冲突 |
存在kernel-debug可能会影响OS版本升级后的系统引导项问题,导致重启系统后无法进入正确的系统。 |
执行以下命令,查看系统引导项信息。 bash: grubby --info=ALL |
查看默认引导项,删除其中的配置参数。 bash: grubby --default-index grubby --update-kernel=默认引导项索引索引 --remove-args="rd.break easyup.rollback" |
|
kernel |
存在多个版本的kernel-devel rpm包 |
内核包冲突 |
kernel-devel作为内核开发文件包,其内容(如内核头文件、模块开发工具等)与特定内核版本强绑定,多个版本共存易引发文件路径冲突、依赖关系紊乱等问题。包管理器在处理升级时,需校验新旧版本的依赖链,多版本共存会让依赖解析逻辑复杂化,可能出现 “版本不匹配”“依赖循环” 等错误,甚至导致升级过程中断或安装不完整。在升级前确保环境中没有Kernel-devel包,以免影响升级。 |
删除与未使用的内核相对应的kernel-devel包,以便最多安装一个kernel-devel包。 |
使用以下命令卸载内核开发包。 bash: yum -y remove <package_name> 更多请参考官方文档。 |
|
device-mapper-multipath |
配置项默认值变化 |
配置项默认值变化 |
device-mapper-multipath 用于将多个物理存储路径聚合为一个逻辑路径,实现存储访问的冗余和负载均衡。其核心功能之一是路径健康检测—— 通过`path_checker`选项定义检测方法,判断存储路径是否可用。 RHEL 7中`path_checker`默认值为`directio`。RHEL 8中`path_checker`默认值变更为"tur"。如果用户的配置文件中仍然保留了旧的`path_checker`设置,可能会导致与系统默认配置冲突的问题。 |
执行以下命令,检查当前配置。 bash: grep "default_path_checker|detect_prio|detect_path_checker|reassign_maps|retain_attached_hw_handler" /etc/multipath.conf |
移除旧配置或者显示配置。 |
|
Satellite |
数据存储位置变更 |
数据存储位置变更 |
从RHEL 7 升级到 RHEL 8的过程中/var/lib/pgsql/data 存在旧的 PostgreSQL 数据,以及从 /var/opt/rh/rh-postgresql12/lib/pgsql/data/ 迁移到 RHEL 8 要求的 /var/lib/pgsql/data 时存储空间不足,导致自动迁移无法进行 |
确认当前系统中 Red Hat Satellite 的安装状态和具体版本。 bash: rpm -q Satellite 可能出现需要警惕的情况:
|
请参考官方文档手动迁移数据 |
|
SSSD |
|
|
RHEL 8 中 SSSD(System Security Services Daemon)配置的重要调整,主要涉及兼容性和默认行为的变更,可能影响系统身份认证和用户信息管理。 |
1. “id_provider=local”不再被支持,并将被忽略。 2. “ldap_groups_use_matching_rule_in_chain”选项已被移除,并将被忽略。 3. “ldap_initgroups_use_matching_rule_in_chain”选项也被移除,并将被忽略。 4. “ldap_sudo_include_regexp”的默认值从true更改为false。 |
注释移除废弃的配置项。 修改默认值。 |
|
tcp_wrappers |
tcp_wrappers废弃 |
配置项废弃 |
TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接(TCP)的特定服务进行安全检测并实现访问控制,界定方式是凡是调用libwrap.so库文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet 升级后hosts.deny 和hosts.allow中的规则会失效 Red Hat Enterprise Linux (RHEL) 8不再支持tcp_wrappers配置,因此要移除相关的配置项,减少系统组件冗余。检测相关配置,可用firewalld替代。 |
请参考官方文档。 |
请参考官方文档移除不支持的配置项。 |
|
zipl |
引导工具冲突 |
引导工具冲突 |
在 RHEL 7 升级到 RHEL 8 的过程中,IBM S/390 和 zSeries 架构的引导工具 zipl(zSeries Initial Program Loader)可能因配置、功能或依赖变化产生兼容性问题,核心涉及配置文件 /etc/zipl.conf的语法、选项支持及与新系统组件的适配。部分 RHEL 7 中有效的配置项在 RHEL 8 中被移除或重命名,导致旧配置失效。 |
|
|
|
FILESYSTEM软件包与文件系统挂载机制 |
将ISO镜像挂载到/mnt 目录会导致 filesystem 软件包升级失败 |
镜像挂载问题 |
使用mount命令挂载镜像文件。使用iso作为源进行系统升级时,不能将iso挂载到/mnt目录,否则会造成Filessystem软件包升级失败。 |
检测/mnt目录是否有挂载的系统文件,如果有就提示用户卸载。 bash: df -h | grep /mnt |
卸载/mnt目录挂载的系统文件。 bash: umount /mnt |
|
SELinux |
SELinux规则差异化 |
SELinux规则差异化 |
SELinux在升级过程中,由于系统会对大量文件、进程进行修改或替换,可能与SELinux的安全策略冲突,进而影响升级参考官方文档。 |
使用“getenforce”检测SELinux模式。 bash: getenforce |
如果是Enforcing模式则临时修改为Permissive模式。 bash: sudo setenforce 0 |
|
特殊权限文件 |
特殊权限文件 |
特殊权限文件 |
特殊权限对文件的保护逻辑与升级所需的文件可操作性需求相矛盾,可能导致升级中断。 |
执行命令查询特殊权限文件: bash: lsattr -alR ${dir} 2>/dev/null | grep -E "Append_Only|Immutable"
使用以下路径代替命令中的${dir}:
|
手动修改特殊权限文件的权限。 bash: chattr -a -i <具体文件名> |