RPM Community Forums

Mailing List Message of <rpm-users>

Re: rpm-5.3.11

From: Jeff Johnson <n3npq@mac.com>
Date: Sun 14 Aug 2011 - 20:36:13 CEST
Message-id: <BB9F68AB-8B10-4189-AE53-F28A656008A5@mac.com>

On Aug 14, 2011, at 1:15 PM, Belal Salem wrote:

> Thank for the perfect details!
> since I'm running RHEL-5 (as my system base and based on rpm-4.4) but updated from RHEL-6 (glibc and its deps and python),
> and according to your explanation, I guess I would better recompile rpm with the --disable-dirname-and-symlink-deps
> specially that adding the folders to _SOME_ will not be suitable for my case since I have requests for different folder whenever I'm trying to install packages from RHEL-5 or RHEL-6.
> 

Actually its likely easier to use a run-time rather than a compile-time
setting. The parentdir/linto dependencies are implicit
in the sense that there's no Requires: that is explicitly needed.
The dependencies are synthesized from pre-existing information in
a package.

To configure parentdir/linkto dependencies at run-time:

1) Make sure that RPM_OPTIONAL_DIRNAME_AND_SYMLINK_DEPS is enabled.
That is likely already the case if you haven't disabled. Check
config.h after running ./configure (and you can always edit config.h
after running configure if all else fails).

>> 
>> The code to Rip It Out! Have it your own way! is (from lib/depends.c):
>> 	#if defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_ARK) || defined(RPM_VENDOR_OPENMAMBA) || 	defined(RPM_OPTIONAL_DIRNAME_AND_SYMLINK_DEPS) /* optional-dirname-and-symlink-deps */
>> 	    int dirname_deps;
>> 	    int symlink_deps;
>> 	#endif
>> 
>> 	#if defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_ARK) || defined(RPM_VENDOR_OPENMAMBA) || defined(RPM_OPTIONAL_DIRNAME_AND_SYMLINK_DEPS) /* optional-dirname-and-symlink-deps */
>> 	    dirname_deps = rpmExpandNumeric("%{?_check_dirname_deps}%{?!_check_dirname_deps:1}");
>> 	    if (dirname_deps) {
>> 	#endif
>> 
>> 	#if defined(RPM_VENDOR_MANDRIVA) || defined(RPM_VENDOR_ARK) || defined(RPM_VENDOR_OPENMAMBA) || 	defined(RPM_OPTIONAL_DIRNAME_AND_SYMLINK_DEPS) /* optional-dirname-and-symlink-deps */
>> 	    }
>> 
>> 	    symlink_deps = rpmExpandNumeric("%{?_check_symlink_deps}%{?!_check_symlink_deps:1}");
>> 	    if (symlink_deps) {
>> 	#endif
>> 
>> 	    }
>> 

2) Edit /etc/rpm/macros (create if not existent) to add
	%_check_dirname_deps	0
	%_check_symlink_deps	0
to disable.

3) Turn on symlink dependencies: its less annoying than parentdir deps and
is almost always a package failure when encountered (aka a dangling symlink
that points to a non-existent end-point).

4) When you have a mostly stable/unchanging set of packages installed, then
turn on parentdirectiory dependencies. Then do
	mkdir -p /etc/rpm/sysinfo
	rpm -Va --nofiles | grep '^/' | sort -u > /etc/rpm/sysinfo/Dirnames
(there is a --orphandirs option to rpm -Va that does the above, I'm just too lazy to check
how to use it: its a popt alias that does essentially the above).

5) Run
	rpm -Va --nofiles
periodically, and when you see a "orphan directory", i.e. a directory that
isn't explicitly in any package file manifest, then just add that directory
to /etc/rpm/sysinfo/Dirnames.

The annoyance is mostly that RHEL5/RHEL6 never bothered to do the QA to
ensure that rpm --erase would also remove created directories.

BTW, if you are going to use rpm-5.3.11` on RHEL5/RHEL6, then you need
to convert your rpmdb so that header instance numbers are always in
network order (needed for optimal btree access).

hth

73 de Jeff
Received on Sun Aug 14 20:40:51 2011
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.