Tegnap este frissítettem egyik szerveremen a csomagokat. Lényegi változás az új PHP volt. Production gép, de hát mi baj lehet? ;)
Az eredmény egy kicsit felűlmúlta a várakozásaimat. Konkrétan se kép, se hang. Még konkrétabban: "exit signal Segmentation fault" lett az összes apache child -nél.
Ekkor jutott eszembe egy pár nappal ezelőtti vita egyik haverommal, ahol a Debian vs. Ubuntu volt a téma. Régebben mindketten Debian -t használtunk, de én egy ideje "áruló" lettem és átpártoltam az Ubuntu server -re. A vitának persze nem lett eredménye, de abban azért egyetértettünk, hogy a frissítések megbízhatóságában a Debian a király. Nyugodt szívvel ki lehet adni egy apt-get upgrade -et.
A segmentation fault -ok között hazudnék ha nem jutott volna eszembe, hogy bizony lehet, hohgy én választottam rosszul...
Azért rövid pánik, és aktív Google használat után, kezdett körvonalazódni, hogy mégse lehet olyan nagy gáz ebben az új csomagaban, így nálam van a probléma. Még egy nyom volt, a php logban: "PHP Fatal error: mktime(): Timezone database is corrupt - this should *never* happen!", de ez a segfaultok számához képest elenyésző volt, és különben is elég hülyén hangzott. Így utolsó megoldásként nem volt más, csak a strace.
Így már viszonylag gyorsan előjött a hiba, az apache chroot -jábol hiányzott az /usr/share/zoneinfo/Europe/Budapest és a /usr/share/zoneinfo/Europe/Berlin! Ennek oka az, hogy eddig nem kellett, vidáman ment a szerver ezek nélkül (időzónaval se volt gond) és ha már chroot akkor tényleg csak a legszükségesebbek legyenek benne. Szerintem.
Ebből az egészből több tanulságot is le lehet vonni, de ami ennél érdekesebb az inkább a második hiányzó file: /usr/share/zoneinfo/Europe/Berlin (nyilván sokan nem aprozzák el a dolgot, és bemásolják az egész zoneinfo -t a chroot -ba, így ott ez fel se tűnik). Az tuti, hogy az én timezone -omnak semmi köze Berlin -hez, ugyhogy a tippem az, hogy a programozó igy ellenőrizte, hogy a "Timezone database" rendben van e? Ez azért kicsit szomorú szerintem. Ez a tök értelmetlen ellenőrzés minden kérésnél (ez persze nem igaz) megtörténik ami nemigazán szép megoldás. Másrészt pedig ha nincs ott a Berlin, akkor valóban szükséges a "Fatal error"? Aligha...
Ami még érdekes volt, az a strace kimenete. Amikor az ember PHP -ban programozik, nem is gondol bele abba, hogy alacsonyabb szinten mik is történnek - megdöbbentően sok minden, de ez már 1 külön történet...
Utolsó kommentek