###############################
Rolling Back a Kernel in Linux
###############################


Configuring the System to save Rollback Information
===================================================

Step 1: Configure yum to save rollback information by adding the following line to **/etc/yum.conf**

   .. code-block:: console
   
      tsflags=repackage*
	  
	  
Step 2: Configure command-line RPMs to save rollback information by adding the following line to **/etc/rpm/macros**

   .. code-block:: console
   
      %_repackage_all_erasures 1
	  
	  
-------------

Using Rollbacks
===============

Below describes two methods to using a rollbacked RPM.

**Method 1:**

   * To rollback to a previous state, perform an rpm update with the --rollback option followed by a date/time specifier.
   
      .. code-block:: console
	  
         Examples:
		 
           rpm -Uhv --rollback '9:00 am'
           rpm -Uhv --rollback '4 hours ago'
           rpm -Uhv --rollback 'december 25'.
		   
		   
**Method 2:**

   * Use the "oldpackage" option to manually force a specific RPM:
   
      .. code-block:: console
	  
         rpm -Uvh --oldpackage foo-1-1.i386.rpm
		 
		 
.. note:: Keep in mind this will only let you rollback what can be rolled back. Some OS updates are not reversible, for example, if you did an upgrade of mysql that changed your tables you would not be able to roll back this way.

--------------

Yum Rollbacks
=============

Yum has a command "downgrade" that can be used to downgrade or rollback and installation or upgrade. "downgrade" is very easy to use if the package does not have any dependencies which effect the downgrade.

   * To rollback a single package, use this command:
   
      .. code-block:: console
	  
         yum downgrade package
		 
		 
   * "yum downgrade" does not resolve dependencies automatically, which means if you have dependencies, you will have to do this manually. Example:

      .. code-block:: console
	  
         yum downgrade foo

         Setting up Downgrade Process
         Resolving Dependencies
         --> Running transaction check
         ---> Package foo.i686 0:1.1.11-1.fc13 set to be downgraded
         ---> Package foo.i686 0:1.1.11-1.fc14 set to be erased
         Error: Package: foo-devel-3.6.23-1.fc14.i686 (@rawhide/12)
         Requires: foo = 1.1.11-1.fc14
         Removing: foo-1.1.11-1.fc14.i686 (@rawhide/12)
         foo = 1.1.11-1.fc14
         Downgraded By: foo-1.1.11-1.fc13.i686 (fedora)
         foo = 1.1.11-1.fc13
         You could try using --skip-broken to work around the problem        


   * The "foo" package depends on foo-devel package, so both foo-devel and foo have to be downgraded:

      .. code-block:: console

          yum downgrade foo foo-devel
	  