An emerge -u (for cups) brought in some new library files via a dependency which resulted in upgrading to /lib/libhistory.so.5 and deleting /lib/libhistory.so.4 from the system. Yet libhistory.so.4 is needed by php (at least if php was compiled against it). Not all *.so.4 files are removed; this one shouldn't be, right? Restoring libhistory.so.4 from another system restored php function. This would be a major problem on a production Web server. Reproducible: Always Steps to Reproduce: 1. 2. 3. Portage 2.0.51.19 (default-linux/x86/2005.0, gcc-3.3.5, glibc-2.3.4.20041102-r1, 2.6.7-win4lin-r5 i686) ================================================================= System uname: 2.6.7-win4lin-r5 i686 AMD Athlon(tm) XP 2500+ Gentoo Base System version 1.4.16 Python: dev-lang/python-2.2.3-r5,dev-lang/python-2.3.5 [2.3.5 (#1, Jun 14 2005, 15:01:26)] dev-lang/python: 2.2.3-r5, 2.3.5 sys-apps/sandbox: [Not Present] sys-devel/autoconf: 2.59-r6, 2.13 sys-devel/automake: 1.7.9-r1, 1.8.5-r3, 1.5, 1.4_p6, 1.6.3, 1.9.4 sys-devel/binutils: 2.15.92.0.2-r1 sys-devel/libtool: 1.5.10-r4 virtual/os-headers: 2.6.8.1-r2, 2.4.19-r1 ACCEPT_KEYWORDS="x86" AUTOCLEAN="yes" CFLAGS="-march=athlon-xp -O2 -pipe" CHOST="i686-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3.1/share/config /usr/kde/3.2/share/config /usr/kde/3.3/env /usr/kde/3.3/share/config /usr/kde/3.3/shutdown /usr/kde/3/share/config /usr/lib/X11/xkb /usr/lib/mozilla/defaults/pref /usr/share/config /usr/share/texmf/dvipdfm/config/ /usr/share/texmf/dvips/config/ /usr/share/texmf/tex/generic/config/ /usr/share/texmf/tex/platex/config/ /usr/share/texmf/xdvi/ /var/bind /var/qmail/control" CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d" CXXFLAGS="-march=athlon-xp -O2 -pipe" DISTDIR="/usr/portage/distfiles" FEATURES="autoaddcvs autoconfig ccache distlocks sandbox sfperms strict" GENTOO_MIRRORS="http://distfiles.gentoo.org http://distro.ibiblio.org/pub/Linux/distributions/gentoo" MAKEOPTS="-j2" PKGDIR="/usr/portage/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="x86 X alsa apm arts avi berkdb bitmap-fonts cdr crypt cups curl emboss encode esd fam flac foomaticdb fortran gd gdbm gif gphoto2 gpm gtk gtk2 guile imagemagick imlib ipv6 java jpeg kde libg++ libwww mad mbox mikmod motif mozilla mp3 mpeg mysql ncurses nls ogg oggvorbis opengl oss pam pdflib perl png python qt quicktime readline samba sdl slang spell ssl svga tcltk tcpd tetex tiff truetype truetype-fonts type1-fonts vorbis xine xml xml2 xmms xv zlib userland_GNU kernel_linux elibc_glibc" Unset: ASFLAGS, CBUILD, CTARGET, LANG, LC_ALL, LDFLAGS, LINGUAS, PORTDIR_OVERLAY
Re-assignment. libhistory = sys-libs/readline.
run revdep-rebuild
Look at the real-world implications: Because of insisting on removing a prior library version that can be safely left on the system, you're breaking production Webservers. So even if the user runs "revdep-rebuild" as a matter of habbit after each emerge, the php server has significant unscheduled downtime. This is not acceptable. Gentoo is used in many production systems now; it's not just a developers' toy any more. If you can show a real problem with leaving libhistory.so.4(.3) on the system after the library upgrade, then you can argue that it's necessary to delete it. Certainly it's not a big file - it's not a disk space problem. So what is the point of forcing production Webservers to take unscheduled downtime? Why not fix this bug by leaving the older library version alongside the new, as is done in many cases already?
very few things utilize libhistory which is why it was not kept re-emerge php
PHP may be one of "very few things," but on a production Apache/PHP server it's a MAJOR thing. It's not how few the things are that depend on the older library, it's how significant any of those things are. For the Linux platform, whose most widespread production use is as a Webserver, and whose most-used Web scripting language is PHP, breaking PHP for the convenience of freeing up a minor amount of disk space by removing an older library is NOT TRIVIAL. If you want to design this right, you'll leave older libraries by default, and offer a utility that can comb the system for those whose dependencies are fully obsolete and remove them. Your current strategy has it backwards. If you remain unwilling to take the minor step of not removing this library (and others where there may be similar dependencies), you'll be creating headaches and problems for thousands of sysadmins and their clients. Again, you still can reach your apparent design goal of a minimum of older libraries on a system with a simple utility that uses the basic functionality of revdep-rebuild, but to prune rather than fix brokenness. You could even have an aggressive mode of it that would prune to the bones, then rebuild what that breaks, as you currently are doing in this instance. This should be an option, not default Gentoo behavior, however.
a system for tracking ABI dependencies by portage is already in the works
I find myself completely agreeing with comment #5. And also, sadly find myself with many Gentoo devs in disagreement. It's only valid if it keeps the system from booting. Rendering a webserver useless is something that should be avoided. Also, including the text at the end of the readline install in the bugs and including information on all the libs that weren't important enough to keep and their effected packages would have been nice. I feel this should have been fixed. Wendall
you're wrong about the post-emerge info; the ebuild already warns that you need to run `revdep-rebuild`
*** Bug 97504 has been marked as a duplicate of this bug. ***
I'd like to very much agree with comments 3 and 5, having just spent couple hours only because this library was removed -- my company's production web server lost webmail for almost half a day. Why to remove a library that does no harm? What is the library versioning good for then? Perhaps the info message rolled by at some point during emerge -uD world but even if it did, it's not that easy to catch. Please keep production environments and their admins with little time to spare in mind. Thanks.
*** Bug 99510 has been marked as a duplicate of this bug. ***
I should have tracked this. You kept the resolve at "Won't fix". That just broke another system for me. All to save the population from _perhaps_ having an excess library version on their drives. Look, if the design philosophy is to save hard drive space at any cost, Gentoo's not the distro to run. The emerge process itself needs a lot of space, and over time fills a drive with distfiles. So it's fully safe to assume that no Gentoo user is short enough on drive space that keeping an extra library -- or an extra 20 libraries, whatever -- is going to make _any difference at all_. Fixing this would have no measurable negative effect. Nothing would fail to work for anyone; the older library would introduce no errors to the system. The only positive effect of not fixing this is having one fewer file name to look in the listing of the directory -- worth almost nothing to anybody. Users rarely go around reading directories of library files, which can be huge anyway. So you've got a minor aesthetic principle -- not having anything on a system that's perhaps unnecessary to _you_ (as if there's not plenty on any system that that system doesn't absolutely require) -- balanced against letting Gentoo remain with a real certainty of breaking production systems in an important way during routine "upgrade -u system" operations. There's nothing aesthetic about breaking production systems. The priorities behind this decision as it has stood are way wrong. Please reconsider and fix this bug. The "run revdep-rebuild" advice isn't enough, because that takes time, especially on systems which don't do -u system or -u world every week or month. If you leave the libraries, you keep Gentoo safe for production systems -- upgradable while they're in production. Otherwise you're requiring all production systems to have live backups systems which are not upgraded at the same time and configured to takeover anything that fails -- which is asking a lot, lot more of people than carring the "burden" of having a few older library files around.
I have the same problem emerging kde-base: ---8<--- /usr/bin/xmllint: error while loading shared libraries: libhistory.so.4: cannot open shared object file: No such file or directory make[3]: *** [index.cache.bz2] Error 1 make[3]: Leaving directory `/var/tmp/portage/kdebase-3.5.0-r1/work/kdebase-3.5.0/doc/faq' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/var/tmp/portage/kdebase-3.5.0-r1/work/kdebase-3.5.0/doc' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/var/tmp/portage/kdebase-3.5.0-r1/work/kdebase-3.5.0' make: *** [all] Error 2 ---8<--- And I do not have revdep-rebuild! How to fix libhistory.so.4? Help!
ignore my last question: I've emerged gentoolkit for revdep-rebuild already. BTW after my system had been leaving for about 1.5 years - I've got a huge list of dynamic inconsistencies and libhistory.so.4 is just one of dozens of removed libs: ---8<--- # revdep-rebuild Configuring search environment for revdep-rebuild 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/epiphany-bin (requires libnautilus.so.2) broken /usr/bin/evolution-2.2 (requires libecal-1.2.so.2 libedataserverui-1.2.so.4) broken /usr/bin/gnome-desktop-item-edit (requires libgnome-menu.so.0) broken /usr/bin/gnome-keyboard-properties (requires libxklavier.so.8) broken /usr/bin/gnome-panel (requires libgnome-menu.so.0) broken /usr/bin/gnome-system-monitor (requires libwnck-1.so.4) broken /usr/bin/gswitchit-plugins-capplet (requires libxklavier.so.8) broken /usr/bin/mencoder (requires libungif.so.4) broken /usr/bin/mplayer (requires libungif.so.4) broken /usr/bin/nautilus (requires libgnome-menu.so.0) broken /usr/bin/nautilus-connect-server (requires libgnome-menu.so.0) broken /usr/bin/nautilus-file-management-properties (requires libgnome-menu.so.0) broken /usr/bin/themus-theme-applier (requires libnautilus.so.2) broken /usr/bin/w3c (requires libmysqlclient.so.12) broken /usr/bin/webbot (requires libmysqlclient.so.12) broken /usr/bin/www (requires libmysqlclient.so.12) broken /usr/bin/xdvi-motif.bin (requires libXm.so.2) broken /usr/bin/xmlcatalog (requires libhistory.so.4) broken /usr/bin/xmllint (requires libhistory.so.4) broken /usr/bin/xpdf (requires libXm.so.2) broken /usr/kde/3.2/bin/kuickshow (requires libungif.so.4) broken /usr/kde/3.2/bin/nspluginscan (requires libXm.so.2) broken /usr/kde/3.2/bin/nspluginviewer (requires libXm.so.2) broken /usr/kde/3.2/lib/kde3/kuickshow.so (requires libungif.so.4) broken /usr/kde/3.2/lib/libkdeinit_kuickshow.so (requires libungif.so.4) broken /usr/kde/3.4/bin/kuickshow (requires libungif.so.4) broken /usr/kde/3.4/lib/kde3/kuickshow.so (requires libungif.so.4) broken /usr/kde/3.4/lib/libkdeinit_kuickshow.so (requires libungif.so.4) broken /usr/lib/bonobo/libthemus-theme-properties-view.so (requires libnautilus.so.2) broken /usr/lib/cryptplug/gpgme-openpgp.so (requires libgpgme.so.6) broken /usr/lib/cryptplug/gpgme-smime.so (requires libgpgme.so.6) broken /usr/lib/evolution/2.2/components/libevolution-addressbook.so (requires libebook-1.2.so.3 libedataserverui-1.2.so.4) broken /usr/lib/evolution/2.2/components/libevolution-calendar.so (requires libebook-1.2.so.3 libecal-1.2.so.2 libedataserverui-1.2.so.4) broken /usr/lib/evolution/2.2/components/libevolution-mail.so (requires libcamel-provider-1.2.so.3 libebook-1.2.so.3 libedataserverui-1.2.so.4) broken /usr/lib/evolution/2.2/evolution-addressbook-importers/libevolution-addressbook-ldif-importer.so (requires libebook-1.2.so.3) broken /usr/lib/evolution/2.2/evolution-addressbook-importers/libevolution-addressbook-vcard-importer.so (requires libebook-1.2.so.3) broken /usr/lib/evolution/2.2/evolution-calendar-importers/libevolution-calendar-importers.so (requires libebook-1.2.so.3) broken /usr/lib/evolution/2.2/libeabutil.so.0.0.0 (requires libebook-1.2.so.3 libedataserverui-1.2.so.4) broken /usr/lib/evolution/2.2/libemiscwidgets.so.0.0.0 (requires libedataserverui-1.2.so.4) broken /usr/lib/evolution/2.2/libeutil.so.0.0.0 (requires libedataserverui-1.2.so.4) broken /usr/lib/evolution/2.2/libevolution-mail-importers.so.0.0.0 (requires libebook-1.2.so.3) broken /usr/lib/evolution/2.2/plugins/liborg-gnome-evolution-startup-wizard.so (requires libcamel-provider-1.2.so.3 libebook-1.2.so.3 libedataserverui-1.2.so.4) broken /usr/lib/evolution/2.2/plugins/liborg-gnome-exchange-account-settings.so (requires libcamel-provider-1.2.so.3) broken /usr/lib/evolution/2.2/plugins/liborg-gnome-gw-account-setup.so (requires libcamel-provider-1.2.so.3 libegroupwise-1.2.so.5) broken /usr/lib/evolution/2.2/plugins/liborg-gnome-send-options.so (requires libcamel-provider-1.2.so.3 libebook-1.2.so.3 libedataserverui-1.2.so.4 libegroupwise-1.2.so.5) broken /usr/lib/evolution/2.2/plugins/liborg-gnome-shared-folder.so (requires libcamel-provider-1.2.so.3 libegroupwise-1.2.so.5) broken /usr/lib/evolution/2.2/plugins/liborg-gnome-status-track.so (requires libcamel-provider-1.2.so.3 libegroupwise-1.2.so.5) broken /usr/lib/gaim/gevolution.so (requires libebook.so.8 libedata-book.so.1 libedataserver.so.3) broken /usr/lib/imlib2/loaders/gif.so (requires libungif.so.4) broken /usr/lib/libImlib.so.1.9.14 (requires libungif.so.4) broken /usr/lib/libeel-2.so.2.10.1 (requires libgnome-menu.so.0) broken /usr/lib/libimlib-gif.so (requires libungif.so.4) broken /usr/lib/libmd5.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libpics.so.0.0.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwapp.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwcache.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwcore.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwdir.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwfile.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwftp.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwgopher.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwhtml.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwhttp.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwinit.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwmime.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwmux.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwnews.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwsql.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwssl.so.0.1.0 (requires libmysqlclient.so.12) one broken /usr/lib/libwwwstream.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwtelnet.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwtrans.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwutils.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwxml.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libwwwzip.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libxmlparse.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/libxmltok.so.0.1.0 (requires libmysqlclient.so.12) broken /usr/lib/openoffice/program/python-core-2.3.4/lib/lib-dynload/_ one bsddb.so (requires libdb-3.1.so) broken /usr/lib/openoffice/program/python-core-2.3.4/lib/lib-dynload/_tkinter.so (requires libBLT24.so libtcl8.3.so libtk8.3.so) broken /usr/lib/openoffice/program/python-core-2.3.4/lib/lib-dynload/bz2.so (requires libbz2.so.0) broken /usr/lib/openoffice/program/python-core-2.3.4/lib/lib-dynload/mpz.so (requires libgmp.so.3) broken /usr/lib/python2.3/site-packages/gtk-2.0/gnome/nautilus.so (requires libnautilus.so.2) broken /usr/libexec/clock-applet (requires libecal-1.2.so.2) broken /usr/libexec/evolution-webcal (requires libecal.so.6 libedataserver.so.3 libsoup-2.2.so.7) broken /usr/libexec/evolution/2.2/evolution-addressbook-export (requires libebook-1.2.so.3 libedataserverui-1.2.so.4) broken /usr/libexec/evolution/2.2/evolution-alarm-notify (requires libebook-1.2.so.3 libecal-1.2.so.2 libedataserverui-1.2.so.4) broken /usr/libexec/evolution/2.2/killev (requires libedataserverui-1.2.so.4) broken /usr/libexec/gnome-keyboard-applet (requires libxklavier.so.8) broken /usr/libexec/gnome-settings-daemon (requires libxklavier.so.8) broken /usr/libexec/notification-area-applet (requires libgnome-menu.so.0) done. (/root/.revdep-rebuild.3_rebuild) ---8<--- (...hmm, it seems revdep-rebuild should be run periodically or have to be incorporated to be automatic - I was not even having gentoolkit installed untill today and 1.5 years is not so big period...)
Use revdep-rebuild like everyone else and as advised by the readline ebuild. Closing a stale bug.
*** Bug 147824 has been marked as a duplicate of this bug. ***
*** This bug has been marked as a duplicate of bug 75709 ***