[Rpm-maint] selective/minimal package installation using rpm

Mr Dash Four mr.dash.four at googlemail.com
Sun Nov 28 15:20:54 UTC 2010


Apologies if this is the wrong mailing list, but I could not find more 
appropriate place to post this in...

In my line of work I often need to use cross compilation and rpm 
build-up of packages. Typical scenario would be to use x86_64-based 
machine to compile and build i686-based rpm packages.

Very often, as part of that process, I have to 'selectively' install 
corresponding i686 packages (plus their -devel counterparts) to satisfy 
the target (i.e. i686-based) dependencies. By 'selectively' I mean to 
install, more often than not, just the library objects (.so files) 
located in /lib or /usr/lib directories with the odd exception of 
including files from /usr/include directories (which, most often that 
not are the same as the x86_64 version with the odd addition of *-32.h 
for 32bit and *-64.h for the 64bit architectures).

This brings an additional headaches as I have to keep a separate file 
list to track what has been installed and basically maintain it 
manually.And this is where I find rpm could be of help to me as its 
abilities are somewhat limited at present.

Currently rpm does not allow me to have a fine-grained control on what 
to install and it offers me either complete installation or (possible) 
relocation of the target package paths. I write 'possible' because that 
is, more often than not, NOT possible and rpm plainly refuses to install 
a package if I do relocate the target path.

Ideally, I would like to have an option to ask rpm to install a 
'minimalistic' version of the package and maintain it. Here is one example:

Lets suppose that to satisfy one of the target package dependencies I 
have to part-install curl-devel.i686. In other words I just need the 
following files (bearing in mind that the host machine on which this 
package will be build is x86_64):

/usr/include/curl
*/usr/include/curl/curl.h
/usr/include/curl/curlbuild-32.h
*/usr/include/curl/curlbuild.h
*/usr/include/curl/curlrules.h
*/usr/include/curl/curlver.h
*/usr/include/curl/easy.h
*/usr/include/curl/mprintf.h
*/usr/include/curl/multi.h
*/usr/include/curl/stdcheaders.h
*/usr/include/curl/typecheck-gcc.h
*/usr/include/curl/types.h
/usr/lib/libcurl.so
/usr/lib/pkgconfig/libcurl.pc

Files marked with '*' are the same as the host machine (x86_64) and 
probably already exist there. As it stands, if I try "yum install 
curl-devel.i686" I will be asked to also install the following 
additional packages on my x86_64 system:

Installing:
libcurl-devel.i686

Installing for dependencies:
cyrus-sasl-lib.i686
krb5-libs.i686
libcurl.i686
libidn.i686
libselinux.i686
libssh2.i686
ncurses-libs.i686
nss.i686
nss-softokn.i686
openldap.i686
openssl.i686

This has also a snowball effect if the package I want to install is 
something else, which is more complex. A real nightmare! In actual fact, 
for installing the specific files from this package (as I have indicated 
above) the following is NOT needed:

readline.i686
sqlite.i686
db4.i686

If I go ahead and install all of the above packages as suggested by 
rpm/yum then my existing x86_64 binary executables will most definitely 
be overwritten, not to mention that if I have existing configuration for 
the corresponding x86_64 packages that will be wiped out as well - that 
is very BAD news indeed!

This is just a simple example, but I think the point is clear: If I have 
the ability to use 'selective'/'minimalistic' installation using rpm I 
won't need to keep a separate list/track of what I have extracted and 
installed manually from the i686 packages. Most important of all, I 
won't need to spend hours executing ldd to track dependencies on what I 
have to install (and I am human after all and prone to making mistakes!).

So, the question which is the very reason for starting this thread - is 
this feasible and possible to be implemented in rpm in, hopefully, the 
near future?

It will be of great help to developers like me and, as I wrote above, I 
won't need to spend extra hours on a) installing the 'right' 
dependencies and b) maintaining all that stuff. thanks a lot in advance!


More information about the Rpm-maint mailing list