2014-09-02 65 views
2

当在已安装的软件包上运行yum降级时,yum是否首先删除软件包,然后重新安装以前的软件包? 作为一个推论,在yum降级0或1时,哪个参数被传递给包的%prever scriptlet?百胜降级会发生什么?

回答

1

好问题。从yum 3.2.22源代码(从我的CentOS 5机器)中快速浏览一下,看起来它是一个单独的事务,即remove + install。这会让我觉得%preun会得到1传递给它。

为yum.YumBase.downgrade内置的帮助,也有这样一段话:

$ python 
Python 2.4.3 (#1, Jan 9 2013, 06:47:03) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import yum 
>>> help(yum.YumBase.downgrade) 
Help on method downgrade in module yum: 

downgrade(self, po=None, **kwargs) unbound yum.YumBase method 
    Try to downgrade a package. Works like: 
    % yum shell <<EOL 
    remove abcd 
    install abcd-<old-version> 
    run 
    EOL 
+0

我的测试似乎表明%preun得到1传递给它。我希望能够在%preun部分中区分升级和降级,即我想在降级时运行一些代码,但不升级,但我认为%preun在两种情况下都会传递1。 – 2014-09-03 11:50:54

+0

是的,这就是你会得到的。我不认为你可以用'%preun'来判断这是降级还是升级。无论如何,你在降级时想做什么? – 2014-09-03 12:54:23

+0

由于历史原因,我们有一个rpm使用sed命令的负载将更改应用于my.cnf(mysql配置文件),检查my.cnf是否已更改,如果是,则使用新的my.cnf重新启动mysql。我想要的是在升级过程中备份旧my.cnf,然后在降级期间恢复备份。我应该补充一点,我们很快就会通过傀儡来管理my.cnf,所以这个问题将会消失。 – 2014-09-03 13:14:58