Problems with performing downgrades

There are a number of problems with performing downgrades. I'll cover a few of them here:

  • scriptlets are not reversible: rpm scriptlets provide no way to reverse the process(es) they executed. For example a scriptlet (%pre, %preun, %post, %postun, etc) may run echo "Foo foo foo" >> /etc/some/file. There's no way to undo that when you perform a downgrade.
  • downgrading works provided the user data/user config is not modified by an update in a one-way process.

Examples: mysql upgrade from 4->5 will convert a db, but going back the other way won't fly

upgrading a desktop application from one version to the next major version modifies config files in such a way but cannot modify them back.

  • There are certain processes which no one is ever going to do the work to make them reversible: lvm1->lvm2, db transitions, udev migration, ext3->ext4.
  • Currently the depsolver doesn't work very well for downgrades, as it can't downgrade extra packages. However you can use tools like yum-debug-dump and yum-debug-restore, which should include all packages needed.

There is now a downgrade command.