我最近尝试使用 yum 安装一个软件包,同时它还 (自动) 更新了我不想更新的 httpd、httpd-devel、httpd-tools 软件包。原因是这些都是自定义软件包。
使用运行yum history info <id>
,结果显示:
...
Packages Altered:
...
Updated httpd-2.2.15-28.el6.centos.x86_64 @updates
Update 2.2.15-60.el6.centos.6.x86_64 @updates
Updated httpd-devel-2.2.15-28.el6.centos.x86_64 @updates
Update 2.2.15-60.el6.centos.6.x86_64 @updates
Updated httpd-tools-2.2.15-28.el6.centos.x86_64 @updates
Update 2.2.15-60.el6.centos.6.x86_64 @updates
...
目前,一切运行如前,我想我还没有执行任何重启。问题是,httpd 包是否已更改?如果是,有什么更好的方法可以恢复,因为这是生产环境,因此最好将停机时间降至最低。
答案1
如果您愿意,可以使用已经使用过的 IDyum history info <id>
回滚更新的安装:
yum history undo/redo/rollback <id>
您想使用哪个命令取决于您想做什么。来自man yum
:
撤消/重做命令作用于指定的事务,撤消或重复该事务的工作。而回滚命令将撤消到指定事务点的所有事务。例如,如果您有 3 个事务,其中分别安装了包 A、B 和 C。那么“撤消 1”将尝试删除包 A,“重做 1”将尝试安装包 A(如果它尚未安装),而“回滚 1”将尝试删除包 B 和 C。请注意,在“回滚 1”之后,您将有第四个事务,尽管事务 1 和 4 中的结束 rpmdb 版本(参见:yum 版本)应该相同。
关于你问题的第二部分,软件包是否有所改变:
当然有,否则就不会有更新版本的软件包。你可以将软件包的内容与上一个版本的内容进行比较,但你的情况的版本变化太小了,我不会费心去研究。软件包中包含的软件的版本没有改变,只是软件包本身的维护者做了一些改变。
由于您是在测试环境中执行所有这些操作(是的,对吧?),因此重新启动服务器并尝试一下应该是安全的。如果出现意外情况,您仍然可以恢复到旧版本。
答案2
与此同时:yum history undo <id>
应该可以工作。
为了避免将来出现麻烦,我会将以下内容添加exclude=httpd httpd-devel httpd-tools
到您的 /etc/yum.conf 文件中:
echo "exclude=httpd httpd-devel httpd-tools" >> /etc/yum.conf
答案3
您可以尝试明确地将您的软件包降级到对您的目的仍然有用的特定版本:
yum downgrade httpd-tools-2.2.15-28.el6