如何使用yum安装最新软件包

2023-11-15

分享请标明来自:https://www.css3.io/how-yum-install-release-soft.html

背景

使用yum安装软件时,会经常遇到安装的软件是老版本的,被非自己期望的release版本。这到底是怎么回事儿,得从rpmyumyum repositories说起。

rpm

RPM Package Manager 是一个包管理系统。管理着许多格式为xxx.rpm的软件,多是二进制包。这些软件都是针对某种平台下编译的,所以可以找准与自己平台对应的包,直接下载安装使用。但是有一个问题,如果像使用rpm -i example.rpm直接去安装这些包时,包会有依赖(比如这个软件需要什么动态库,或者需要python等环境,或者其它什么软件才能运行),必须先安装依赖。这就老火了,手动去安装依赖,依赖还有依赖,最终会非常多的依赖要安装。然后 yum就排上用场了,yum最主要的就时解决依赖问题

yum

yum install xxx 就可以安装软件了,依赖也同时被安装。我们的问题来了,通常这样安装软件我们经常遇到安装了一个老版本,

比如yum install git或者 yum install nodejs时就安装了一个低版本的软件,这是怎么回事儿呢?这跟yum 使用的有关系,请看源(repository)的介绍。

yum repository

repository 简单来说就是对应一个url(专业叫镜像地址),这个url是个列表,里面有很多的软件包。当yum install xxx, 就在里面去查找xxx 以及xxx的依赖。如果这repository里放的xxx是一个较低版本的,我们安装的就是个低版本的软件了。

yum 可以同时使用多个 repository,一搬在/etc/yum.repos.d/路径下,比如我就有这么多

CentOS-Base.repo       CentOS-Media.repo  epel-testing.repo      webtatic.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo  nodesource-el6.repo    webtatic-testing.repo
CentOS-fasttrack.repo  epel.repo          webtatic-archive.repo

.repo

打开.repo文件看,会发现一个.repo文件里面有多个节点,每个节点对应了一个url,这就是我们前面提到的装有很多软件包的url了。节点叫什么名字并不重要,一个.repo里可以包含1个或者多个节点。当yum install xxx安装时,会在每个节点对应的url去查找(前提是每个节都启动了),默认滴会安装xxx最新的一个版本。当然你可以yum list xxx 列出所有的版本,选择安装。yum search xxx是搜索,这个和list 有区别,list是只列出namesearch 会去找name, descr(每个包拥有一些基本信息name,desc等等)等信息包含xxx的软件包。更多可以了解* yum list vs yum search*

其中,有个两个.repo非常重要,默认滴CentOS-Base.repo是主要的一个repository,里面指向了官方的源镜像地址。但是也有不够用的情况,所以epel.repo这个扩展包源就排上用场了,很多时候,会安装老的版本包,加入一个不一样的源,就可能安装一个新版本包了。因为这个新的源里面就有个比较新版的包,yum install xxx会优先安装高版本epel就不多介绍了,还有一些有意思的源,这些源之所以有多种,是因为每个源里的包功能上不一样,比如有些源可能专放一些驱动,有些源专放一些其它工具等等。

如何为yum加入新的repository

你完全可以copy一个.repo,然后手动去改里面的url。也有更方便的方案,就直接yum install安装,比如epel就可以yum install epel-release.(官方提供了这样一个包,其它源里面也可以搜到)安装后,/etc/yum.repos.d/ 路径下就多一个epel.repo文件了,已经自动配置好了。这种自动安装对比手动还是挺好的,因为你不必去记住url。有一个问题,多个源尽量不要混着使用,可能引发依赖问题,或者严重的软件跑不起来,更多参考http://dag.wiee.rs/rpm/FAQ.php#D1。 针对这个问题,我的理解是,混合使用源下载的依赖可能来自其它的源,而其它的源下载的依赖包并非你安装包期望的版本,或者是底层的存储架构(想要个x86 64的下了i386 32的)具体也没见文章说得很清楚,这里自己也有疑问,估计是yum的设计并非针对多个源混用,面对混用源,依赖方面做得有些不足。

当切换repository后依然下载老版本软件包

你会发现,你即使加了一个epel的源,有时候还是下的老版本。原理很简单,你所有的源里面,最高版本就是那个老版本包。举个实际例子,yum install nodejs 的时候,即使你有epel也只能安装0.10.x的版本。其实有解决方案的,这种情况你去看官方是否提供了一个源,比如nodejs官方就提供https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora. 通过命令,你会下载一个nodesource-release-el6-1.noarch.rpm包,然后安装这个rpm包,会增加一个新的源。我这里就多了一个 nodesource-el6.repo源(这个源里面仅仅放了nodejs相关的软件包,及其依赖包),此时你再去 yum install nodejs,就会发现安装的是新版本了。

参考

https://nodejs.org/en/download/package-manager/#enterprise-linux-and-fedora

https://www.centos.org/docs/5/html/yum/sn-searching-packages.html

http://centoshelp.org/resources/repos/

https://www.centos.org/docs/5/html/yum/sn-yum-maintenance.html

https://www.centos.org/docs/5/html/yum/index.html

http://unix.stackexchange.com/questions/50657/is-it-stable-to-use-epel-and-rpmforge-in-the-same-time

http://dag.wiee.rs/rpm/FAQ.php#D1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用yum安装最新软件包 的相关文章

  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 通过 Visual Studio 2017 使用远程调试时 Linux 控制台输出在哪里?

    我的Visual Studio 2017 VS2017 成功连接Linux系统 代码如下 include
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 如何阻止ubuntu在使用apt安装或更新软件包时弹出“Daemons using outdatedlibraries”? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我最近新安装了 Ubuntu 22 04 LTS 我发现每次使用 apt 安装或更新软件包时 它都会询问我有关Which servic
  • GMail 421 4.7.0 稍后重试,关闭连接

    我试图找出为什么它无法使用 GMail 从我的服务器发送邮件 为此 我使用 SwiftMailer 但我可以将问题包含在以下独立代码中
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 添加文件时运行 shell 命令

    我的 Linux 机器上有一个名为 images 的文件夹 该文件夹连接到一个网站 该网站的管理员可以向该网站添加图片 但是 当添加图片时 我想要一个命令来运行调整目录中所有图片的大小 简而言之 我想知道当新文件添加到特定位置时如何使服务器
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • Linux 为一组进程保留一个处理器(动态)

    有没有办法将处理器排除在正常调度之外 也就是说 使用sched setaffinity我可以指示线程应该在哪个处理器上运行 但我正在寻找相反的情况 也就是说 我想从正常调度中排除给定的处理器 以便只有已明确调度的进程才能在那里运行 我还知道
  • Linux/POSIX:为什么 fork() 不分叉*所有*线程

    众所周知 POSIX下创建新进程的默认方式是使用fork 在 Linux 下 这在内部映射到clone 我想知道的是 众所周知 当一个人打电话时fork 子进程是用单个线程创建的 调用的线程fork cf https linux die n
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • cdc_acm:无法设置 dtr/rts - 无法与 USB cdc 设备通信

    我试图使用 pic24fj128gb206 枚举 usb cdc 设备 设备似乎已正确枚举 但是当我将设备连接到 Linux PC 时 我从内核收到以下警告消息 cdc acm 1 8 1 6 7 1 0 failed to set dtr
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的

随机推荐

  • STM32F1和F4的GPIO口模式设置以及对应关系

    目录 GPIO端口8种模式 STM32F103的GPIO配置 STM32F407的GPIO配置 F4的GPIO的8种模式配置 GPIO端口8种模式 输入浮空 输入上拉 输入下拉 模拟输入 开漏输出 推挽输出 推挽复用功能 开漏复用功能 查看
  • Java十万字笔记(带索引)

    目录 Java类与对象学习学习路线 名词的别称 权限修饰符 访问控制权限 属性默认值 类与对象定义 对象的定义和使用 成员属性的权限 构造方法 区别 深拷贝和浅拷贝 成员属性封装 构造重载实例 为何要封装 引用传递 浅拷贝 与垃圾分析 匿名
  • Vue使用AMapUI,JSAPI2.0拖拽定位无法获取定位问题

    在Amap 高德地图 自2021年12月02日升级 升级之后所申请的 key 必须配备安全密钥 jscode 一起使用 如果这里没有没有配备安全密钥的话 会导致INVALID USER SCODE错误 这个问题 需要在加载地图之前配置安全秘
  • Hibernate学习笔记 开始学习

    Hibernate简介 Hibernate是一个优秀的对象关系映射 ORM 框架 如果你有使用纯JDBC写过一个类似博客之类的小程序的话 就知道编写JDBC语句以及转化结果集为Java对象是一件非常繁复的事情 利用Hibernate这样的O
  • 基于神经网络实现手写数字识别(matlab)

    实验目的 在matlab平台上 采用神经网络实现手写数字识别 在实验过程中 1 初步探讨数据集预处理的作用 2 增加对神经网络的理解 探讨隐含层层数 节点数和训练步长对识别成功率的影响 找到较佳的参数 3 应用交叉验证法评估训练模型的优劣
  • Java-基于SSM+JSP的二手手机回收管理系统

    项目背景 21世纪的今天 随着社会的不断发展与进步 人们对于信息科学化的认识 已由低层次向高层次发展 由原来的感性认识向理性认识提高 管理工作的重要性已逐渐被人们所认识 科学化的管理 使信息存储达到准确 快速 完善 并能提高工作管理效率 促
  • 关闭MFC对话框时删除自身

    1 在DLG类中添加成员函数 BOOL DeleteSelft 代码如下 class CDelSelfDlg public CDialog Construction public CDelSelfDlg CWnd pParent NULL
  • Vscode——报错解决:Import “torch“ could not be resolved

    一 原因 当前解释器环境中 没安装torch库 二 解决办法 前提 已经安装PyTorch环境 1 键盘上按快捷键 Ctrl shift P 2 输入 Python Select Interpreter 3 选择PyTorch解释器
  • active directory域服务

    active directory域服务 一 Windows 网络环境 工作组workgroup 域 二 windows域 1 集中管理 2 分域控制器和成员服务器 3 账户保存在域当中 文件名为 ntds dit 4 账户可在整个域当中登陆
  • 直播预告

    12月26日 RTSCon2021开发者沙龙将在线上举办 拍乐云Pano受邀出席 服务端专家沈伟锋将在活动中带来关于 拍乐云融合语音通话技术实践 的主题演讲 RTSCon的前身是FreeSWITCH开发者沙龙 而RTS的全称是Real Ti
  • (十三):图

    1 图的基本介绍 1 1为什么要有图 前面我们学到了线性表和树 线性表局限于直接前驱和一个直接后继结点的关系 树也只能有一个直接前驱也就是父节点 当我们需要多对多关系时候 就需要图 1 2图的举例说明 图是一种数据结构 其中结点可以具有零个
  • SpringBoot优质开源项目分享

    Spring Boot 算是目前 Java 领域最火的技术栈了 也是Java开发人员不得不掌握的技术 今天给大家整理了13个优质 Spring Boot 开源项目给大家参考 希望能够帮助到正在学习 Spring Boot 的小伙伴 小伙伴简
  • RK3568资料汇总

    文档资料 野火 https doc embedfire com products link zh latest linux ebf lubancat html 正点原子 http 47 111 11 73 docs boards arm l
  • python的判断与循环语句

    一 判断语句 1 判断 在程序中如果某些条件满足 才能做某件事情 而不满足时不允许做 这就是所谓的判断 2 if语句的使用格式 if 要判断的条件 条件成立时 要做的事情 如 判断年纪 如果 age 大于 18 输入成年 age 18 if
  • Centos7 交叉编译QT5.9.9源码 AArch64架构

    环境准备 centos7 镜像 下载地址 http mirrors aliyun com centos 7 9 2009 isos x86 64 aarch64交叉编译链 下载地址 https releases linaro org com
  • Java与代码检查与自动化测试

    Java是一种面向对象的编程语言 具有简单 快速 安全 可靠等特点 在Java编程中 代码质量的好坏直接关系到最终软件的质量 为了确保代码质量 我们需要进行代码检查和自动化测试 本文将详细介绍Java代码检查和自动化测试的概念 原则 工具及
  • 【DRAM存储器五】DRAM存储器的架构演进-part2

    个人主页 highman110 作者简介 一名硬件工程师 持续学习 不断记录 保持思考 输出干货内容 参考书籍 Memory Systems Cache DRAM Disk 目录
  • TCP的粘包问题

    TCP transport control protocol 传输控制协议 是面向连接的 面向流的 提供高可靠性服务 收发两端 客户端和服务器端 都要有一一成对的socket 因此 发送端为了将多个发往接收端的包 更有效的发到对方 使用了优
  • python pyinstaller打包参数介绍(转)

    pyinstaller相关参数 F onefile 打包一个单个文件 如果你的代码都写在一个 py文件的话 可以用这个 如果是多个 py文件就别用 D onedir 打包多个文件 在dist中生成很多依赖文件 适合以框架形式编写工具代码 我
  • 如何使用yum安装最新软件包

    分享请标明来自 https www css3 io how yum install release soft html 背景 使用yum安装软件时 会经常遇到安装的软件是老版本的 被非自己期望的release版本 这到底是怎么回事儿 得从r