Yum Install Does Not Downgrade

Home » CentOS » Yum Install Does Not Downgrade
CentOS 3 Comments

We’re using ansible to configure our CentOS 6 servers, and we have a task to install a specific version of a package:

– name: install thrift2
yum: name=ripencc-thrift2-{{ version }}

In this ansible task, the “version” variable is set by the operator. When we want to upgrade, it works. But today we had to downgrade, and noticed that ansible wasn’t downgrading it. So we tried by hand (the installed version was 1.0.8):

# yum install ripencc-thrift2-1.0.3

I don’t have the output handy, because a colleague was working on it, but basically, yum said something like “package already installed” and refused to downgrade it, even though the package is in our repository.

I have a strong sense that yum _used to_ downgrade packages if asked to install an older version, but perhaps I am misremembering.

Nevertheless, I want to ask: is this a bug in yum? If asked to install a specific version, should it not upgrade OR downgrade as needed?

Regards, Anand

3 thoughts on - Yum Install Does Not Downgrade

  • Thanks Tate. I know the “downgrade” option well. I wouldn’t have posted my question if it were that simple.

    As I said previously, we use ansible, and its “yum” module invokes:

    yum install package-version-release

    I expect yum to honour this, and downgrade a package if necessary, but it’s not doing that.

    Given the lack of opinions here, I’ll file a bugzilla report and see what the maintainers say.

    Regards, Anand

  • Personally, I would do one of three things:

    1. Use the -m command to run ‘yum install ‘ which /might/ work.

    2. Uninstall the newer package and install the version you want. (Check the ‘state’ directive to do this.)

    3. Pin that package version when creating the server/VM so as not to be updated.

    #3 is useful to us as we kickstart all our servers and VMs, and this eliminates the problem going forward. Then, when we’re ready to upgrade the pinned package, we have an ansible playbook that unpins that version, installs the new version (even if not latest), then re-pins.