stuck rpm process on dist upgrade
Thomas Jarosch
thomas.jarosch at intra2net.com
Thu Feb 18 11:24:21 UTC 2010
Hello,
I'm currently performing a dist upgrade to F12 using rpm 4.7.2.
The rpm upgrade process was stuck and I was able
to produce multiple core dumps and compare them.
Here's one of them:
#0 0x0033690e in __read_nocancel () from ./lib/libpthread.so.0
#1 0x003f1c5b in read (cookie=<value optimized out>, buf=<value optimized out>, count=<value optimized out>) at /usr/include/bits/unistd.h:45
#2 fdRead (cookie=<value optimized out>, buf=<value optimized out>, count=<value optimized out>) at rpmio.c:310
#3 0x003f1e20 in ufdRead (cookie=<value optimized out>, buf=<value optimized out>, count=<value optimized out>) at rpmio.c:576
#4 0x0046db71 in _IO_cookie_read () from ./lib/libc.so.6
#5 0x00478cfb in _IO_new_file_underflow () from ./lib/libc.so.6
#6 0x0047c0ba in __underflow () from ./lib/libc.so.6
#7 0x0047c22a in _IO_default_xsgetn_internal () from ./lib/libc.so.6
#8 0x0047a9a8 in _IO_sgetn_internal () from ./lib/libc.so.6
#9 0x0046e03e in fread () from ./lib/libc.so.6
#10 0x003f0742 in fread (buf=<value optimized out>, size=<value optimized out>, nmemb=<value optimized out>, fd=<value optimized out>)
at /usr/include/bits/stdio2.h:287
#11 Fread (buf=<value optimized out>, size=<value optimized out>, nmemb=<value optimized out>, fd=<value optimized out>) at rpmio.c:1563
#12 0x003fc6e9 in rpmDoDigest (algo=<value optimized out>, fn=<value optimized out>, asAscii=<value optimized out>,
digest=<value optimized out>, fsizep=<value optimized out>) at rpmfileutil.c:202
#13 0x006a2476 in handleOverlappedFiles (ts=<value optimized out>, ht=<value optimized out>, p=<value optimized out>,
fi=<value optimized out>) at transaction.c:341
#14 0x006a3ca1 in rpmtsPrepare (ts=<value optimized out>) at transaction.c:1066
#15 0x006a4621 in checkProblems (ts=<value optimized out>, okProbs=<value optimized out>, ignoreSet=<value optimized out>)
at transaction.c:827
#16 rpmtsRun (ts=<value optimized out>, okProbs=<value optimized out>, ignoreSet=<value optimized out>) at transaction.c:1175
#17 0x006930df in rpmcliTransaction (ts=<value optimized out>, ia=<value optimized out>, numPackages=<value optimized out>)
at rpminstall.c:287
#18 0x00694949 in rpmInstall (ts=<value optimized out>, ia=<value optimized out>, fileArgv=<value optimized out>) at rpminstall.c:518
#19 0x0804ab3b in main (argc=<value optimized out>, argv=<value optimized out>) at rpmqv.c:752
I added debug output before the rpmDoDigest() call in transaction.c
and discovered rpm tried to be very clever:
DEBUG: Before rpmDoDigest with filename: /etc/logrotate.d/cron
DEBUG: Before rpmDoDigest with filename: /etc/cron.daily/0anacron
DEBUG: Before rpmDoDigest with filename: /etc/cron.monthly/0anacron
...
DEBUG: Before rpmDoDigest with filename: /var/named/chroot/dev/null
DEBUG: Before rpmDoDigest with filename: /var/named/chroot/dev/random
-> Compute the digest of /dev/random :o)
Deleting the "random" file before the upgrade solved the issue.
Maybe rpm shouldn't compute digests for special device files?
Strangely /dev/null wasn't a problem.
Cheers,
Thomas
More information about the Rpm-list
mailing list