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

--
FreeBSD mailing list ([email protected])
http://www.freebsd.cz/listserv/listinfo/users-l

Odpovedet emailem