在Linux中使用yum安装旧的rpm或者将rpm降级到特定版本
希望我们已经了解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
:允许升级以将较旧的软件包替换为较旧的软件包。