Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 112082 - portage mishandles symlinks when lib versions go down while ebuild versions go up
Summary: portage mishandles symlinks when lib versions go down while ebuild versions g...
Status: RESOLVED FIXED
Alias: None
Product: Portage Development
Classification: Unclassified
Component: Core (show other bugs)
Hardware: All Linux
: High blocker (vote)
Assignee: Portage team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 115839
  Show dependency tree
 
Reported: 2005-11-10 07:40 UTC by Martin Schlemmer (RETIRED)
Modified: 2006-06-06 11:13 UTC (History)
20 users (show)

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


Attachments
3811-glibc-2.3.6.log.bz2 (3811-glibc-2.3.6.log.bz2,167.43 KB, application/octet-stream)
2005-11-11 02:30 UTC, Martin Schlemmer (RETIRED)
Details
3812-glibc-2.3.6.log (3812-glibc-2.3.6.log,211 bytes, text/plain)
2005-11-11 02:36 UTC, Martin Schlemmer (RETIRED)
Details
lib-before-ldconfig.log (lib-before-ldconfig.log,1.47 KB, text/plain)
2005-11-11 02:36 UTC, Martin Schlemmer (RETIRED)
Details
lib-after-ldconfig.log (lib-after-ldconfig.log,1.75 KB, text/plain)
2005-11-11 02:37 UTC, Martin Schlemmer (RETIRED)
Details
debug output (patch,407 bytes, patch)
2005-11-11 02:52 UTC, Brian Harring (RETIRED)
Details | Diff
glibc-merge.log.bz2 (glibc-merge.log.bz2,216.97 KB, application/x-bzip)
2005-11-11 03:51 UTC, Martin Schlemmer (RETIRED)
Details
portage-library-symlink.patch (portage-library-symlink.patch,697 bytes, patch)
2005-11-11 05:47 UTC, Martin Schlemmer (RETIRED)
Details | Diff
portage-library-symlink.patch (portage-library-symlink.patch,959 bytes, patch)
2005-11-11 06:04 UTC, Martin Schlemmer (RETIRED)
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Martin Schlemmer (RETIRED) gentoo-dev 2005-11-10 07:40:35 UTC
The issue is basically as follows:

1)

- Update from glibc-2.3.5 to glibc-2.3.6.
- On merging of the files, any symlink that is merged, is not modified if it
points to a new file/whatever.  For example:

  /lib/libc.so.6 points to libc-2.3.5.so

The new /lib/libc.so.6 should now point to libc-2.3.6.so, but it does not

- Now during the unmerge fase, it seems like portage checks the symlinks again,
and since they are not valid, it removes them .. thus _all_ the symlinks apps
use to resolve the libc libraries are missing.

- After unmerge, instead of portage running 'ldconfig' to try and fix any
linking/symlink issues that might be there, it just goes: 'hey, lests try to run
pkg_postrm()'

- Which fails horribly as nothing can find libc or the dynamic linker.

2)

And on multilib systems:

  /lib64/ld-linux.so.2 points to ../lib32/ld-linux.so.2

But after the unmerge, it seems here at least that ../lib32/ld-linux.so.2 was
already removed since it pointed to an invalid file, thus /lib64/ld-linux.so.2
is also removed, breaking all 32bit apps.

3)

- Same thing basically as 2).  as /lib/libdl.so.2 is missing, /usr/lib/libdl.so
etc symlinks are aparently process after the /lib symlinks, so they get removed
as /lib/libdl.so.2 is already missing.
- Now try to build anything linking to libdl (or whatever that have a /usr/lib
symlink to /lib), and instead of linking to libdl.so, it links to libdl.a which
breaks.


So basically, it seems portage not updating symlinks if they point to new
locations during the merge fase have a few reprocussions, and in the case of
glibc it:

- leaves the system unusable until 'ldconfig' is called
- breaks building anything linking to libdl, as the /usr/lib/libdl.so symlink is
missing
- breaks 32bit apps on multilib systems, as the dynamic loader
(/lib/ld-linux.sso.2 symlink) is missing.
Comment 1 Alexey Maximov 2005-11-10 13:46:58 UTC
where is install instructions ?
Comment 2 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-10 14:00:15 UTC
(In reply to comment #1)
> where is install instructions ?

Huh?
Comment 3 Zac Medico gentoo-dev 2005-11-10 21:06:37 UTC
I built glibc-2.3.6 on both default-linux/x86/2005.1 and
default-linux/amd64/2005.1 profiles but was unable to reproduce this problem.  

+nls +pic -build +nptl +nptlonly -erandom -hardened +userlocales -multilib
-selinux -glibc-compat20 -glibc-omitfp -linuxthreads-tls -profile
Comment 4 Simon Strandman 2005-11-11 01:06:49 UTC
I had no problems merging gcc 2.3.6 on any machine. Perhaps this only is a
problem with the devel versions of portage?

Gentoo Base System version 1.6.13
Portage 2.0.51.22-r3 (default-linux/amd64/2005.1, gcc-4.0.2-20051020,
glibc-2.3.6-r0, 2.6.14-ck4 x86_64)
=================================================================
System uname: 2.6.14-ck4 x86_64 AMD Athlon(tm) 64 Processor 3500+
dev-lang/python:     2.4.2
sys-apps/sandbox:    1.2.12
sys-devel/autoconf:  2.13, 2.59-r6
sys-devel/automake:  1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6-r1
sys-devel/binutils:  2.16.1
sys-devel/libtool:   1.5.20
virtual/os-headers:  2.6.11-r2
ACCEPT_KEYWORDS="amd64"
AUTOCLEAN="yes"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -march=athlon64 -pipe -fno-ident"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3/share/config
/usr/lib/X11/xkb /usr/share/config /var/qmail/control"
CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d"
CXXFLAGS="-O2 -march=athlon64 -pipe -fno-ident -fno-enforce-eh-specs
-fvisibility-inlines-hidden"
DISTDIR="/usr/portage/distfiles"
FEATURES="autoconfig distlocks sandbox sfperms strict"
GENTOO_MIRRORS="http://snigel.no-ip.com/ http://mirror.pudas.net/gentoo
ftp://ftp.rhnet.is/pub/gentoo/"
LANG="sv_SE.UTF-8"
LC_ALL="sv_SE.UTF-8"
LDFLAGS="-Wl,-O1"
LINGUAS="sv"
MAKEOPTS="-j2"
PKGDIR="/usr/portage/packages"
PORTAGE_TMPDIR="/var/tmp"
PORTDIR="/usr/portage"
PORTDIR_OVERLAY="/usr/local/portage"
SYNC="rsync://rsync.gentoo.org/gentoo-portage"
USE="amd64 X aalib alsa artswrappersuid audiofile avi berkdb bzip2 cairo caps
cdb cdr compositor crypt dbus dga dlloader dvd dvdr dvdread emboss encode
exif expat f77 fam fbcon firefox foomaticdb fortran gif glibc-omitfp glut gmp
gnome gphoto2 gpm gtk gtk2 hal imagemagick imlib ipv6 ithreads jack-tmpfs
java javascript jpeg kdeenablefinal lcms logitech-mouse lzw lzw-tiff mad mikmod
mng mozpango mp3 mpeg nautilus ncurses nls nomalloccheck nptl nptlonly
nvidia objc offensive oggvorbis opengl pdflib perl pic png pnp python quicktime
readline samba sdl spell ssl svg tcpd threads tiff truetype truetype-fonts
type1-fonts udev unicode usb userlocales visualization xine xml2 xmms xpm xv
xvid zlib video_cards_nvidia linguas_sv userland_GNU kernel_linux elibc_glibc"
Unset:  ASFLAGS, CTARGET
Comment 5 Simon Strandman 2005-11-11 01:07:42 UTC
(In reply to comment #4)
> I had no problems merging gcc 2.3.6 on any machine. Perhaps this only is a
> problem with the devel versions of portage?

I meant glibc 2.3.6 of course. :)
Comment 6 Brian Harring (RETIRED) gentoo-dev 2005-11-11 01:38:42 UTC
Az, post a -d run where this occurs.

Also, get that conditional setting of PROVIDE the hell out of the ebuild.  It's
not valid how y'all are using it.

Finally, kindly remove that @!#*ing Portage sucks from the ebuild and properly
mask it instead of an intentional die stuck in a build.
Comment 7 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 02:29:42 UTC
(In reply to comment #6)
> Az, post a -d run where this occurs.
> 

Ill try.

> Also, get that conditional setting of PROVIDE the hell out of the ebuild.  It's
> not valid how y'all are using it.
> 

Cannot see how it matters for this case.

> Finally, kindly remove that @!#*ing Portage sucks from the ebuild and properly
> mask it instead of an intentional die stuck in a build.

Sorry, joke in bad taste.
Comment 8 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 02:30:51 UTC
Created attachment 72626 [details]
3811-glibc-2.3.6.log.bz2

Logs of merge (no -d yet) ... nothing interesting really.
Comment 9 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 02:36:13 UTC
Created attachment 72627 [details]
3812-glibc-2.3.6.log

More logs.
Comment 10 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 02:36:54 UTC
Created attachment 72628 [details]
lib-before-ldconfig.log

'ls /lib' before running ldconfig (just after emerge crashed).
Comment 11 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 02:37:25 UTC
Created attachment 72629 [details]
lib-after-ldconfig.log

'ls /lib' after running ldconfig.
Comment 12 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 02:38:24 UTC
Diff of the two previous attatchments .. notice all the symlinks were missing:

-----
--- lib-before-ldconfig.log     2005-11-11 12:31:27.000000000 +0200
+++ lib-after-ldconfig.log      2005-11-11 12:31:27.000000000 +0200
@@ -9,9 +9,12 @@
 ld-2.3.6.so
 ld-linux.so.1
 ld-linux.so.1.9.11
+ld-linux.so.2
 libBrokenLocale-2.3.6.so
+libBrokenLocale.so.1
 libSegFault.so
 libanl-2.3.6.so
+libanl.so.1
 libblkid.so
 libblkid.so.1
 libblkid.so.1.0
@@ -20,7 +23,9 @@
 libbz2.so.1.0
 libbz2.so.1.0.3
 libc-2.3.6.so
+libc.so.6
 libcidn-2.3.6.so
+libcidn.so.1
 libcom_err.so
 libcom_err.so.2
 libcom_err.so.2.1
@@ -28,10 +33,12 @@
 libcrack.so.2
 libcrack.so.2.8.0
 libcrypt-2.3.6.so
+libcrypt.so.1
 libcurses.so
 libdevmapper.so
 libdevmapper.so.1.01
 libdl-2.3.6.so
+libdl.so.2
 libe2p.so
 libe2p.so.2
 libe2p.so.2.3
@@ -47,17 +54,25 @@
 libhistory.so.5
 libhistory.so.5.0
 libm-2.3.6.so
+libm.so.6
 libmemusage.so
 libncurses.so
 libncurses.so.5
 libncurses.so.5.5
 libnsl-2.3.6.so
+libnsl.so.1
 libnss_compat-2.3.6.so
+libnss_compat.so.2
 libnss_dns-2.3.6.so
+libnss_dns.so.2
 libnss_files-2.3.6.so
+libnss_files.so.2
 libnss_hesiod-2.3.6.so
+libnss_hesiod.so.2
 libnss_nis-2.3.6.so
+libnss_nis.so.2
 libnss_nisplus-2.3.6.so
+libnss_nisplus.so.2
 libpam.so
 libpam.so.0
 libpam.so.0.78
@@ -70,6 +85,7 @@
 libpcprofile.so
 libproc-3.2.5.so
 libpthread-2.3.6.so
+libpthread.so.0
 libpwdb.so
 libpwdb.so.0
 libpwdb.so.0.62
@@ -77,7 +93,9 @@
 libreadline.so.5
 libreadline.so.5.0
 libresolv-2.3.6.so
+libresolv.so.2
 librt-2.3.6.so
+librt.so.1
 libss.so
 libss.so.2
 libss.so.2.0
@@ -88,6 +106,7 @@
 libthread_db-1.0.so
 libthread_db.so.1
 libutil-2.3.6.so
+libutil.so.1
 libuuid.so
 libuuid.so.1
 libuuid.so.1.2
Comment 13 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 02:39:38 UTC
Final merge output.  Notice where it first removes all the /lib symlinks, and
then the /usr/lib symlinks due to the /lib symlinks missing:

-----
--- !mtime obj /sbin/sln
--- !mtime obj /sbin/ldconfig
<<<        obj /lib/libutil-2.3.90.so
--- !mtime obj /lib/libthread_db-1.0.so
<<<        obj /lib/librt-2.3.90.so
<<<        obj /lib/libresolv-2.3.90.so
<<<        obj /lib/libpthread-2.3.90.so
--- !mtime obj /lib/libpcprofile.so
<<<        obj /lib/libnss_nisplus-2.3.90.so
<<<        obj /lib/libnss_nis-2.3.90.so
<<<        obj /lib/libnss_hesiod-2.3.90.so
<<<        obj /lib/libnss_files-2.3.90.so
<<<        obj /lib/libnss_dns-2.3.90.so
<<<        obj /lib/libnss_compat-2.3.90.so
<<<        obj /lib/libnsl-2.3.90.so
--- !mtime obj /lib/libmemusage.so
<<<        obj /lib/libm-2.3.90.so
<<<        obj /lib/libdl-2.3.90.so
<<<        obj /lib/libcrypt-2.3.90.so
<<<        obj /lib/libcidn-2.3.90.so
<<<        obj /lib/libc-2.3.90.so
<<<        obj /lib/libanl-2.3.90.so
--- !mtime obj /lib/libSegFault.so
<<<        obj /lib/libBrokenLocale-2.3.90.so
<<<        obj /lib/ld-2.3.90.so
--- !mtime obj /lib/gconv_pic.map
--- cfgpro obj /etc/rpc
--- cfgpro obj /etc/nsswitch.conf
--- cfgpro obj /etc/nscd.conf
--- cfgpro obj /etc/init.d/nscd
--- cfgpro dir /etc/init.d
--- cfgpro obj /etc/host.conf
<<<        sym /usr/lib/libutil.so
<<<        sym /usr/lib/librt.so
<<<        sym /usr/lib/libresolv.so
<<<        sym /usr/lib/libnss_nisplus.so
<<<        sym /usr/lib/libnss_nis.so
<<<        sym /usr/lib/libnss_hesiod.so
<<<        sym /usr/lib/libnss_files.so
<<<        sym /usr/lib/libnss_dns.so
<<<        sym /usr/lib/libnss_compat.so
<<<        sym /usr/lib/libnsl.so
<<<        sym /usr/lib/libm.so
<<<        sym /usr/lib/libdl.so
<<<        sym /usr/lib/libcrypt.so
<<<        sym /usr/lib/libcidn.so
<<<        sym /usr/lib/libanl.so
<<<        sym /usr/lib/libBrokenLocale.so
<<<        sym /lib/libutil.so.1
<<<        sym /lib/librt.so.1
<<<        sym /lib/libresolv.so.2
<<<        sym /lib/libpthread.so.0
<<<        sym /lib/libnss_nisplus.so.2
<<<        sym /lib/libnss_nis.so.2
<<<        sym /lib/libnss_hesiod.so.2
<<<        sym /lib/libnss_files.so.2
<<<        sym /lib/libnss_dns.so.2
<<<        sym /lib/libnss_compat.so.2
<<<        sym /lib/libnsl.so.1
<<<        sym /lib/libm.so.6
<<<        sym /lib/libdl.so.2
<<<        sym /lib/libcrypt.so.1
<<<        sym /lib/libcidn.so.1
<<<        sym /lib/libc.so.6
<<<        sym /lib/libanl.so.1
<<<        sym /lib/libBrokenLocale.so.1
<<<        sym /lib/ld-linux.so.2
<<<        dir /usr/share/doc/glibc-2.3.5.20050722
--- !empty dir /usr/share/zoneinfo/right/US
--- !empty dir /usr/share/zoneinfo/right/SystemV
--- !empty dir /usr/share/zoneinfo/right/Pacific
--- !empty dir /usr/share/zoneinfo/right/Mideast
--- !empty dir /usr/share/zoneinfo/right/Mexico
--- !empty dir /usr/share/zoneinfo/right/Indian
--- !empty dir /usr/share/zoneinfo/right/Europe
--- !empty dir /usr/share/zoneinfo/right/Etc
--- !empty dir /usr/share/zoneinfo/right/Chile
--- !empty dir /usr/share/zoneinfo/right/Canada
--- !empty dir /usr/share/zoneinfo/right/Brazil
--- !empty dir /usr/share/zoneinfo/right/Australia
--- !empty dir /usr/share/zoneinfo/right/Atlantic
--- !empty dir /usr/share/zoneinfo/right/Asia
--- !empty dir /usr/share/zoneinfo/right/Arctic
--- !empty dir /usr/share/zoneinfo/right/Antarctica
--- !empty dir /usr/share/zoneinfo/right/America/North_Dakota
--- !empty dir /usr/share/zoneinfo/right/America/Kentucky
--- !empty dir /usr/share/zoneinfo/right/America/Indiana
--- !empty dir /usr/share/zoneinfo/right/America/Argentina
--- !empty dir /usr/share/zoneinfo/right/America
--- !empty dir /usr/share/zoneinfo/right/Africa
--- !empty dir /usr/share/zoneinfo/right
--- !empty dir /usr/share/zoneinfo/posix/US
--- !empty dir /usr/share/zoneinfo/posix/SystemV
--- !empty dir /usr/share/zoneinfo/posix/Pacific
--- !empty dir /usr/share/zoneinfo/posix/Mideast
--- !empty dir /usr/share/zoneinfo/posix/Mexico
--- !empty dir /usr/share/zoneinfo/posix/Indian
--- !empty dir /usr/share/zoneinfo/posix/Europe
--- !empty dir /usr/share/zoneinfo/posix/Etc
--- !empty dir /usr/share/zoneinfo/posix/Chile
--- !empty dir /usr/share/zoneinfo/posix/Canada
--- !empty dir /usr/share/zoneinfo/posix/Brazil
--- !empty dir /usr/share/zoneinfo/posix/Australia
--- !empty dir /usr/share/zoneinfo/posix/Atlantic
--- !empty dir /usr/share/zoneinfo/posix/Asia
--- !empty dir /usr/share/zoneinfo/posix/Arctic
--- !empty dir /usr/share/zoneinfo/posix/Antarctica
--- !empty dir /usr/share/zoneinfo/posix/America/North_Dakota
--- !empty dir /usr/share/zoneinfo/posix/America/Kentucky
--- !empty dir /usr/share/zoneinfo/posix/America/Indiana
--- !empty dir /usr/share/zoneinfo/posix/America/Argentina
--- !empty dir /usr/share/zoneinfo/posix/America
--- !empty dir /usr/share/zoneinfo/posix/Africa
--- !empty dir /usr/share/zoneinfo/posix
--- !empty dir /usr/share/zoneinfo/US
--- !empty dir /usr/share/zoneinfo/SystemV
--- !empty dir /usr/share/zoneinfo/Pacific
--- !empty dir /usr/share/zoneinfo/Mideast
--- !empty dir /usr/share/zoneinfo/Mexico
--- !empty dir /usr/share/zoneinfo/Indian
--- !empty dir /usr/share/zoneinfo/Europe
--- !empty dir /usr/share/zoneinfo/Etc
--- !empty dir /usr/share/zoneinfo/Chile
--- !empty dir /usr/share/zoneinfo/Canada
--- !empty dir /usr/share/zoneinfo/Brazil
--- !empty dir /usr/share/zoneinfo/Australia
--- !empty dir /usr/share/zoneinfo/Atlantic
--- !empty dir /usr/share/zoneinfo/Asia
--- !empty dir /usr/share/zoneinfo/Arctic
--- !empty dir /usr/share/zoneinfo/Antarctica
--- !empty dir /usr/share/zoneinfo/America/North_Dakota
--- !empty dir /usr/share/zoneinfo/America/Kentucky
--- !empty dir /usr/share/zoneinfo/America/Indiana
--- !empty dir /usr/share/zoneinfo/America/Argentina
--- !empty dir /usr/share/zoneinfo/America
--- !empty dir /usr/share/zoneinfo/Africa
--- !empty dir /usr/share/zoneinfo
--- !empty dir /usr/share/man/man3
--- !empty dir /usr/share/man
--- !empty dir /usr/share/locale/zh_TW/LC_MESSAGES
--- !empty dir /usr/share/locale/zh_TW
--- !empty dir /usr/share/locale/zh_CN/LC_MESSAGES
--- !empty dir /usr/share/locale/zh_CN
--- !empty dir /usr/share/locale/tr/LC_MESSAGES
--- !empty dir /usr/share/locale/tr
--- !empty dir /usr/share/locale/sv/LC_MESSAGES
--- !empty dir /usr/share/locale/sv
--- !empty dir /usr/share/locale/sk/LC_MESSAGES
--- !empty dir /usr/share/locale/sk
--- !empty dir /usr/share/locale/rw/LC_MESSAGES
--- !empty dir /usr/share/locale/rw
--- !empty dir /usr/share/locale/ru/LC_MESSAGES
--- !empty dir /usr/share/locale/ru
--- !empty dir /usr/share/locale/pt_BR/LC_MESSAGES
--- !empty dir /usr/share/locale/pt_BR
--- !empty dir /usr/share/locale/pl/LC_MESSAGES
--- !empty dir /usr/share/locale/pl
--- !empty dir /usr/share/locale/nl/LC_MESSAGES
--- !empty dir /usr/share/locale/nl
--- !empty dir /usr/share/locale/nb/LC_MESSAGES
--- !empty dir /usr/share/locale/nb
--- !empty dir /usr/share/locale/ko/LC_MESSAGES
--- !empty dir /usr/share/locale/ko
--- !empty dir /usr/share/locale/ja/LC_MESSAGES
--- !empty dir /usr/share/locale/ja
--- !empty dir /usr/share/locale/it/LC_MESSAGES
--- !empty dir /usr/share/locale/it
--- !empty dir /usr/share/locale/hu/LC_MESSAGES
--- !empty dir /usr/share/locale/hu
--- !empty dir /usr/share/locale/hr/LC_MESSAGES
--- !empty dir /usr/share/locale/hr
--- !empty dir /usr/share/locale/gl/LC_MESSAGES
--- !empty dir /usr/share/locale/gl
--- !empty dir /usr/share/locale/fr/LC_MESSAGES
--- !empty dir /usr/share/locale/fr
--- !empty dir /usr/share/locale/fi/LC_MESSAGES
--- !empty dir /usr/share/locale/fi
--- !empty dir /usr/share/locale/es/LC_MESSAGES
--- !empty dir /usr/share/locale/es
--- !empty dir /usr/share/locale/en_GB/LC_MESSAGES
--- !empty dir /usr/share/locale/en_GB
--- !empty dir /usr/share/locale/el/LC_MESSAGES
--- !empty dir /usr/share/locale/el
--- !empty dir /usr/share/locale/de/LC_MESSAGES
--- !empty dir /usr/share/locale/de
--- !empty dir /usr/share/locale/da/LC_MESSAGES
--- !empty dir /usr/share/locale/da
--- !empty dir /usr/share/locale/cs/LC_MESSAGES
--- !empty dir /usr/share/locale/cs
--- !empty dir /usr/share/locale/ca/LC_MESSAGES
--- !empty dir /usr/share/locale/ca
--- !empty dir /usr/share/locale/be/LC_MESSAGES
--- !empty dir /usr/share/locale/be
--- !empty dir /usr/share/locale
--- !empty dir /usr/share/info
--- !empty dir /usr/share/i18n/locales
--- !empty dir /usr/share/i18n/charmaps
--- !empty dir /usr/share/i18n
--- !empty dir /usr/share/doc
--- !empty dir /usr/share
--- !empty dir /usr/sbin
--- !empty dir /usr/lib/misc/glibc/getconf
--- !empty dir /usr/lib/misc/glibc
--- !empty dir /usr/lib/misc
--- !empty dir /usr/lib/locale/en_US/LC_MESSAGES
--- !empty dir /usr/lib/locale/en_US.utf8/LC_MESSAGES
--- !empty dir /usr/lib/locale/en_US.utf8
--- !empty dir /usr/lib/locale/en_US
--- !empty dir /usr/lib/locale
--- !empty dir /usr/lib/gconv
--- !empty dir /usr/lib
--- !empty dir /usr/include/sys
--- !empty dir /usr/include/scsi
--- !empty dir /usr/include/rpcsvc
--- !empty dir /usr/include/rpc
--- !empty dir /usr/include/protocols
--- !empty dir /usr/include/nfs
--- !empty dir /usr/include/netrose
--- !empty dir /usr/include/netrom
--- !empty dir /usr/include/netpacket
--- !empty dir /usr/include/netipx
--- !empty dir /usr/include/netinet
--- !empty dir /usr/include/neteconet
--- !empty dir /usr/include/netax25
--- !empty dir /usr/include/netatalk
--- !empty dir /usr/include/netash
--- !empty dir /usr/include/net
--- !empty dir /usr/include/gnu
--- !empty dir /usr/include/bits
--- !empty dir /usr/include/arpa
--- !empty dir /usr/include
--- !empty dir /usr/bin
--- !empty dir /usr
--- !empty dir /sbin
--- !empty dir /lib
--- !empty dir /etc
--- !targe sym /usr/lib/libthread_db.so
--- !targe sym /usr/lib/libbsd.a
--- !targe sym /lib/libthread_db.so.1
Traceback (most recent call last):
  File "/usr/bin/emerge", line 3222, in ?
    mydepgraph.merge(pkglist)
  File "/usr/bin/emerge", line 1960, in merge
    retval=unmerge("clean", [xsplit[0]])
  File "/usr/bin/emerge", line 2250, in unmerge
   
retval=portage.unmerge(mysplit[0],mysplit[1],portage.root,mysettings,unmerge_action
not in ["clean","prune"])
  File "/usr/lib/portage/pym/portage.py", line 2951, in unmerge
    mylink.unmerge(trimworld=mytrimworld,cleanup=1)
  File "/usr/lib/portage/pym/portage.py", line 6427, in unmerge
   
a=doebuild(myebuildpath,"postrm",self.myroot,self.settings,use_cache=0,tree=self.treetype)
  File "/usr/lib/portage/pym/portage.py", line 2651, in doebuild
    return spawn(EBUILD_SH_BINARY+"
"+mydo,mysettings,debug=debug,free=1,logfile=logfile)
  File "/usr/lib/portage/pym/portage.py", line 1615, in spawn
    !!! FAILED postrm: 1
Comment 14 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 02:42:57 UTC
Ps, this was on my P4, where the original issue was on my amd64.  Now I admit I
could have diagnosed the issue wrongly, but I did not imagine it ;)  And from
the success reports (2.3.5 to 2.3.6) it seems it might be rather from
glibc-2.3.5.2005* to glibc-2.3.6 upgrades.

Ps, what does the symlink stuff do?  Use some external app to check if they
present or not ... as this might also explain it ... ?
Comment 15 Brian Harring (RETIRED) gentoo-dev 2005-11-11 02:52:46 UTC
Created attachment 72631 [details, diff]
debug output

run with this patch please, tagging the merge output into an attachment.
Comment 16 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 03:51:00 UTC
Created attachment 72635 [details]
glibc-merge.log.bz2

Here is your emerge -d log with the patch .. had to modify the patch though, as
it tried the os.readlink() printing _after_ unlinking.
Comment 17 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 03:57:47 UTC
Now what you will notice, is:

- It aparently merges the symlinks properly pointing to the correct file
- Then when it comes to unmerge, it points to the old file again.  I can only
assume that portage runs a ldconfig inbetween merge and unmerge, as this will
explain it?  Anyhow, because the actual libs are already removed, it chucks the
invalid symlinks
- Finished with unmerging, it does not run ldconfig again, and due to nothing
finding libc/whatever, portage crashes.

Possible fixes are:
1) Run ldconfig after unmerge .. this will however not fix the
/usr/lib/libdl.so, etc symlinks being nuked.
2) Same as above, but do not remove invalid symlinks.  Not sure if this will
cause any issues.
3) Do not run the aparent ldconfig inbetween merge and unmerge .. not sure if
this will break things either .. it in theory should not, as preplib and co
should make sure the merged stuff have the proper symlinks to the libraries.

So not sure .. maybe 3) is the best solution.  We might have to bug Nick though,
is I know he did lots of testing with the merge code and glibc/whatever in the past.

Anyhow, I hope this will get us past the 'dev error' or 'PROVIDE is set
conditionally' BS ?
Comment 18 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 05:47:46 UTC
Created attachment 72640 [details, diff]
portage-library-symlink.patch

Proposed patch which works here.  Basically it does:

- change running of env_update after merge to not ever update symlinks .. those
should be correct after the preplib run
- run env_update after unmerge and let it update symlinks
Comment 19 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 06:04:25 UTC
Created attachment 72643 [details, diff]
portage-library-symlink.patch

Should be better patch. Remove unused code, and do not run env_update twice.
Comment 20 Jason Stubbs (RETIRED) gentoo-dev 2005-11-11 06:25:45 UTC
I haven't had a look at the patch yet, but the main thing to be careful of is   
that it does not break downgrading of glibc. If you can test that to make sure   
it works in the standard case (lib version downgrade and portage version   
downgrade) as well as your weird version mismatch case...   
   
By the way, the 'PROVIDE is set conditionally' BS is not BS. PROVIDE, like  
almost every other var, will be based on however any conditionals are  
evaluated at the time the cache is generated. And yes, PROVIDE is used prior 
to an ebuild being merged. 
Comment 21 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 08:35:59 UTC
(In reply to comment #20)
> I haven't had a look at the patch yet, but the main thing to be careful of is   
> that it does not break downgrading of glibc. If you can test that to make sure   
> it works in the standard case (lib version downgrade and portage version   
> downgrade) as well as your weird version mismatch case...   
>    

Here glibc works fine on stable x86, for 2.3.5-r2 -> 2.3.6, then back from 2.3.6
to 2.3.5-r2, then back again.

Brian mentioned the new patch calling env_update conditional in treewalk ..
added some debugging:

-----
glibc-2.3.5_to_2.3.6-update.log:>>> testing env_update (treewalk)
glibc-2.3.5_to_2.3.6-update.log:>>> testing env_update (unmerge)
glibc-2.3.6-remerge.log:>>> testing in treewalk before
self.unmerge(oldcontents,trimworld=0)
glibc-2.3.6-remerge.log:>>> testing env_update (unmerge)
glibc-2.3.6-remerge.log:>>> testing in treewalk after
self.unmerge(oldcontents,trimworld=0)
glibc-2.3.6_to_2.3.5-downgrade.log:>>> testing env_update (treewalk)
glibc-2.3.6_to_2.3.5-downgrade.log:>>> testing env_update (unmerge)
-----

Which seems fine, as for update/downgrade, merge (ala treewalk) and unmerge is
called in 'seperate runs', but for remerge, unmerge is called from treewalk.

> By the way, the 'PROVIDE is set conditionally' BS is not BS. PROVIDE, like  
> almost every other var, will be based on however any conditionals are  
> evaluated at the time the cache is generated. And yes, PROVIDE is used prior 
> to an ebuild being merged. 

I wanted to get the fishing for ebuild/'dev error' fishing out of the way, which
is BS in regards to possible reasons for this issue.
Comment 22 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 08:44:00 UTC
Portage downgrade/upgrade seems to work fine.
Comment 23 Jason Stubbs (RETIRED) gentoo-dev 2005-11-11 08:52:11 UTC
Portage has no libraries. ;)  
  
If it survives portage up/glibc down, portage up/glibc up and portage  
down/glibc down then it should be safe enough to throw out into the wild. 
Comment 24 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 09:01:14 UTC
(In reply to comment #23)
> Portage has no libraries. ;)  
>   

Heh, you asked me to test it ;p
Comment 25 Martin Schlemmer (RETIRED) gentoo-dev 2005-11-11 09:24:37 UTC
Ok, like I said in previous comment, glibc up/down grade works just fine.  Also
tested glib/gtk+ and they work fine as well.
Comment 26 Ryan Hill (RETIRED) gentoo-dev 2005-11-11 22:37:06 UTC
this probably doesn't need a confirm, but FYI i can reproduce this on my machine.
Comment 27 Bob 2005-11-27 15:17:53 UTC
I'm having the same problem.  I've upgraded from a very stable GCC 3.4.4 /
glibc-2.3.5-r2 system, attempting to upgrade to GCC 4.1-beta-20051125.  i can
successfully compile & install GCC, but when i attempt to compile glibc 2.3.6 I
get the following error message:

<snip># emerge glibc -v
Calculating dependencies ...done!
>>> emerge (1 of 1) sys-libs/glibc-2.3.6-r1 to /
>>> md5 src_uri ;-) glibc-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-linuxthreads-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-libidn-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-2.3.6-patches-1.2.tar.bz2
>>> md5 src_uri ;-) glibc-manpages-2.3.6-1.tar.bz2
>>> md5 src_uri ;-) glibc-infopages-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-fedora-20041219T2331.tar.bz2
 * Portage have a serious bug in regards to symlinks, and merging
 * this with current versions will fail!  See:

 *   http://bugs.gentoo.org/show_bug.cgi?id=112082

 * If you want to update, please apply this patch:

 *   http://bugs.gentoo.org/attachment.cgi?id=72643
</snip>

now here's what's interesting:  on the first pass, the error message appeared. 
on every subsequent attempt to compile glibc, the error report is not displayed
and compilation just fails.  syncing and re-emerging portage doesn't help, and
the recommended python script doesn't fix the bug either:

<snip># emerge glibc -v
Calculating dependencies ...done!
>>> emerge (1 of 1) sys-libs/glibc-2.3.6-r1 to /
>>> md5 src_uri ;-) glibc-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-linuxthreads-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-libidn-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-2.3.6-patches-1.2.tar.bz2
>>> md5 src_uri ;-) glibc-manpages-2.3.6-1.tar.bz2
>>> md5 src_uri ;-) glibc-infopages-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-fedora-20041219T2331.tar.bz2
</snip>

<xnip># /etc/env.d/gcc/portage.py
/etc/env.d/gcc/portage.py: line 1: ---: command not found
/etc/env.d/gcc/portage.py: line 2: +++: command not found
/etc/env.d/gcc/portage.py: line 3: @@: command not found
/etc/env.d/gcc/portage.py: line 4: syntax error near unexpected token `"!!!
FAILED postrm: "+str'
/etc/env.d/gcc/portage.py: line 4: `                            writemsg("!!!
FAILED postrm: "+str(a)+"\n")'
todland gcc # emerge glibc -v
Calculating dependencies ...done!
>>> emerge (1 of 1) sys-libs/glibc-2.3.6-r1 to /
>>> md5 src_uri ;-) glibc-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-linuxthreads-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-libidn-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-2.3.6-patches-1.2.tar.bz2
>>> md5 src_uri ;-) glibc-manpages-2.3.6-1.tar.bz2
>>> md5 src_uri ;-) glibc-infopages-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-fedora-20041219T2331.tar.bz2
</snip>

:-/
Comment 28 Caleb Tennis (RETIRED) gentoo-dev 2005-11-28 07:47:42 UTC
> /etc/env.d/gcc/portage.py: line 1: ---: command not found 
 
It's a patch to portage, not a python file to try and run. 
Comment 29 Bob 2005-11-28 17:13:15 UTC
got a bit more information in the error this time:

<snip>
>>> md5 src_uri ;-) glibc-manpages-2.3.6-1.tar.bz2
>>> md5 src_uri ;-) glibc-infopages-2.3.6.tar.bz2
>>> md5 src_uri ;-) glibc-fedora-20041219T2331.tar.bz2
 * Portage have a serious bug in regards to symlinks, and merging
 * this with current versions will fail!  See:

 *   http://bugs.gentoo.org/show_bug.cgi?id=112082

 * If you want to update, please apply this patch:

 *   http://bugs.gentoo.org/attachment.cgi?id=72643

 * to '/usr/lib/portage/portage.py' and
 * comment the die() below.


!!! ERROR: sys-libs/glibc-2.3.6-r1 failed.
!!! Function pkg_setup, Line 1127, Exitcode 0
!!! Might break upgrading.
!!! If you need support, post the topmost build error, NOT this status message.

</snip>

unfortunately the error message in the ebuild is sufficiently cryptic that it
leaves the user with no idea what to do.  could someone explain this in a bit
more detail?  
Comment 30 Ryan Hill (RETIRED) gentoo-dev 2005-11-28 18:46:43 UTC
(In reply to comment #29)

> unfortunately the error message in the ebuild is sufficiently cryptic that it
> leaves the user with no idea what to do.  could someone explain this in a bit
> more detail?  


>  * If you want to update, please apply this patch:
> 
>  *   http://bugs.gentoo.org/attachment.cgi?id=72643
> 
>  * to '/usr/lib/portage/portage.py' and
>  * comment the die() below.

i think it's pretty safe to assume that if a user is willingly trying to use an
experimental, unsupported, keyword-masked, alpha level compiler to build an
unsupported, keyword-masked glibc, they know how to apply a simple patch and
comment a line in an ebuild as is clearly described in that message.
Comment 31 Ryan Hill (RETIRED) gentoo-dev 2005-11-28 18:50:53 UTC
er, except that it should be "/usr/lib/portage/pym/portage.py", not
"/usr/lib/portage/portage.py".  =P
Comment 32 Bob 2005-12-04 18:25:00 UTC
I was hoping that someone would provide helpful information instead of an insult
that would have been more appropritate on a Debian forum. :o
Comment 33 Alec Warner (RETIRED) archtester gentoo-dev Security 2005-12-04 18:52:34 UTC
(In reply to comment #32)
> I was hoping that someone would provide helpful information instead of an 
insult
> that would have been more appropritate on a Debian forum. :o

I assume that is in response to comment 30, which IMHO, was not insulting in the 
least.  Patching a program is a relatively simple affair; although I'd agree 
that explicit instructions would be better.  Ebuilds generally don't say "copy 
this file over that" they say "cp /foo/bar /foobar".

In either case, you will probably want to use 'patch' to apply the patch to 
portage, and it's manpage documents it's usage.

However, a simple 'cd /usr/lib/portage/ && patch -p0 --dry-run < /path/to/patch' 
should probably suffice.
Comment 34 Jason Stubbs (RETIRED) gentoo-dev 2005-12-17 02:58:22 UTC
Released in 2.1_pre1.
Comment 35 bohemian72 2006-05-13 13:39:38 UTC
The patch doesn't apply cleanly to portage-2.10_pre10-r5. Is it still required? Or can I simply comment out the kill? 
Comment 36 Zac Medico gentoo-dev 2006-05-13 13:59:11 UTC
(In reply to comment #35)
> The patch doesn't apply cleanly to portage-2.10_pre10-r5. Is it still required?

No patch is needed for >=portage-2.1_pre1.
Comment 37 skelter 2006-06-06 11:13:31 UTC
(In reply to comment #30 which implies we shouldn't hit this bug unless we're unmasking experimental bits)
As far as I can tell, I'm not trying to emerge anything experimental.  The only pieces I have unmasked or done something remotely naughty are skype and sun's java.  I could be wrong, but I don't think so.

If I SHOULD NOT be hitting this bug, and I AM pulling something experimental, and you would like to know more about my config, I'll happily provide what I can.