在Linux中使用yum安装旧的rpm或者将rpm降级到特定版本

时间:2020-01-09 10:40:59  来源:igfitidea点击:

希望我们已经了解rpm字段的不同部分,因为我们必须知道rpm是否与计划安装的发行版兼容。

但是无论如何,如果我们正在"从授权存储库下载并安装rpm",那应该不是问题。

我们可以使用YUM命令安装rpm,使用yum的好处是可以检查所有依赖项并安装它们,而不必担心任何事情。
或者,我们也可以使用" rpm"工具安装一个rpm。
现在," rpm"工具不如" yum"那么灵活,但它只能起到一些最小的作用。

让我通过安装rpm或者使用rpm和yum将rpm降级到特定版本的示例向我们展示一些方案。

这些步骤已在RHEL/CentOS 7 Linux设置中验证。

使用yum安装旧的rpm或者降级rpm

其中我们可能会在Linux机器上拥有"本地可用的旧rpm",也可能在某些存储库上具有"在线可用"。

如果我们希望降级到的旧rpm在本地可用,则可以使用以下语法

# yum downgrade /path/to/old/rpm

提示:

如果rpm没有依赖关系,并且可以在本地使用,则使用rpm命令而不是yum可以更轻松地降级。

让我向我们展示一些简单的示例。
在我的机器上,我安装了低于版本的bash

# rpm -qa | grep bash
bash-4.2.46-29.el7_4.x86_64

虽然我在/tmp中有较旧版本的bash rpm。
所以其中我们降级为使用yum提供特定版本的rpm

# ls -l /tmp/bash-4.2.46-28.el7.x86_64.rpm
-r--r----- 1 hynman users 1035976 Jan 10 10:09 /tmp/bash-4.2.46-28.el7.x86_64.rpm

现在让我们使用`yum'降级bash rpm。

# yum downgrade /tmp/bash-4.2.46-28.el7.x86_64.rpm
Examining /tmp/bash-4.2.46-28.el7.x86_64.rpm: bash-4.2.46-28.el7.x86_64
Resolving Dependencies
--> Running transaction check
---> Package bash.x86_64 0:4.2.46-28.el7 will be a downgrade
---> Package bash.x86_64 0:4.2.46-29.el7_4 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
=======================================================================================================================================
 Package                Arch                     Version                            Repository                                    Size
=======================================================================================================================================
Downgrading:
 bash                   x86_64                   4.2.46-28.el7                      /bash-4.2.46-28.el7.x86_64                   3.5 M
Transaction Summary
=======================================================================================================================================
Downgrade  1 Package
Total size: 3.5 M
Is this ok [y/d/N]: y
'Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : bash-4.2.46-28.el7.x86_64                                                                                           1/2
  Cleanup    : bash-4.2.46-29.el7_4.x86_64                                                                                         2/2
  Verifying  : bash-4.2.46-28.el7.x86_64                                                                                           1/2
  Verifying  : bash-4.2.46-29.el7_4.x86_64                                                                                         2/2
Removed:
  bash.x86_64 0:4.2.46-29.el7_4
Installed:
  bash.x86_64 0:4.2.46-28.el7
Complete!

说明:

yum命令将提示我们进行确认,如上面突出显示的那样,我们可以在yum命令中使用-y开关来跳过提示,因此默认情况下,该命令将假定我们已对任何可能的问题提供了确认。

验证Linux机器上安装的新版本的bash rpm

# rpm -qa | grep bash
bash-4.2.46-28.el7.x86_64

因此,我们的转速已成功降级。

如果某些存储库中有旧的rpm,该怎么办?

我们希望降级的rpm版本可能在某些自定义存储库或者在线存储库中可用。
在这种情况下,我们可以先检查要降级的各个rpm版本。

要检查我们Repo中的rpm列表,请使用以下命令

# yum list

现在列表可能会很长,因此我们可以在该命令中为rpm grep

# yum list | grep bash
bash.x86_64                           4.2.46-28.el7           installed
bash.x86_64                           4.2.46-31.el7           rhel-7-server-rpms
bash-completion.noarch                1:2.1-6.el7             rhel-7-server-rpms
libvirt-bash-completion.x86_64        4.5.0-10.el7_6.3        rhel-7-server-rpms
pcp-pmda-bash.x86_64                  4.1.0-5.el7_6           rhel-7-server-rpms

现在,如我们所见,它给了我Repo中所有与regex bash相匹配的rpm列表。
其中我们对bash.x86_64感兴趣,在仓库中有两个可用的版本。

检查已安装的bash rpm版本

# rpm -qa | grep bash
bash-4.2.46-29.el7_4.x86_64

因此,让我们尝试将旧的rpm版本的bash安装到4.2.46-28.el7. 正如我们在下面看到的,我已经通过yum命令提供了rpm的确切版本和体系结构,以便yum不会考虑任何其他rpm来执行降级。

# yum downgrade bash-4.2.46-28.el7.x86_64
Loaded plugins: product-id, search-disabled-repos, subscription-manager
Resolving Dependencies
--> Running transaction check
---> Package bash.x86_64 0:4.2.46-28.el7 will be a downgrade
---> Package bash.x86_64 0:4.2.46-31.el7 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
=======================================================================================================================================
 Package                  Arch                       Version                              Repository                              Size
=======================================================================================================================================
Downgrading:
 bash                     x86_64                     4.2.46-28.el7                        rhel-7-server-rpms                     1.0 M
Transaction Summary
=======================================================================================================================================
Downgrade  1 Package
Total download size: 1.0 M
Is this ok [y/d/N]: y
Downloading packages:
bash-4.2.46-28.el7.x86_64.rpm                                                                                   | 1.0 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : bash-4.2.46-28.el7.x86_64                                                                                           1/2
  Cleanup    : bash-4.2.46-31.el7.x86_64                                                                                           2/2
  Verifying  : bash-4.2.46-28.el7.x86_64                                                                                           1/2
  Verifying  : bash-4.2.46-31.el7.x86_64                                                                                           2/2
Removed:
  bash.x86_64 0:4.2.46-31.el7
Installed:
  bash.x86_64 0:4.2.46-28.el7
Complete!

同样,如果Linux具有任何其他体系结构,则必须在rpm末尾添加体系结构类型,例如i686,i386等。

安装旧的rpm或者使用rpm降级rpm

现在,我们也可以使用rpm命令执行类似的降级。
如果我们希望降级的rpm没有降级,那么使用rpm命令比yum更容易。
降级rpm的语法也很容易

# rpm -Uvh /path/to/old_rpm --oldpackage

接下来,出于本文的考虑,我将再次升级rpm并尝试降级,但这一次使用rpm命令

# rpm -Uvh /tmp/bash-4.2.46-28.el7.x86_64.rpm --oldpackage
warning: /tmp/bash-4.2.46-28.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                          ################################# [100%]
Updating/installing...
   1:bash-4.2.46-28.el7               ################################# [ 50%]
Cleaning up/removing...
   2:bash-4.2.46-29.el7_4             ################################# [100%]

重要的提示:

在降级rpm时,建议使用--oldpackage而不是--force。
也可以使用--force降级rpm,但在某些情况下可能会引起很多问题。

这里的开关意味着

  • -h,--hash:在解压缩软件包存档时打印50个井号。

  • -U,--upgrade:将当前安装的软件包升级或者安装到较新的版本。
    这与安装相同,除了在安装新软件包后删除了该软件包的所有其他版本。

  • --oldpackage:允许升级以将较旧的软件包替换为较旧的软件包。