RPM: Failed to find Provides: Vyřešeno

Marián Kyral marian.kyral na worldonline.cz
Čtvrtek Listopad 1 15:11:06 CET 2001


Marián Kyral wrote:
   > rpm je z RH 7.1, teď nevím jaká verze.

Oprava:
[root na nest RPMS]# rpm -qa |grep rpm
rpmfind-1.6-5
rpm-4.0.3-0.91
rpm-python-4.0.3-0.91
rpm-perl-4.0.3-0.91
rpmlint-0.28-2
rpm-build-4.0.3-0.91
rpm-devel-4.0.3-0.91

V RH 7.1 ve 4.0.2
Vzpoměl jsem si, že rpm jsem upgradoval s KDE 2.1.

Výsledky strace:
1. rpm hledá některé soubory v /etc/rpm a já je mám v /usr/lib/rpm.
      udělal jsem link na /usr/lib/rpm.
open("/etc/rpm/i386-linux/macros", O_RDONLY) = -1 ENOENT (No such file
or directory)
2. hledá soubor specpo. balíček vůbec nemám naistalovaný, nainstaloval
    jsem. Teď mám české popisky :-))
3. hledá soubor macros.db1 (součást balíčku rpm). V systému jej vůbec
    nemám !! a nevím jak se stratil :-(( Vytáhnul jsem soubor z balíčku.
4. z výpisu kolem find_provides jsem se moc nedozvěděl:
write(1, "Hled\341m   Provides: (pou\276it /usr/"..., 58) = 58
rt_sigaction(SIGPIPE, {SIG_IGN}, {SIG_DFL}, 8) = 0
pipe([4, 8])                            = 0
pipe([10, 11])                          = 0
fork()                                  = 1780
close(4)                                = 0
close(11)                               = 0
fcntl64(10, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
fcntl64(8, F_SETFL, O_RDONLY|O_NONBLOCK) = 0
select(10, [], [8], NULL, {1, 0})       = 1 (out [8], left {1, 0})
write(8, "/var/tmp/NVIDIA_GLX-1.0/usr/X11R"..., 841) = 841
read(10, 0xbfff94d0, 8192)              = -1 EAGAIN (Resource
temporarily unavailable)
select(10, [], [8], NULL, {1, 0})       = 1 (out [8], left {0, 990000})
close(8)                                = 0
read(10, "\33(K\n", 8192)               = 4
read(10, 0xbfff94d0, 8192)              = -1 EAGAIN (Resource
temporarily unavailable)
select(10, [], [], NULL, {1, 0})        = ? ERESTARTNOHAND (To be restarted)
--- SIGCHLD (Child exited) ---
select(10, [], [], NULL, {0, 530000})   = 0 (Timeout)
read(10, "libGLcore.so.1\nlibGL.so.1\nlibglx"..., 8192) = 36
read(10, "", 8192)                      = 0
close(10)                               = 0
rt_sigaction(SIGPIPE, {SIG_DFL}, {SIG_IGN}, 8) = 0
wait4(1780, [WIFEXITED(s) && WEXITSTATUS(s) == 0], 0, NULL) = 1780
write(2, "chyba: ", 7)                  = 7
write(2, "\370\341dek 224: Polo\276ky v z\341vislostec"..., 86) = 86
write(2, "chyba: ", 7)                  = 7
write(2, "Selhalo vyhled\341n\355 Provides:\n", 28) = 28

testy jsem dělal na balíčku NVIDIA_GLX-1.0-1512.src.rpm a pořád jsem 
dopadal stejně.

Tak jsem se nakonec zameřil na find_provides.
vytvořil jsem si test soubor a zkusil

[root na nest tmp]# cat dirs
nv/lib/libGLcore.so.1.0.1512
nv/lib/libGL.so.1.0.1512
nv/X11R6/lib/modules/drivers/nvidia_drv.o
nv/X11R6/lib/modules/extensions/libglx.so.1.0.1512
[root na nest tmp]# cat dirs | /usr/lib/rpm/find-provides

libGLcore.so.1
libGL.so.1
libglx.so
[root na nest tmp]#
Zaujal mě prázdný řádek ve výpisu, určitě viník. Tak jsem zkusil hexa.

00000000 1B 28 4B 0A  6C 69 62 47  4C 63 6F 72  65 2E 73 6F  2E 31 0A 6C 
  69 62 47 4C             .(K.libGLcore.so.1.libGL
00000018 2E 73 6F 2E  31 0A 6C 69  62 67 6C 78  2E 73 6F 0A 
                            .so.1.libglx.so.

Zkusím prázdný seznam
[root na nest tmp]# echo | /usr/lib/rpm/find-provides

[root na nest tmp]# echo | /usr/lib/rpm/find-provides >test
[root na nest tmp]#
Zase prázný řádek :-(
00000000 1B 28 4B 0A                                 .(K.

OK, jak se tam dostane? zkusil jsem ve find_provides změnit /bin/bash na 
/bin/bash -x
[root na nest tmp]# echo | /usr/lib/rpm/find-provides
+ alias 'rm=rm -i'
+ alias 'cp=cp -i'
+ alias 'mv=mv -i'
+ '[' -f /etc/bashrc ']'
+ . /etc/bashrc
++ echo -e '\033(K'

++ alias 'cdc=cd /mnt/c'
++ alias 'cdd=cd /mnt/d'
++ alias 'cda=mount /mnt/a ; cd /mnt/a'
++ alias 'cddoc=cd /mnt/c/Dokumenty'
++ alias 'cdlinux=cd /usr/src/linux'
++ alias 'cdrh=cd /usr/src/redhat'
++ alias 'cdcd=cd /mnt/cdrom'
++ alias 'mcd=mount /mnt/cdrom ; cd /mnt/cdrom'
++ alias 'ucd=cd / ; sleep 1 ; umount /mnt/cdrom ; eject'
++ alias 'weblint=weblint -x'
++ alias 'inject=eject -t'
++ '[' '' ']'
++ sed 's/['\''"]/\&/g'
+ filelist=
++ echo
++ grep '\.so'
++ grep -v '^/lib/ld.so'
++ xargs file -L
++ grep 'ELF.*shared object'
++ cut -d: -f1
+ solist=
++ echo
++ grep '\.pm$'
+ perllist=
+ pythonlist=
+ tcllist=
++ uname -m
+ mark64=()(64bit)
+ sort -u
+ '[' -x /usr/lib/rpm/perl.prov -a -n '' ']'
+ '[' -x /usr/lib/rpm/python.prov -a -n '' ']'
+ '[' -x /usr/lib/rpm/tcl.prov -a -n '' ']'
+ exit 0

A mám to, v  /etc/bashrc jsem zakomentoval řádek echo -e '\033(K'
rpm už šlape jak má.
Dotyčný řádek mi v RH 6.2 myslím uspával monitor. Nevím jestli to v Bash 
2 z RH 7.1 funguje, ale rozhodně to nepatří do bashrc, ale do profile.
Jak jen jsem to tam mohl dát? :-)))

Hlavně, že jsem se dopátral.
Díky za pomoc


-- 
+============ Marián Kyral ============+ +-----------------------------+
+--------+-----------------------------+ | Když selžou všechny pokusy, |
| email: | marian.kyral na worldonline.cz | | přečti si konečně návod !!  |
| ICQ#:  | 62938937                    | |                             |
| WWW:   | mkyral.web.worldonline.cz   | |                   -- Murphy |
+--------+-----------------------------+ +-----------------------------+






Další informace o konferenci Linux