如何使用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安装最新软件包 的相关文章

  • 在Linux伪终端中执行从一个终端发送到另一个终端的字符串

    假设我有一个终端 其中 tty 的输出是 dev pts 2 我想从另一个终端向第一个终端发送命令并执行它 使用 echo ls gt dev pts 2 仅在第一个终端中打印 ls 有没有办法执行字符串 不 终端不执行命令 它们只是数据的
  • bash双括号问题

    我对 bash 脚本非常陌生 在使用双括号时遇到了问题 我似乎无法让它们在 Ubuntu Server 11 10 中工作 我的下面的脚本位于 if test sh 中 bin bash if 14 14 then echo FOO fi
  • 从 Linux 命令行发送 SNMP 陷阱消息

    Folks 我需要从 Linux 命令行使用此命令 snmptrap 将自定义消息发送到陷阱侦听器 我需要根据用户设置在 v1 和 v2c 中发送相同的消息 这是我发现的 For v1 snmptrap v 1 c Tas hostname
  • Alsa 带有来自调制解调器的 PCM 接口

    我有一个基于 imx28 CPU 的定制板 CPU 的串行端口连接到调制解调器的 PCM 输出 我必须为调制解调器的 PCM 接口开发一个驱动程序 使其成为 ALSA SoC 的一部分 您能指出内核树 中与我的设置重新组合的一些驱动程序吗
  • 使用 C++ 输出字符串覆盖 Linux 终端上的最后一个字符串

    假设我有一个命令行程序 有没有办法让我说的时候 std cout lt lt stuff 如果我不做std cout lt lt n 在另一个之间std cout lt lt stuff 东西的另一个输出将覆盖同一行上的最后一个东西 清理行
  • /proc/PID 文件格式

    我想从中检索一些流程信息 proc目录 我的问题如下 中的文件是否有标准格式 proc PID 例如 有这个proc PID status文件与Name t ProcName在第一行 我可以在其他地方用空格代替这个文件吗 t或者类似的东西
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • 静态链接共享对象?或者损坏的文件?

    我有一个从专有来源获得的库 我正在尝试链接它 但出现以下错误 libxxx so 文件无法识别 文件格式无法识别 Collect2 ld 返回 1 退出状态 确实 ldd libxxx so statically linked 这究竟意味着
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • gdb 错误 - 文件不是可执行格式:无法识别文件格式

    我正在尝试使用 gdb 调试某个名为 xdf 的程序 但是当我运行 gdb xdf 时 出现以下错误 home nealtitusthomas X ray astronomy heasoft 6 24 x86 64 pc linux gnu
  • Linux 文本文件操作

    我有一个格式的文件 a href a href a href a href 我需要选择 之后但 之前的文本 并将其打印在行尾 添加后 例如 a href http www wowhead com search Su a a a a a
  • Gradle 1.3:build.gradle 不构建类

    这里有一个新问题 我有一个 build gradle 文件apply plugin java在其中 并与 java 项目 包关联 当我跑步时gradle build从命令行我得到 compileJava UP TO DATE process
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • 确保 config.h 包含一次

    我有一个库项目 正在使用 Linux 中的 autotools 套件移植到该项目 我对自动工具很陌生 本周 我已经了解了其操作的基础知识 我有一个关于如何保留内容的问题config h免遭重新定义 我惊讶地发现生成的config h文件也没
  • CentOS目录结构是树形的吗?

    CentOS 上有相当于树的东西吗 如果你的 Centos 系统上没有安装 tree 无论如何我通常建议服务器设置使用最小安装磁盘 你应该在命令行中输入以下内容 yum install tree y 如果没有安装 那是因为您没有正确的存储库
  • “grep -q”的意义是什么

    我正在阅读 grep 手册页 并遇到了 q 选项 它告诉 grep 不向标准输出写入任何内容 如果发现任何匹配 即使检测到错误 也立即以零状态退出 我不明白为什么这可能是理想或有用的行为 在一个程序中 其原因似乎是从标准输入读取 处理 写入
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 如何从linux命令行运行.exe可执行文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 Windows 中有一个 abc exe 可执行文件 我可以使用 DOS 命令提示来执行此应用程序 并为其提供一些运行时变量 我想从
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 如何调用位于其他目录的Makefile?

    我正在尝试这样做 我想打电话给 make Makefile存在于其他目录中 abc可以使用位于不同目录中的 shell 脚本的路径 我该怎么做呢 由于 shell 脚本不允许我cd进入Makefile目录并执行make 我怎样才能编写she

随机推荐

  • 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