[RHEL8] 指定rpm软件包的更高版本模块流

背景:挂载RHEL ISO使用kickstart安装操作系统,安装包未指定安装perl,但是安装完可以查到其版本,且安装的是ISO中多个版本中的最低版本。

原因:(1)为什么没有装perl,perl -v可以看到版本?

因为安装perl其它包而安装了perl-libs等

如何找到是哪个包依赖了perl-libs等?

- 针对包组,查看@core里装哪些包 dnf groupinfo core -> 排除是这里面默认装的

- 针对指定包,查看其它指定包依赖于哪些包,例如perl-xxx

查看依赖关系的命令

dnf repoquery –requires <pkg name> 查看指定包依赖于哪些包

dnf repoquery –whatrequires <pkg name> 查看哪些包依赖于指定包

dnf repoquery --help | grep require
                     [--whatrequires REQ] [--whatrecommends REQ]
                     [--conflicts | --depends | --enhances | --provides | --recommends | --requires | --requires-pre | --suggests | --supplements]
  --whatdepends REQ     shows results that requires, suggests, supplements,
  --whatrequires REQ    shows results that requires package provides and files
  --recursive           used with --whatrequires, and --requires --resolve,
  --requires            Display capabilities that the package depends on.
  --requires-pre        If the package is not installed display capabilities

  --recursive           used with --whatrequires, and --requires --resolve,
                        query packages recursively.

[root@xxx ~]# dnf repoquery --requires perl-DBD-SQLite-1.58-2.module+el8.6.0+13408+461b4ab5.x86_64
Updating Subscription Management repositories.
Unable to read consumer identityThis system is not registered with an entitlement server. You can use subscription-manager to register.Last metadata expiration check: 2:02:32 ago on Sat 15 Mar 2025 01:18:35 PM CST.
libc.so.6(GLIBC_2.14)(64bit)
libperl.so.5.32()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libsqlite3.so.0()(64bit)
perl(:MODULE_COMPAT_5.32.1)
perl(:VERSION) >= 5.6.0
perl(DBD::SQLite)
perl(DBD::SQLite::VirtualTable)
perl(DBI) >= 1.57
perl(DynaLoader)
perl(Exporter)
perl(Scalar::Util)
perl(Tie::Hash)
perl(base)
perl(constant)
perl(locale)
perl(strict)
perl(warnings)
rtld(GNU_HASH)

(2)为什么安装的是最低版本

RHEL 8 使用 模块化(modular)仓库,某些软件包(如 perl-libs)属于 应用流(AppStream,系统会默认启用某个流(stream)。Kickstart 默认安装的软件包可能受 默认模块流 影响,而非安装最高版本。

解决方案:

指定好repo,例如将iso挂载到/mnt,编辑os.repo

# cat /etc/yum.repos.d/os.repo
...[rhel-baseos]
name=RHEL8
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release[rhel-appstream]
name=RHEL8
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

执行 dnf clean all

查看 dnf repolist

# dnf repolist
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
repo id                                                         repo name
rhel-appstream                                                  RHEL8
rhel-baseos                                                     RHEL8

重置并启用指定模块的最新流

dnf module reset -y perl 
dnf module enable -y perl:5.32
dnf distro-sync -y

说明:
dnf module reset 清除默认模块流,防止使用默认的旧版本。
dnf module enable 指定最新版本的模块流。
dnf distro-sync 确保所有包同步到最高版本。

=================================================

附1:

RHEL 8 本地 RPM 升级(包括模块化包)完整步骤

适用于 从本地目录升级 RPM ,确保 模块化包(AppStream)使用较新版本

步骤 1:准备本地升级包

将所有 需要升级的 RPM 放在一个目录,例如:

mkdir -p /var/update-packages

cp /path/to/rpms/*.rpm /var/update-packages/

步骤 2:创建本地仓库

RHEL 8 需要 createrepo_c 来索引 RPM 包:

dnf install -y createrepo_c

cd /var/update-packages/

createrepo_c  .

如果包含 模块化包(AppStream,还需要 处理 module metadata

# cd /var/update-packages/

# repo2module -s stable /var/update-packages/

# modifyrepo_c --mdtype=modules modules.yaml repodata/

步骤 3:配置本地 repo

在 /etc/yum.repos.d/local.repo 添加以下内容:

[local-updates]

name=Local Update Repo

baseurl=file:///var/update-packages/

enabled=1

gpgcheck=0

然后执行:

dnf clean all

dnf makecache

步骤 4:重置 & 启用模块

dnf module reset -y perl python nodejs

dnf module enable -y perl:5.32 python:3.9 nodejs:18

步骤 5:执行升级

dnf upgrade --disablerepo=* --enablerepo=local-updates -y

步骤 6(可选):检查结果

dnf list installed | grep perl

dnf module list | grep '[e]'

=================================================

附2:chatGPT提问记录

Q: 哪些软件涉及模块流?

RHEL 8+ 里,涉及模块流的软件通常是:

  1. 编程语言
    • perl(5.26, 5.30, 5.32)
    • python(3.6, 3.8, 3.9, 3.11)
    • nodejs(10, 12, 14, 16, 18)
    • ruby(2.5, 2.6, 2.7, 3.0)
    • php(7.2, 7.3, 7.4, 8.0)
    • gcc-toolset(9, 10, 11, 12)
  2. 数据库
    • postgresql(9.6, 10, 12, 13, 14)
    • mariadb(10.3, 10.5)
  3. Web 服务器 & 代理
    • httpd(Apache HTTP Server)
    • nginx
    • varnish
  4. 消息队列
    • redis
    • rabbitmq
  5. 其他开发工具
    • llvm-toolset
    • subversion

Q: 如何查看系统里有哪些模块流?

dnf module list --all

  • [d] 代表默认启用的模块流(default)
  • [e] 代表已启用的模块流(enabled)
# dnf module list
Updating Subscription Management repositories.
Unable to read consumer identityThis system is not registered with an entitlement server. You can use subscription-manager to register.@modulefailsafe
Name                Stream      Profiles         Summary
perl                5.26 [e]    common, minimal  Practical Extraction and Report Language
perl-DBD-SQLite     1.58 [e]    common           SQLite DBI driver
perl-DBI            1.641 [e]   common           A database access API for Perl
perl-IO-Socket-SSL  2.066 [e]   common           Perl library for transparent TLS
perl-libwww-perl    6.34 [e]    common           A Perl interface to the World-Wide Web
x86_64              stable [e]  everything       <auto-generated module summary>Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

说明:

Name 列:模块名称,如 perl、perl-DBI 等。
Stream 列:已启用的模块流(版本),例如:
Profiles 列:模块的 可选配置,如 common, minimal。
Summary 列:简要描述。

perl 5.26 [e]
[e] 代表 已启用(enabled),表示当前 dnf 只能从这个流 安装 perl 相关包。
perl 5.26 已启用,所以无法直接安装 perl 5.32,需要先 dnf module reset perl,然后 dnf module enable perl:5.32。

@modulefailsafe
说明 dnf 处于“failsafe”模式,因为你的系统没有 Red Hat 订阅(RHSM 未注册)。
这意味着 dnf 只能使用 本地已启用的模块流,不会尝试访问外部仓库。

Q: 为什么环境装了python3.12 却不能在dnf module list里查到

  • AppStream 里有两种类型的软件包:
    1. 模块化软件包(module-based,可以使用 dnf module 管理,例如 perl, nodejs, python:3.9。
    2. 非模块化软件包(普通 RPM 包),可以直接用 dnf install 安装,例如 python3.12。
  •  python3.12 可能是 AppStream 里的普通 RPM 包,而不是模块流,所以 dnf module list 里不会列出来。RHEL 8 默认的 Python 模块流最高是 python:3.9

Q: 查看某个rpm包来自哪个仓库

dnf repoquery --info python3.12

Name         : python3.12

Version      : 3.12.1

Release      : 4.el8

Architecture : x86_64

Size         : 29 k

Source       : python3.12-3.12.1-4.el8.src.rpm

Repository   : rhel-appstream

Summary      : Version 3.12 of the Python interpreter

URL          : https://www.python.org/

License      : Python

Description  : Python 3.12

……

dnf module list python

[root@testVM1 ~]# dnf module list | grep python

libselinux-python    2.8             common                                   Python 2 bindings for libselinux                                                                                                                                                                  

python27             2.7 [d]         common [d]                               Python programming language, version 2.7                                                                                                                                                          

python36             3.6 [d]         build, common [d]                        Python programming language, version 3.6                                                                                                                                                          

python38             3.8 [d]         build, common [d]                        Python programming language, version 3.8                                                                                                                                                          

python39             3.9 [d]         build, common [d]                        Python programming language, version 3.9                                                                                                                                                          

[root@testVM1 ~]#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring 事务管理核心机制与传播行为应用

Spring 事务详解 一、Spring 事务简介 Spring 事务管理基于 AOP&#xff08;面向切面编程&#xff09;实现&#xff0c;通过 声明式事务&#xff08;注解或 XML 配置&#xff09;统一管理数据库操作&#xff0c;确保数据一致性。核心目标&#xff1a;保证多个数据库操作的原子…

JavaScript解密实战指南:从基础到进阶技巧

JavaScript加密技术广泛应用于数据保护、反爬虫和代码混淆&#xff0c;但掌握解密方法能帮助开发者突破技术壁垒。本文结合爬虫实战与安全分析场景&#xff0c;系统梳理JS解密的核心方法与工具。 一、基础解密方法 1. Base64解码 适用于简单编码场景&#xff0c;如Cookie加密…

WEMOS LOLIN32

ESP32是結合Wi-Fi和藍牙的32位元系統單晶片&#xff08;SoC&#xff09;與外接快閃記憶體的模組。許多廠商生產採用ESP32模組的控制板&#xff0c;最基本的ESP控制板包含ESP32模組、直流電壓轉換器和USB序列通訊介面IC。一款名為WEMOS LOLIN32的ESP32控制板具備3.7V鋰電池插座。…

俄罗斯方块-简单开发版

一、需求分析 实现了一个经典的俄罗斯方块小游戏&#xff0c;主要满足以下需求&#xff1a; 1.图形界面 使用 pygame 库创建一个可视化的游戏窗口&#xff0c;展示游戏的各种元素&#xff0c;如游戏区域、方块、分数等信息。 2.游戏逻辑 实现方块的生成、移动、旋转、下落和锁…

使用安全继电器的急停电路设计

使用安全继电器的急停电路设计 一&#xff0c;急停回路的设计1&#xff0c;如何将急停接到线路当中&#xff1f;2&#xff0c;急停开关 如何接到安全继电器中 一&#xff0c;急停回路的设计 急停是每一个设备必不可少的部分&#xff0c;因为关乎安全&#xff0c;所以说所以说他…

【读书笔记·VLSI电路设计方法解密】问题64:什么是芯片的功耗分析

低功耗设计是一种针对VLSI芯片功耗持续攀升问题的设计策略。随着工艺尺寸微缩&#xff0c;单颗芯片可集成更多元件&#xff0c;导致功耗相应增长。更严峻的是&#xff0c;现代芯片工作频率较二十年前大幅提升&#xff0c;而功耗与频率呈正比关系。因此&#xff0c;芯片功耗突破…

在 Debian 10.x 安装和配置 Samba

1. 更新系统 sudo apt update sudo apt upgrade -y2. 安装 Samba sudo apt install samba -y3. 配置 Samba 备份默认配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak编辑配置文件 sudo nano /etc/samba/smb.conf示例配置&#xff08;共享目录&#xff09; …

修改PointLIO项目

添加key_frame_info.msg消息 新建.msg文件&#xff0c;内容填写为&#xff1a; # Cloud Info Header header # cloud messages sensor_msgs/PointCloud2 key_frame_cloud_ori sensor_msgs/PointCloud2 key_frame_cloud_transed sensor_msgs/PointCloud2 key_frame_poses其中k…

关于隔离1

1.隔离的目的&#xff1a; 在隔离电源设计中&#xff0c;输入与输出之间没有直接电气连接&#xff0c;提供绝缘高阻态&#xff0c;防止电流回路。这意味着输入与输出之间呈现为绝缘的高阻态&#xff0c;从而确保了无电流回路的形成。 隔离与可靠保护有关。电隔离是一种电路设…

【java实现+4种变体完整例子】排序算法中【插入排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格

以下是插入排序的详细解析&#xff0c;包含基础实现、常见变体的完整代码示例&#xff0c;以及各变体的对比表格&#xff1a; 一、插入排序基础实现 原理 将元素逐个插入到已排序序列的合适位置&#xff0c;逐步构建有序序列。 代码示例 public class InsertionSort {void…

清醒思考的艺术

成为穿越暴风雨后的幸存者 系统性错误是指系统性的偏离理性&#xff0c;偏离最理想的、合乎逻辑的、理智的思考和行为。 “系统”一词很重要&#xff0c;因为我们经常错误地走向同一方向。 幸存偏误 幸存偏误会扭曲概率&#xff0c;系统性的高估了成功概率。一旦混淆选择标准和…

DSA数据结构与算法 6

查找技术&#xff08;Searching Techniques&#xff09; 查找简介 在计算机科学中&#xff0c;“查找”指的是在某个集合或序列中寻找特定元素的过程。这个过程可以是成功的&#xff0c;也可以是失败的&#xff1a; 若目标元素存在于集合中&#xff0c;我们称之为“查找成功”…

FastAPI:现代高性能Python Web框架的技术解析与实践指南

一、FastAPI的诞生背景与技术定位 在数字化转型的浪潮中,API(应用程序接口)作为连接服务与数据的核心枢纽,其性能与开发效率直接影响业务迭代速度。传统Python框架如Django和Flask虽功能丰富,但在高并发场景下面临性能瓶颈,且缺乏对异步编程的原生支持。FastAPI应运而生…

VuePress 使用教程:从入门到精通

VuePress 使用教程&#xff1a;从入门到精通 VuePress 是一个以 Vue 驱动的静态网站生成器&#xff0c;它为技术文档和技术博客的编写提供了优雅而高效的解决方案。无论你是个人开发者、团队负责人还是开源项目维护者&#xff0c;VuePress 都能帮助你轻松地创建和管理你的文档…

1.Vue自动化工具安装(Vue-cli)

目录 1.node.js 安装&#xff1a; 2 npm 安装 3 安装Vue-cli 4总结&#xff1a; 一般情况下&#xff0c;单文件组件&#xff0c;我们运行在 自动化工具vue-CLI中&#xff0c;可以帮我们编译单文件组件。所以我们在学习时一般需要在系统中先搭建vue-CLI工具 下面就是一些我…

IP数据报

IP数据报组成 IP数据报&#xff08;IP Datagram&#xff09;是网络中传输数据的基本单位。 IP数据报头部 版本&#xff08;Version&#xff09; 4bit 告诉我们使用的是哪种IP协议。IPv4版本是“4”&#xff0c;IPv6版本是“6”。 头部长度&#xff08;IHL&#xff0c;Intern…

Leetcode 2158. 每天绘制新区域的数量【Plus题】

1.题目基本信息 1.1.题目描述 有一幅细长的画&#xff0c;可以用数轴来表示。 给你一个长度为 n 、下标从 0 开始的二维整数数组 paint &#xff0c;其中 paint[i] [starti, endi] 表示在第 i 天你需要绘制 starti 和 endi 之间的区域。 多次绘制同一区域会导致不均匀&…

Git Flow

Git Flow深度解析&#xff1a;企业级分支管理实战指南 前言 在持续交付时代&#xff0c;分支策略决定团队协作效率。Git Flow作为经典的分支管理模型&#xff0c;被Apache、Spring等知名项目采用。2023年JetBrains开发者调查报告显示&#xff0c;Git Flow仍是中大型项目最常用…

[Swift]pod install成功后运行项目报错问题error: Sandbox: bash(84760) deny(1)

操作&#xff1a; platform :ios, 14.0target ZKMKAPP do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!# Pods for ZKMKAPPpod Moyaend pod install成功后运行报错 报错&#xff1a; error: Sandbox: bash(84760) deny(1) file-writ…

[管理与领导-129]:向上管理-组织架构、股权架构、业务架构、流程架构,看每个人在组织中的位置和重要性

目录 一、股权架构&#xff1a;反映所有权与控制权 二、组织架构&#xff1a;定义角色与汇报关系 三、业务架构&#xff1a;定义业务单元与价值链 四、流程架构&#xff1a;规范业务运作与协作 五、综合分析&#xff1a;个人在组织中的综合影响力 六、案例&#xff1a;某…