Re: Antwort: Re: Request for comments on binary RPM patch packages

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

 



Hi All,

    Perhaps I should have explained better at the outset the mechanism
that RUKS employs to ensure RPM database coherency, but I didn't expect
interest to focus solely on it!  :)  Anyhow, some valid concerns have
been raised and I will attempt to address them below and hopefully
receive more useful feedback (thanks for all so far!):
    
    If we start from the point of having a full package installed for
Foo 2.1; when Foo 2.2 is released it is packaged as per normal, then the
two full packages are fed to RUKS; here's what it does:
      *  Compares the packages to find all files that have changed
between releases
      *  Finds all new files since the previous release
      *  Finds all redundant files from the old release
      *  Writes a .spec file (based on template) that:
        *  Implements the same 'Name' as the full .rpm (so a -q
--provides will return the same name 'foo')
        *  Grabs all new and changed files
        *  Writes a simple script to 'rm' and then 'touch' all redundant
files (upon installation of the .rpm package: this is done with a %post
script)
        *  Migrates all %pre %post %preun %postun %triggerin %triggerun
%triggerpostun scripts from the latest .rpm to the new .patch.rpm file
        *  Migrates all 'Requires' directives from the latest .rpm to
the new .patch.rpm.  ~Also~ (and this is key) it adds a Requires for the
~old~ version of the package.
      *  Uses the .spec to create a package, labelled and versioned as
Foo-2.2.patch.2.1-1.i386.rpm 

    The effect of the above is that once Foo-2.2.patch.2.1-1.i386.rpm is
installed (with -ivh --replacefiles) we have a situation where the
database thinks you have two instances of a full package that provides
'Foo' installed (similar to having two 'kernel' packages of different
version installed).  The difference being of course that the newer
package 'clobbers' the files of the older (which RPM doesn't 'realise')
and that the newer package ~depends~ on the older package (in other
words, you can't uninstall the older package without using --nodeps, a
situation that will potentially break stuff even for normal packages). 
Also, all of the files that the RPM database expects to find on the
filesystem are still there (although some are 'empty' files, and will
thus fail md5 checks).  Of course the older packages can no longer be
verified for correctness with --verify, because RPM doesn't 'know' that
the files have changed.  Finally, because all of the patches are in the
same 'stream' as the main package (they all provide 'foo'), if you
decide to install a full package again (because something is broken, or
whatever), when you install Foo-2.3-1.i386.rpm with -Uvh, RPM will
remove all previous .patch.rpm packages as well as the previous full
package prior to installing Foo-2.3, so things are kept nice and clean.

    The downsides are of course that as mentioned you can no longer use
--verify on anything but the latest package, with doesn't necessarily
cover all the files the program uses.  The upside is that you can
theoretically, starting from a full install, just apply patches forever
(my example screenshot on freshmeat.net shows Battle for Wesnoth
installed full at 0.7, then patched to 0.7.10, then patched to 0.7.11,
then patched to 0.8, then running successfully).

    Please let me know how this looks and what solutions anyone can see
for some of the problems mentioned.

Thanks heaps, I value your responses,

D

On Thu, 2004-08-12 at 21:20, johannes.grumboeck@xxxxxxxxxxxxx wrote:
> 
> 
> Hi,
> 
> I think the approach from Darryl is a good way to do patches as long as rpm
> can't do it.
[...]
-- 
Darryl Dixon <esrever_otua@xxxxxxxxxxxxxxxxxxxxxxxxxx>


_______________________________________________
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