problem po portupgrade apache
Dan Lukes
dan at obluda.cz
Wed May 12 17:27:52 CEST 2010
On 05/12/10 13:36, Cizek Milan:
> vcera jsem upgradoval apache20 z portu pres portupgrade (6.2-STABLE)
> # ./apache2 restart
> Performing sanity check on apache2 configuration:
> Syntax error on line 51 of /usr/local/etc/apache2/httpd.conf:
> Cannot load /usr/local/libexec/apache2/mod_deflate.so into server: /usr/local/libexec/apache2/mod_deflate.so: Undefined symbol "deflate"
Pro pochopeni je potreba alespon trochu chapat, jak funguje dynamicky
linker. Nastesti je to jednoduche - stejen jako ten staticky, akoratze
svoji praci dela az pri spousteni programu ;-)
Hlaska znamena, ze pote, co se do pameti nahralo vsechno co se podle
zaznamu nahrat melo, zustal v modulu mod_deflate.so nevyreseny odkaz na
symbol deflate - ktery zadny z jinych modulu nedodal.
Ja uz Apache 2.0 nikde nemam, ale ono to v Apache 2.2 nebude az tak
odlisne. Jen pro kontrolu muzeme overit, ze mod_deflate.so skutecne z
vnejsiho prostredi vyzaduje dodavky symbolu "deflate":
nm /usr/local/libexec/apache2/mod_deflate.so | grep ' deflate$'
To "U" znamena "undefined" a co je undefined musi nekdo jiny defined.
Kdo tedy doda tento symbol ? Ja to ted trochu zkratim - rekneme, ze jsem
mel videni, mi napovedelo, ze symbol doda libz.so
Overim to:
nm /lib/libz.so.* | grep ' deflate$'
Skutecne - 'T deflate' znamena, ze symbol je odsud.
Takze je to jasne - mod_deflate.so potrebuje symbol 'deflate', ktery ma
dodat libz.so
No a u tebe neco z toho neni splneno. Bud' neni v mod_deflate.so
poznamenana zavislost na spravne knihovne vubec, nebo tam sice je, ale v
knihovne, kterou linker najde pozadovany symbol neni. To muze mit
spoustu duvodu - mj. ten, ze knihoven libz ruznych verzi se ti po
systemu potuluje vic a linker najde nejakou jinou nez by mel.
Problem lze hledat mnoha ruznymi zpusoby, napriklad takto:
export LD_UTRACE
ktrace /usr/local/sbin/httpd -t
unset LD_UTRACE
kdump | more
ve vypisu pak hledas zhruba neco takoveho:
--------------------------------
80118 httpd USER RTLD: loaded 0x2839f400 @ 0x28500000 -
0x28505fff (/usr/
local/libexec/apache22/mod_deflate.so)
80118 httpd RET utrace 0
80118 httpd CALL close(0x4)
80118 httpd RET close 0
80118 httpd CALL access(0x280c5000,F_OK)
80118 httpd NAMI "/lib/libz.so.4"
80118 httpd RET access 0
80118 httpd CALL open(0x280c2620,O_RDONLY,<unused>0)
80118 httpd NAMI "/lib/libz.so.4"
80118 httpd RET open 4
--------------------------------
Jestli se v tom miste bude otevirat nejaka jina libz, pripadne se ji
otevrit vubec nepovede - tak vis, kde mas problem.
Tento zpusob funguje jen pokud je kernel prelozen s podporou KTRACE, coz
ja mivam ...
Vsimni si, ze jsem se pri hledani problemu vydal uplne jinou cestou nez
Mirek. To neznamena, ze tahle cesta je spravna a jeho slepa. Klidne to
muze byt i obracene a slepa je ta moje.
Dan
More information about the Users-l
mailing list