我们正在尝试安装以下 rpm(实际上已经安装)
rpm -qa | grep sshpass
sshpass-1.06-2.el7.x86_64
yum install sshpass-1.06-1.el7.x86_64.rpm
Loaded plugins: langpacks
Examining sshpass-1.06-1.el7.x86_64.rpm: sshpass-1.06-1.el7.x86_64
sshpass-1.06-1.el7.x86_64.rpm: does not update installed package.
Error: Nothing to do
echo $?
1
但它返回了exit code 1
为什么 yum 不忽略已经安装的 rpm 并返回错误?
其他例子
rpm -qa | grep figlet
figlet-2.2.5-9.el7.x86_64
yum install figlet-2.2.5-9.el7.x86_64.rpm
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
configuration
Examining figlet-2.2.5-9.el7.x86_64.rpm: figlet-2.2.5-9.el7.x86_64
figlet-2.2.5-9.el7.x86_64.rpm: does not update installed package.
Error: Nothing to do
echo $?
1
注意-我们也尝试yum clean all
,
并删除了/var/cache/yum/*
但没有帮助
答案1
我的印象是您在抱怨 yum 的默认行为。
yum 充当安装/删除或升级软件包的软件包管理器。
如果存在,Error: Nothing to do
则安装/删除或升级包的任务实际上失败 - 因此返回代码 == 1。
如果您想检查该软件包是否已安装,如果未安装,请尝试以下操作:
rpm -qa | grep wget || yum -y install wget
这应该给你$? == 0 在标准场景中。
答案2
您正在尝试安装比系统上已安装的软件包版本更旧或版本相同的软件包。yum
在运行之前会检查这一点,这就是当您尝试将其与这些包一起使用时它会给出消息的原因。否则,yum
更新期间会做什么?如果更新出现并且在其中一个存储库中可用,是否会将它们都升级到最新版本并在系统上拥有两个完全相同的软件包?
如果您需要旧版本的软件,那么您需要从源代码编译它,而不是使用yum
安装其rpm
.
答案3
我在安装软件包时遇到了类似的问题,问题是该软件包的相同版本已经存在。
对我有用的解决方案:假设包名称是:package-abc
sudo yum remove package-abc -y
sudo yum install package-abc -y
希望这也对您有帮助!干杯!