Re: Rollback

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 6 Aug 2004, Chad Kimmerle wrote:

> So James, the current version of RPM in Redhat Enterprise Desktop and
> Fedora Core 2, do they also have the RPM rollback bug that goes through
> with installs even if there is a problem?
>  
> I was trying to figure out how to use the rollback feature.  According
> to the author of Red Hat RPM guide, the --repackage switch on the RPM
> command makes repackage .RPMs in the /Var/spool/repackage directory. 
> That way, he says, you can use the RPMBUILD command to turn them back
> into regular RPMs.  But he does not tell the readers how to do that.  
>
First off everything this author says about --repackage and rpm 
transactions is completely wrong (or misleading at best at times).
I keep meaning to write the guy but I have been completely swamped
for the longest time.  If you ignore stuff about --repackage and 
transactions his book is fine.
  
> Do you know how to use the RPMBUILD command to turn repackages into
> regular rpms?
>
There is a program out there that does this, but frankly that was never 
the intent of --repackage (BTW, have you read my article in the linux 
journal, I explain all this [without disparaging remarkes towards the rpm
book of course (-;]).
  
> What does the rollback feature have to do with the repackaging?
>
Everything.  Here is a short example:

	#
	# Get time before transaction
	T1=$(date '+%d/%m/%Y %H:%M:%S')
	rpm -Uvh --repackage foo-1-1.i386.rpm  

	#
	# Since the TID of the transaction is seconds since
	# epoch wait at least a second before rollback
	sleep 2		# And I am paranoid (-;

	#
	# Now rollback transaction
	rpm -Uvh --rollback "${T1}"

So the first rpm -Uvh with --repackage will upgrade or install
foo, and if it is an upgrade will repackage the old version before
upgrading.  The second rpm -Uvh with --rollback will rollback all
transactions from now to the rollback goal ($T1 in this case).
If that first transaction was an upgrade then it will re-install 
the repackage package that was created before upgrading foo.  If it
was an install and the proper macro has been set (%_unsafe_rollbacks)
then it will erase foo.

Note, my example is transaction with 1 element, and in my example I
am only rolling back one transaction, but rpm --rollback will 
rollback as many transactions as occured up until the rollback goal
and each of these transactions can have N elements.   It is required
that all transactions that are rolled back were ran with --repackage
otherwise everthing will look like an initial install (which translates
to an erase on the rollback...very bad!).  So its best to do the following
in your /etc/rpm/macros file:

	#
	# Set this to the time before which you do not want 
	# packages to be erased in a rollback.  It is in 
	# seconds since epoch.  It should generally be set to the time
	# after the system was initial installed, or you can reset it
	# after you have decided to "commit" a various set of 
	# transactions.  Unfortunately, there is no don't do any rollbacks
	# past this date macro (yet (-;).
	%_unsafe_rollbacks          10000000

	#
	# If non-zero, all erasures will be automagically repackaged.
	# We want all erasures to be repackaged.
	%_repackage_all_erasures    1

That last one is the most important one, as it means you don't have to 
trust your sysadmins to throw --repackage on the command line.

Note there is no mechanism with rpm to clean up the repackage directory,
but if you ask I have a script (you'll want to adjust it for your needs)
that provides this functionality).

Cheers...james

P.S. I forwarded this to the rpm list at redhat just in case anyone
else has a similar question.


_______________________________________________
Rpm-list mailing list
Rpm-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/rpm-list

[Index of Archives]     [RPM Ecosystem]     [Linux Kernel]     [Red Hat Install]     [PAM]     [Red Hat Watch]     [Red Hat Development]     [Red Hat]     [Gimp]     [Yosemite News]     [IETF Discussion]

  Powered by Linux