SUSE / openSUSEThis Forum is for the discussion of Suse Linux.
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
YaST2 Onlne Update broke my libraries! How do I fix this? I've had similar problems before and it was such a nightmare to get out of it that I'm hoping someone can help me find the simpler fix this time...
Here's the error I get and what I know:
ls: relocation error: /lib/i686/libpthread.so.0: undefined symbol: _dl_cpuclock_offset
*where's it come from?*
nicholas@linux:~> nm -o /lib/* /lib/*/* /usr/lib/* /usr/lib/*/* /usr/local/lib/* 2> /dev/null | grep cpuclock
/lib/libpthread.so.0:0000d380 T pthread_getcpuclockid
/lib/librt.so.1:00003830 T clock_getcpuclockid
/lib/i686/libpthread.so.0: U _dl_cpuclock_offset
/lib/i686/libpthread.so.0:0000be30 T pthread_getcpuclockid
/usr/lib/libpthread.a:getcpuclockid.o: U __pthread_find_self
/usr/lib/libpthread.a:getcpuclockid.o: U __pthread_handles
/usr/lib/libpthread.a:getcpuclockid.o: U __pthread_initial_thread
/usr/lib/libpthread.a:getcpuclockid.o: U __pthread_initial_thread_bos
/usr/lib/libpthread.a:getcpuclockid.o: U __pthread_manager_thread
/usr/lib/libpthread.a:getcpuclockid.o: U __pthread_manager_thread_bos
/usr/lib/libpthread.a:getcpuclockid.o: U __pthread_manager_thread_tos
/usr/lib/libpthread.a:getcpuclockid.o: U __pthread_nonstandard_stacks
/usr/lib/libpthread.a:getcpuclockid.o:00000000 T pthread_getcpuclockid
/usr/lib/libpthread.so:0000d380 T pthread_getcpuclockid
/usr/lib/librt.a:clock_getcpuclockid.o:00000000 T clock_getcpuclockid
/usr/lib/librt.a:clock_getcpuclockid.o: U getpid
/usr/lib/librt.so:00003830 T clock_getcpuclockid
*seems like it's only in /lib/i686/libpthread.so.0, so what causes that?*
nicholas@linux:~> ldd /lib/i686/libpthread.so.0
libc.so.6 => /lib/i686/libc.so.6 (0x4001f000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
nicholas@linux:~> rpm -q --whatprovides libc.so.6
nicholas@linux:~> rpm -q --whatprovides ld-linux.so.2
nicholas@linux:~> rpm -q --whatprovides libpthread.so.0
*anything changed from the package?*
nicholas@linux:~> rpm -V glibc-2.2.5-177
.......T c /etc/rpc
But none of that seems to have problems, hence it seems this isn't the root of the problem.
Background - what I did that started this mess:
I ran SuSE's YaST2 Online Update (YOU) tonight (took 3-4 hours, jeez), and it managed to download and install a load of updates, including glib and klib (it failed on the kernel, but I don't particularly care since I rebuilt mine earlier today) and finished up alright, but now my libraries are broken.
YOU told me to run /sbin/SuSEconfig when it was done (I did) and to run lilo if I use that (I don't; I use grub). It also alerted me that a reboot would be necessary in the event of a kernel update, but it didn't update the kernel and I'm nervous about rebooting when I've got fundamental library problems - I once got myself so stuck with bad libraries that I couldn't boot (I had to go through some long arduous process of using floppies with statically-linked versions of necessary commands so i could go about the patch job of getting rid of the new libraries and putting the old ones back).
I'm running kernel 18.104.22.168 with SuSE 8.1 on an HP Omnibook 900.
I would have to suggest as your first course of action to boot up with your Install CD. Select Install -> The language you use then you should have a repair option.
This should fix your issue since it's a basic command that appears to be broken.
Hm, that's an option, though I wonder how good the install CDs would be at repairing the libraries situation (especially considering that they'll have all the old versions, and my ultimate goal is to successfully get NEW libraries - everything seems to require glibc-2.3 these days, I've got 2.2.5).
Let me be clear, it's not one command that's broken - it's libpthread.so.0 and whatever it gets its information from, so everything that depends on libpthread fails to run (including ls, yast2, openoffice, probably lots more).
Do you think trying to manually update my glibc packages (which include libpthread and all the rest) might help, or is that suicidal? Can anyone tell me the *right* way to update my libraries without trashing my system?
So mabe this is fixed for the moment...I tried an old trick where I redirected the library path to an old backup of my libraries to see if a command would work:
linux# export LD_LIBRARY_PATH=/libold; ls
That still didn't work even with several lib backup directories, so I used ldd and file to take a look at each of those versions of libpthread to see what they used - and all of them used the same /lib/ld-linux.so.2, whether they were in /libold or whatever. So I did a
linux# file /lib/ld-linux.so.2
(which was in the ldd dependencies list for libpthread.so.0) and saw that it linked to /lib/ld-2.2.5.so.0, as it should have.
But other versions of ld-2.2.5.so.0 still existed in my backup directories - /libold/ld-2.2.5.so.0. So I rerouted the link:
...And voila! Commands worked without a hitch. Diff shows only that the two versions of ld-2.2.5.so.0 are different, but interestingly enough I found another old version of that file that I'd saved that had caused similar problems, and it was the exact same size as this new bad one. Weird.
So now I've copied things over appropriately so I'm running on the "good" backup version of ld-2.2.5.so.0 and things are alright (which is why I'm able to run mozilla to post this). But I'm suspicious - is this a permanent solution? What went wrong here and why? How do I update my libraries but prevent this mess in the future?