Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 179392 - app-portage/gentoolkit - revdep-rebuild fails to assign files with /var/db/pkg moved via a symlink
Summary: app-portage/gentoolkit - revdep-rebuild fails to assign files with /var/db/pk...
Status: RESOLVED FIXED
Alias: None
Product: Portage Development
Classification: Unclassified
Component: Tools (show other bugs)
Hardware: All Linux
: High major (vote)
Assignee: Portage Tools Team
URL:
Whiteboard:
Keywords: InVCS
Depends on:
Blocks: 170220
  Show dependency tree
 
Reported: 2007-05-22 07:20 UTC by Rafael Kolless
Modified: 2007-09-27 00:19 UTC (History)
3 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rafael Kolless 2007-05-22 07:20:12 UTC
When I check the consistency with revdep-rebuild, it always finish with the message:

Dynamic linking on your system is consistent... All done.

Even if the checking phase shows several broken linkings (and all files are emerged with portage.



Reproducible: Always

Steps to Reproduce:
1.start revdep-rebuild
2.
3.

Actual Results:  
Here an example of a current run:

revdep-rebuild -vv -p
Configuring search environment for revdep-rebuild

revdep-rebuild environment:
SEARCH_DIRS="/usr/qt/3/ /bin/ /sbin/ /usr/bin/ /usr/sbin/ /lib/ /usr/lib/ /usr/libexec/ /opt/bin/ /usr/i686-pc-linux-gnu/gcc-bin/4.1.2/ /opt/ICAClient/ /opt/sun-jdk-1.4.2.14/bin/ /opt/sun-jdk-1.4.2.14/jre/bin/ /opt/sun-jdk-1.4.2.14/jre/javaws/ /usr/kde/3.5/sbin/ /usr/kde/3.5/bin/ /usr/qt/3/bin/ /opt/vmware/workstation/bin/ /opt/bin/ /usr/i686-pc-linux-gnu/gcc-bin/4.1.2/ /opt/ICAClient/ /opt/sun-jdk-1.4.2.14/bin/ /opt/sun-jdk-1.4.2.14/jre/bin/ /opt/sun-jdk-1.4.2.14/jre/javaws/ /usr/kde/3.5/bin/ /usr/qt/3/bin/ /usr/games/bin/ /opt/vmware/workstation/bin/ /usr/local/lib/ /usr/lib/opengl/nvidia/lib/ /usr/i686-pc-linux-gnu/lib/ /usr/lib/gcc/i686-pc-linux-gnu/4.1.2/ /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/ /usr/lib/nspr/ /usr/lib/nss/ /usr/lib/openmotif-2.2/ /opt/sun-jdk-1.4.2.14/jre/lib/i386/ /opt/sun-jdk-1.4.2.14/jre/lib/i386/native_threads/ /opt/sun-jdk-1.4.2.14/jre/lib/i386/classic/ /opt/sun-jdk-1.4.2.14/jre/lib/i386/server/ /usr/lib/qt4/ /usr/kde/3.5/lib/ /usr/qt/3/lib/ /usr/games/lib/ /usr/lib/libstdc++-v3/"
SEARCH_DIRS_MASK="/usr/lib/real /usr/lib/win32 /opt/opera/lib/opera/plugins"
LD_LIBRARY_MASK="libjvm.so libjawt.so libodbcinst.so libodbc.so libjava.so libjvm.so"
PORTAGE_ROOT="/"
CALLED_OPTIONS=""
EMERGE_OPTIONS="-p"


Checking reverse dependencies...

Packages containing binaries and libraries broken by a package update
will be emerged.

Collecting system binaries and libraries... done.
  (/root/.revdep-rebuild.1_files)

Collecting complete LD_LIBRARY_PATH... done.
  (/root/.revdep-rebuild.2_ldpath)

Checking dynamic linking consistency...
  broken /usr/bin/digikam (requires  libexiv2-0.13.so libkexiv2.so.0)
  broken /usr/bin/gwenview (requires  libexiv2-0.13.so)
  broken /usr/bin/showfoto (requires  libexiv2-0.13.so libkexiv2.so.0)
  broken /usr/lib/kde3/digikamimageplugin_adjustcurves.so (requires  libexiv2-0.13.so libk
exiv2.so.0)
  broken /usr/lib/libgwenviewcore.so.1.0.0 (requires  libexiv2-0.13.so)
  broken /usr/lib/libkdeinit_gwenview.so (requires  libexiv2-0.13.so)
 done.
  (/root/.revdep-rebuild.3_rebuild)

Assigning files to ebuilds... done.
  (/root/.revdep-rebuild.4_ebuilds)

Evaluating package order... done.
  (/root/.revdep-rebuild.5_order)

Dynamic linking on your system is consistent... All done.
Freya ~ #


Expected Results:  
that the rebuild of the packages are suggested

Portage 2.1.2.7 (default-linux/x86/2006.1/desktop, gcc-4.1.2, glibc-2.5-r2, 2.6.20-gentoo-r8 i686)
=================================================================
System uname: 2.6.20-gentoo-r8 i686 Intel(R) Pentium(R) 4 CPU 3.20GHz
Gentoo Base System release 1.12.9
Timestamp of tree: Tue, 22 May 2007 05:50:01 +0000
distcc 2.18.3 i686-pc-linux-gnu (protocols 1 and 2) (default port 3632) [disabled]
ccache version 2.4 [enabled]
dev-java/java-config: 1.3.7, 2.0.31-r5
dev-lang/python:     2.4.4-r4
dev-python/pycrypto: 2.0.1-r5
dev-util/ccache:     2.4-r7
sys-apps/sandbox:    1.2.17
sys-devel/autoconf:  2.13, 2.61
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r2, 1.10
sys-devel/binutils:  2.16.1-r3
sys-devel/gcc-config: 1.3.16
sys-devel/libtool:   1.5.22
virtual/os-headers:  2.6.17-r2
ACCEPT_KEYWORDS="x86"
AUTOCLEAN="yes"
CBUILD="i686-pc-linux-gnu"
CFLAGS="-O2 -march=prescott -fomit-frame-pointer -pipe"
CHOST="i686-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/kde/3.5/env /usr/kde/3.5/share/config /usr/kde/3.5/shutdown /usr/share/X11/xkb /usr/share/config"
CONFIG_PROTECT_MASK="/etc/env.d /etc/env.d/java/ /etc/gconf /etc/java-config/vms/ /etc/revdep-rebuild /etc/splash /etc/terminfo /etc/texmf/web2c"
CXXFLAGS="-O2 -march=prescott -fomit-frame-pointer -pipe"
DISTDIR="/usr/portage/distfiles"
FEATURES="ccache distlocks metadata-transfer sandbox sfperms strict"
GENTOO_MIRRORS="http://ftp.uni-erlangen.de/pub/mirrors/gentoo http://mirror.uni-c.dk/pub/gentoo/ http://linux.rz.ruhr-uni-bochum.de/download/gentoo-mirror/"
LANG="de_DE.utf8"
LC_ALL="de_DE.utf8"
LINGUAS="de"
MAKEOPTS="-j2"
PKGDIR="/usr/portage/packages"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --delete-after --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --filter=H_**/files/digest-*"
PORTAGE_TMPDIR="/data/system/var/"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/data/portage"
SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage"
USE="X a52 aac acpi alsa arts asf audiofile bash-completion berkdb bitmap-fonts bluetooth browserplugin bzip2 cairo capi cdparanoia cdr cli cracklib crypt css cups curl dbus dga directfb dri dts dv dvb dvd dvdr dvdread dvdreadi eds emboss encode esd exif fam fame fax ffmpeg firefox font-server fortran fping gdbm gif gimp gimpprint glut gmp gpm gstreamer gtk gtk2 hal iconv icq idn ieee1394 imagemagick imlib ipod isdnlog java javascript joystick jpeg jpeg2k kde kdeenablefinal kdehiddenvisibility kipi koffice-plugin lcms libg++ lua mad maildir matroska mbox midi mikmod mime mjpeg mmx mmxext mng moneyplex monkey mozbranding moznocompose moznoirc moznomail mozsvg mp3 mpeg mplayer msn mudflap musicbrainz mysql ncurses nls nptl nptlonly nsplugin objc ogg openal opengl openmp oscar oss pam pcre perl png ppds pppd python qt3 qt4 quicktime rar rdesktop readline real reflection reiserfs ruby samba scanner sdl session smp sms sox speedo spell spl sqlite sse sse-filters sse2 ssl stats subtitles sysfs tcltk tcpd theora tiff truetype truetype-fonts type1-fonts unicode usb utf8 v4l vcd videos vidix vorbis win32codecs x86 xcomposite xine xinerama xml xorg xpm xscreensaver xv xvid yahoo zlib" ALSA_CARDS="cs46xx" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol" ELIBC="glibc" FRITZCAPI_CARDS="fcpci" INPUT_DEVICES="keyboard joystick mouse" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LINGUAS="de" USERLAND="GNU" VIDEO_CARDS="nvidia"
Unset:  CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LDFLAGS, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS
Comment 1 Rafael Kolless 2007-05-22 07:23:23 UTC
I shortened the output of revdep, because the list is so much long with the kipi-plugins.
Comment 2 Paul Varner (RETIRED) gentoo-dev 2007-05-22 21:58:05 UTC
You will see that behavior when files are orphaned.  What do the following equery commands return:

equery belongs /usr/bin/digikam
equery belongs /usr/bin/gwenview
equery belongs /usr/bin/showfoto
equery belongs /usr/lib/kde3/digikamimageplugin_adjustcurves.so
equery belongs /usr/lib/libgwenviewcore.so.1.0.0
equery belongs /usr/lib/libkdeinit_gwenview.so
Comment 3 Rafael Kolless 2007-05-23 07:36:45 UTC
Actually, I have to query all files for my own and build the emerge string manually.

The equery outputs this here:

equery belongs /usr/bin/digikam /usr/bin/gwenview /usr/bin/showfoto /usr/lib/kde3/digikamimageplugin_adjustcurves.so /usr/lib/libgwenviewcore.so.1.0.0 usr/lib/libkdeinit_gwenview.so
[ Searching for file(s) /usr/bin/digikam,/usr/bin/gwenview,/usr/bin/showfoto,/usr/lib/kde3/digikamimageplugin_adjustcurves.so,/usr/lib/libgwenviewcore.so.1.0.0,usr/lib/libkdeinit_gwenview.so in *... ]
media-gfx/digikam-0.9.1 (/usr/bin/digikam)
media-gfx/digikam-0.9.1 (/usr/bin/showfoto)
media-gfx/gwenview-1.4.1 (/usr/lib/libgwenviewcore.so.1.0.0)
media-gfx/gwenview-1.4.1 (/usr/lib/libkdeinit_gwenview.so)
media-gfx/gwenview-1.4.1 (/usr/bin/gwenview)
media-plugins/digikamimageplugins-0.9.1 (/usr/lib/kde3/digikamimageplugin_adjustcurves.so)

I played a little with the script revdep-rebuild and I found the following:

The command:

find /var/db/pkg -name CONTENTS | xargs fgrep -l -f .revdep-rebuild.3_rebuild in line 596 does not find any content. On my system /var/db/pkg is a symbolic link to the path /data/system/var/db/pkg (a partition with optimized filesystem for portage). I use it for PORTAGE_TMPDIR also.

The find command is not executed with the parameter -L, so it does not follow any symlinks.

The command

find -L /var/db/pkg -name CONTENTS | xargs fgrep -l -f .revdep-rebuild.3_rebuild

outputs correct

/var/db/pkg/media-gfx/digikam-0.9.1/CONTENTS
/var/db/pkg/media-gfx/gwenview-1.4.1/CONTENTS
/var/db/pkg/media-plugins/digikamimageplugins-0.9.1/CONTENTS
/var/db/pkg/media-plugins/kipi-plugins-0.1.3-r1/CONTENTS

It seems, that this is the problem. I altered revdep-rebuild to use -L and now it works, until the next revision :)




 
Comment 4 Rafael Kolless 2007-05-24 06:25:10 UTC
I suggest to add the parameter -L in the internal find argument.
Comment 5 Stefaan De Roeck (RETIRED) gentoo-dev 2007-08-12 09:15:47 UTC
Exact same symptoms on my system, exact same soft-link as well :)
Comment 6 Jakub Moc (RETIRED) gentoo-dev 2007-08-13 10:34:57 UTC
People, you really should use bind mounts for shuffling stuff around filesystem, NOT symlinks.
Comment 7 Stefaan De Roeck (RETIRED) gentoo-dev 2007-08-13 11:03:43 UTC
(In reply to comment #6)
> People, you really should use bind mounts for shuffling stuff around
> filesystem, NOT symlinks.

While this may solve the problem in this case, it's very intrusive and not really equivalent to symlinks. I didn't see anyone using bind mounts with the introduction of x.org :)
Comment 8 Jakub Moc (RETIRED) gentoo-dev 2007-08-13 11:12:22 UTC
(In reply to comment #7)
> While this may solve the problem in this case, it's very intrusive and not
> really equivalent to symlinks. I didn't see anyone using bind mounts with the
> introduction of x.org :)

Hmm, what's intrusive about it? o_O 

I just see lots of intrusive 'bugs' that users experience when shuffling stuff around for a lack of space via symlinks and wondering why they end up with a broken system, noexec /var/tmp being unable to emerge anything or whatever similar. Will never happen when you bind-mount the stuff properly.
Comment 9 Marius Mauch (RETIRED) gentoo-dev 2007-08-14 04:33:33 UTC
(In reply to comment #7)
> (In reply to comment #6)
> > People, you really should use bind mounts for shuffling stuff around
> > filesystem, NOT symlinks.
> 
> While this may solve the problem in this case, it's very intrusive and not
> really equivalent to symlinks. I didn't see anyone using bind mounts with the
> introduction of x.org :)

The situation with X.org is quite different:
a) expected vs. unexpected
b) system defined vs. user defined
c) X.org doesn't have to care about file identity (not a real issue in this case, but one of the big problems when dealing with symlinks in portage)

The problem might be trivial to solve in this specific case, but often it requires a lot more work to deal with symlinks in a transparent way, while bind-mounts (or normal mounts) handle the situation at the filesystem level, so we don't have to care about the issue at the application level.
Comment 10 Rafael Kolless 2007-08-16 22:07:22 UTC
Afaik symlinks are not banned for system administration and as it is a normal use for e.g. the make.profile under Gentoo at this point it should not be used. 

So the question that comes up is: "Why is /etc/make.profile" not a bind mount for regular use if symlinks are problematic?"

An application should be able to handle symlinks on linux systems. 
Comment 11 Marius Mauch (RETIRED) gentoo-dev 2007-08-17 01:30:54 UTC
(In reply to comment #10)
> Afaik symlinks are not banned for system administration and as it is a normal
> use for e.g. the make.profile under Gentoo at this point it should not be used. 

Nobody said that they are banned, jsut that they can create a large nuber of problems in many situations, as they aren't as transparent as people tend to think.

> So the question that comes up is: "Why is /etc/make.profile" not a bind mount
> for regular use if symlinks are problematic?"

Very similar to the X.org example above:
a) it's expected to be a symlink. Problems mainly arise when symlinks are used in unexpected locations (usually to "solve" the "free space" issue)
b) in this particular case a bind mount would be counter productive, as we care about the destination name (unlike how it's used here, where the destination should be hidden from the application)
c) the link isn't really managed by the user but the system

> An application should be able to handle symlinks on linux systems. 

Generally yes, the point is that handling symlinks everywhere adds quite a bit of complexity in many cases. In some cases it's also questionable how symlinks should be handled, e.g. if foo is a symlink to bla, should foo == bla be true? Depending on the use case the answer can be yes, no or maybe.
Or to use this bug, it's not always a good idea to follow symlinks when processing directories, it can easily cause infinite loops, requiring even more complexity to avoid those (we had that with collision-protect for example).

As said, in this case it's trivial to fix (but only because we can assume that /var/db/pkg itself doesn't contain links to unexpected locations), and should be fixed. However, if it would require an extensive patch, just for a very uncommon setup, I'd probably close it as WORKSFORME as there is a better solution available.
Comment 12 Paul Varner (RETIRED) gentoo-dev 2007-09-19 21:22:19 UTC
$ svn commit -m "Fix handling of /var/db/pkg when it is a symbolic link. (Bug #179392)"
Sending        ChangeLog
Sending        src/revdep-rebuild/revdep-rebuild
Transmitting file data ..
Comment 13 Paul Varner (RETIRED) gentoo-dev 2007-09-27 00:19:54 UTC
Fixed in gentoolkit-0.2.4_rc1