> 文档中心 > Linux上 如何查找yum安装包所缺缺少的依赖包及报错处理

Linux上 如何查找yum安装包所缺缺少的依赖包及报错处理


Linux上 如何查找yum安装包所缺缺少的依赖包及报错处理

文章目录

  • Linux上 如何查找yum安装包所缺缺少的依赖包及报错处理
  • 🌈前言
  • 🌈准备工作
  • 🌈遇到的问题
  • 🌈问题分析与解决
    • 🌍一. 缺少依赖包报错:
      • 💖1.找到依赖所在的包
      • 💖2.下载所需的依赖包
      • 💖我又遇到问题
    • 🌍二 版本太低导致的
      • 💖1.检查系统上的版本
      • 💖2. 删除系统上的版本
    • 🌍三 安装包的版本不对
  • 🌈yum 命令
  • 🌈后记

🌈前言

大家在不能上外网的Linux上yum安装一包时,如果报错是不是感觉天塌了下来,接下来我们来讲讲遇到这个情况咋处理。

🌈准备工作

首先,你需要一台能上网的电脑,可以与你安装的不在一个内网中,毕竟要来下载依赖包。

环境:

Linux web-api 3.10.0-1160.36.2.el7.x86_64 #1 SMP Wed Jul 21 11:57:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰

🌈遇到的问题

现在以为某一次遇到问题来分析,问题如下:

[root@fxyjgxsql postgis32]# yum localinstall *.rpm -yLoaded plugins: fastestmirrorExamining armadillo-8.600.1-2.el7.x86_64.rpm: armadillo-8.600.1-2.el7.x86_6...........---> Package xerces-c.x86_64 0:3.1.1-10.el7_7 will be an update--> Finished Dependency ResolutionError: Package: libtiff-devel-4.0.3-35.el7.x86_64 (/libtiff-devel-4.0.3-35.el7.x86_64)    Requires: libtiff(x86-64) = 4.0.3-35.el7    Installed: libtiff-4.0.3-27.el7_3.x86_64 (@anaconda) libtiff(x86-64) = 4.0.3-27.el7_3Error: Package: libquadmath-devel-4.8.5-16.el7.x86_64 (@anaconda)    Requires: libquadmath = 4.8.5-16.el7    Removing: libquadmath-4.8.5-16.el7.x86_64 (@anaconda) libquadmath = 4.8.2-16.el7 libquadmath = 4.8.5-16.el7    Updated By: libquadmath-4.8.5-44.el7.x86_64 (/libquadmath-4.8.5-44.el7.x86_64) libquadmath = 4.8.2-16.el7 libquadmath = 4.8.5-44.el7    Available: libquadmath-4.8.5-36.el7_6.2.x86_64 (hrmw) libquadmath = 4.8.5-36.el7_6.2 libquadmath = 4.8.2-16.el7_6Error: Package: gpsbabel-1.5.0-2.el7.x86_64 (/gpsbabel-1.5.0-2.el7.x86_64)    Requires: libQtCore.so.4()(64bit)Error: Package: boost-chrono-1.53.0-27.el7.x86_64 (@hrmw)    Requires: boost-system(x86-64) = 1.53.0-27.el7    Removing: boost-system-1.53.0-27.el7.x86_64 (@anaconda) boost-system(x86-64) = 1.53.0-27.el7    Updated By: boost-system-1.53.0-28.el7.x86_64 (/boost-system-1.53.0-28.el7.x86_64) boost-system(x86-64) = 1.53.0-28.el7Error: Package: boost-filesystem-1.53.0-27.el7.x86_64 (@hrmw)    Requires: boost-system(x86-64) = 1.53.0-27.el7    Removing: boost-system-1.53.0-27.el7.x86_64 (@anaconda) boost-system(x86-64) = 1.53.0-27.el7    Updated By: boost-system-1.53.0-28.el7.x86_64 (/boost-system-1.53.0-28.el7.x86_64) boost-system(x86-64) = 1.53.0-28.el7Error: Package: gcc-gfortran-4.8.5-16.el7.x86_64 (@anaconda)    Requires: libquadmath = 4.8.5-16.el7    Removing: libquadmath-4.8.5-16.el7.x86_64 (@anaconda) libquadmath = 4.8.2-16.el7 libquadmath = 4.8.5-16.el7    Updated By: libquadmath-4.8.5-44.el7.x86_64 (/libquadmath-4.8.5-44.el7.x86_64) libquadmath = 4.8.2-16.el7 libquadmath = 4.8.5-44.el7    Available: libquadmath-4.8.5-36.el7_6.2.x86_64 (hrmw) libquadmath = 4.8.5-36.el7_6.2 libquadmath = 4.8.2-16.el7_6Error: Package: gcc-gfortran-4.8.5-16.el7.x86_64 (@anaconda)    Requires: libgfortran = 4.8.5-16.el7    Removing: libgfortran-4.8.5-16.el7.x86_64 (@anaconda) libgfortran = 4.8.2-16.el7 libgfortran = 4.8.5-16.el7    Updated By: libgfortran-4.8.5-44.el7.x86_64 (/libgfortran-4.8.5-44.el7.x86_64) libgfortran = 4.8.2-16.el7 libgfortran = 4.8.5-44.el7    Available: libgfortran-4.8.5-36.el7_6.2.x86_64 (hrmw) libgfortran = 4.8.5-36.el7_6.2 libgfortran = 4.8.2-16.el7_6 You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest

💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰

🌈问题分析与解决

🌍一. 缺少依赖包报错:

Error: Package: gpsbabel-1.5.0-2.el7.x86_64 (/gpsbabel-1.5.0-2.el7.x86_64)    Requires: libQtCore.so.4()(64bit)

这个报错就是典型的缺少依赖包,那如何查找依赖包呢?

💖1.找到依赖所在的包

运用 yum来找到依赖所在的包

yum provides 
yum provides libQtCore.so.4
yum provides libQtCore.so.4已加载插件:fastestmirrorDetermining fastest mirrors * base: mirrors.nju.edu.cn * extras: mirrors.nju.edu.cn * updates: mirrors.nju.edu.cn1:qt-4.8.7-8.el7.i686 : Qt toolkit源    :base匹配来源:提供    :libQtCore.so.41:qt-4.8.7-9.el7_9.i686 : Qt toolkit源    :updates匹配来源:提供    :libQtCore.so.41:qt-4.8.7-9.el7_9.i686 : Qt toolkit源    :@updates匹配来源:提供    :libQtCore.so.4

现在我们找到libQtCore.so.4的包在 1:qt-4.8.7-9.el7_9.i686 下面
我们现在又可以运用命令来下载这个包。

💖2.下载所需的依赖包

我运用umdownloader --resolve --destdir 来下载

yumdownloader --resolve --destdir=地址 依赖包名
yumdownloader --resolve --destdir=/root/pgis 1:qt-4.8.7-9.el7_9.i686
[root@hrmw-web-api ~]# yumdownloader --resolve --destdir=/root/pgis 1:qt-4.8.7-9.el7_9.i686已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.nju.edu.cn * extras: mirrors.nju.edu.cn * updates: mirrors.nju.edu.cnbase | 3.6 kB  00:00:00     extras      | 2.9 kB  00:00:00     hrmw | 2.9 kB  00:00:00     pgdg-common/7/x86_64/signature   |  198 B  00:00:00     pgdg-common/7/x86_64/signature   | 2.9 kB  00:00:00 !!! pgdg10/7/x86_64/signature |  198 B  00:00:00     pgdg10/7/x86_64/signature | 3.6 kB  00:00:00 !!! pgdg11/7/x86_64/signature |  198 B  00:00:00     pgdg11/7/x86_64/signature | 3.6 kB  00:00:00 !!! pgdg12/7/x86_64/signature |  198 B  00:00:00     pgdg12/7/x86_64/signature | 3.6 kB  00:00:00 !!! pgdg13/7/x86_64/signature |  198 B  00:00:00     pgdg13/7/x86_64/signature | 3.6 kB  00:00:00 !!! pgdg14/7/x86_64/signature |  198 B  00:00:00     pgdg14/7/x86_64/signature | 3.6 kB  00:00:00 !!! pgdg96/7/x86_64/signature |  198 B  00:00:00     pgdg96/7/x86_64/signature | 3.6 kB  00:00:00 !!! updates     | 2.9 kB  00:00:00     (1/2): updates/7/x86_64/primary_db      |  14 MB  00:00:01     (2/2): pgdg-common/7/x86_64/primary_db  | 161 kB  00:00:02     --> 正在检查事务---> 软件包 qt.i686.1.4.8.7-9.el7_9 将被 已重新安装--> 解决依赖关系完成qt-4.8.7-9.el7_9.i686.rpm | 4.7 MB  00:00:12

然后把他考上去就行了,再看看少啥包?
💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰

💖我又遇到问题

但是这里问题,我需要装机的Linux是x86的,但是我下载的是i686版本的,这是以为我下载依赖包的机器是i686的,所以我们这需要改一下,把包名改一下,重新执行一下。

yumdownloader --resolve --destdir=/root/pgis 1:qt-4.8.7-9.el7_9.x86_64
root@hrmw-web-api ~]# yumdownloader --resolve --destdir=/root/pgis 1:qt-4.8.7-9.el7_9.x86_64已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.nju.edu.cn * extras: mirrors.nju.edu.cn * updates: mirrors.nju.edu.cn--> 正在检查事务---> 软件包 qt.x86_64.1.4.8.7-9.el7_9 将被 已重新安装--> 解决依赖关系完成qt-4.8.7-9.el7_9.x86_64.rpm      | 4.6 MB  00:00:01     

那这个问题就解决了,我们来看下一个问题:
💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰

🌍二 版本太低导致的

上面解决缺少依赖包的已经解决了,再看看下面这个问题:

Error: Package: boost-filesystem-1.53.0-27.el7.x86_64 (@hrmw)    Requires: boost-system(x86-64) = 1.53.0-27.el7    Removing: boost-system-1.53.0-27.el7.x86_64 (@anaconda) boost-system(x86-64) = 1.53.0-27.el7    Updated By: boost-system-1.53.0-28.el7.x86_64 (/boost-system-1.53.0-28.el7.x86_64) boost-system(x86-64) = 1.53.0-28.el7Error: Package: gcc-gfortran-4.8.5-16.el7.x86_64 (@anaconda)    Requires: libquadmath = 4.8.5-16.el7    Removing: libquadmath-4.8.5-16.el7.x86_64 (@anaconda) libquadmath = 4.8.2-16.el7 libquadmath = 4.8.5-16.el7    Updated By: libquadmath-4.8.5-44.el7.x86_64 (/libquadmath-4.8.5-44.el7.x86_64) libquadmath = 4.8.2-16.el7 libquadmath = 4.8.5-44.el7    Available: libquadmath-4.8.5-36.el7_6.2.x86_64 (hrmw) libquadmath = 4.8.5-36.el7_6.2 libquadmath = 4.8.2-16.el7_6

这个问题,大家看出来问题了吗?

这个毛病是因为系统上已经有低版本的依赖,但是又无法更新导致的,那这种问题又如何去解决呢?

💖1.检查系统上的版本

在root的用户下 执行
rpm -qa |grep libquadmath

[root@fxyjgxsql postgis32]# rpm -qa |grep libquadmathlibquadmath-4.8.5-16.el7.x86_64libquadmath-devel-4.8.5-16.el7.x86_64

从这里可以看出系统自带的是4.8.5-16.el7版本的,但是我们这边需要的是4.8.5-44.el7版本的。

💖2. 删除系统上的版本

利用 rpm -e来卸载程序。

rpm -e libquadmath-4.8.5-16.el7.x86_64

在这里可能会出现删不掉的情况,这里要加上–nodeps参数。

[root@fxyjgxsql postgis32]# rpm -e libquadmath-4.8.5-16.el7.x86_64 --nodeps[root@fxyjgxsql postgis32]# rpm -qa |grep libquadmathlibquadmath-devel-4.8.5-16.el7.x86_64

到这里这个问题也解决了。

🌍三 安装包的版本不对

这个问题的报错,由于我忘记保存了,就暂时不上传了,记得注意一下包的结尾就行了,一定是跟你Linux上一致的,要吗都是x86,要吗都是i686,这里的解决方法参考上面2个。

💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰

目前我所遇到的问题就是就是以上这些,大家有啥问题可以提出来。
💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰

🌈yum 命令

[root@hrmw-web-api ~]# yum --help已加载插件:fastestmirrorUsage: yum [options] COMMANDList of Commands:check   检查 RPM 数据库问题check-update   检查是否有可用的软件包更新clean   删除缓存数据deplist 列出软件包的依赖关系distribution-synchronization 已同步软件包到最新可用版本downgrade      降级软件包erase   从系统中移除一个或多个软件包fs      Acts on the filesystem data of the host, mainly for removing docs/lanuages for minimal hosts.fssnapshot     Creates filesystem snapshots, or lists/deletes current snapshots.groups  显示或使用、组信息help    显示用法提示history 显示或使用事务历史info    显示关于软件包或组的详细信息install 向系统中安装一个或多个软件包list    列出一个或一组软件包load-transaction 从文件名中加载一个已存事务makecache      创建元数据缓存provides查找提供指定内容的软件包reinstall      覆盖安装软件包repo-pkgs      将一个源当作一个软件包组,这样我们就可以一次性安装/移除全部软件包。repolist显示已配置的源search  在软件包详细信息中搜索指定字符串shell   运行交互式的 yum shellswap    Simple way to swap packages, instead of using shellupdate  更新系统中的一个或多个软件包update-minimal Works like upgrade, but goes to the 'newest' package match which fixes a problem that affects your systemupdateinfo     Acts on repository update informationupgrade 更新软件包同时考虑软件包取代关系version 显示机器和/或可用的源版本。Options:  -h, --help     显示此帮助消息并退出  -t, --tolerant 忽略错误  -C, --cacheonly完全从系统缓存运行,不升级缓存  -c [config file], --config=[config file]   配置文件路径  -R [minutes], --randomwait=[minutes]   命令最长等待时间  -d [debug level], --debuglevel=[debug level]   调试输出级别  --showduplicates      在 list/search 命令下,显示源里重复的条目  -e [error level], --errorlevel=[error level]   错误输出级别  --rpmverbosity=[debug level name]   RPM 调试输出级别  -q, --quiet    静默执行  -v, --verbose  详尽的操作过程  -y, --assumeyes回答全部问题为是  --assumeno     回答全部问题为否  --version      显示 Yum 版本然后退出  --installroot=[path]  设置安装根目录  --enablerepo=[repo]   启用一个或多个软件源(支持通配符)  --disablerepo=[repo]  禁用一个或多个软件源(支持通配符)  -x [package], --exclude=[package]   采用全名或通配符排除软件包  --disableexcludes=[repo]   禁止从主配置,从源或者从任何位置排除  --disableincludes=[repo]   disable includepkgs for a repo or for everything  --obsoletes    更新时处理软件包取代关系  --noplugins    禁用 Yum 插件  --nogpgcheck   禁用 GPG 签名检查  --disableplugin=[plugin]   禁用指定名称的插件  --enableplugin=[plugin]   启用指定名称的插件  --skip-broken  忽略存在依赖关系问题的软件包  --color=COLOR  配置是否使用颜色  --releasever=RELEASEVER   在 yum 配置和 repo 文件里设置 $releasever 的值  --downloadonly 仅下载而不更新  --downloaddir=DLDIR   指定一个其他文件夹用于保存软件包  --setopt=SETOPTS      设置任意配置和源选项  --bugfixInclude bugfix relevant packages, in updates  --security     Include security relevant packages, in updates  --advisory=ADVS, --advisories=ADVS   Include packages needed to fix the given advisory, in   updates  --bzs=BZS      Include packages needed to fix the given BZ, in   updates  --cves=CVES    Include packages needed to fix the given CVE, in   updates  --sec-severity=SEVS, --secseverity=SEVS   Include security relevant packages matching the   severity, in updates  插件选项:

💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰💰

🌈后记

如果本文章有何错误,请您评论中指出,或联系我,我会改正,如果您觉得这篇文章有用,请帮忙一键三连,让更多的人看见,谢谢
作者 yang_z_1 csdn博客地址: https://blog.csdn.net/yang_z_1?type=blog