[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rpm-users
Subject:    Re: rpm-5.3.11
From:       Jeff Johnson <n3npq () mac ! com>
Date:       2011-08-14 18:36:13
Message-ID: BB9F68AB-8B10-4189-AE53-F28A656008A5 () mac ! com
[Download RAW message or body]


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______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
User Communication List                             rpm-users@rpm5.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic