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