Disalah satu server hosting tiba-tiba muncul error berikut.
Traceback (most recent call last):
File "/scripts/createvhosts.py", line 152, in ?
parsedDOC = minidom.parseString(DOC)
File "/usr/lib/python2.4/xml/dom/minidom.py", line 1924, in parseString
from xml.dom import expatbuilder
File "/usr/lib/python2.4/xml/dom/expatbuilder.py", line 32, in ?
from xml.parsers import expat
File "/usr/lib/python2.4/xml/parsers/expat.py", line 4, in ?
from pyexpat import *
ImportError: /usr/lib/python2.4/lib-dynload/pyexpat.so: undefined symbol: XML_StopParser
Error ini muncul pada salah satu script python yang meng-create virtual host dari nginx webserver.
Setelah tanya-tanya ke om google dikatakan adanya dua versi dari expat. Kok bisa ya padahal sebelumnya berjalan normal. Kemungkinan ini terjadi dari update otomatis dari system.
Bagaimana memperbaikinya ?
Ini langkah-langkah yang saya kerjakan.
Periksa list dynamic dependencies dengan ldd dari error tersebut.
[root@]# ldd /usr/lib/python2.4/lib-dynload/pyexpat.so
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x00af0000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00e96000)
libc.so.6 => /lib/libc.so.6 (0x005da000)
/lib/ld-linux.so.2 (0x002fd000)
Terlihat pyexpat.so mempunyai dependency libexpat.so.0 , dan berada pada /usr/lib/libexpat.so.0
Kita periksa apakah ada file lain yang bernama libexpat pada /usr/lib/
[root@]# ls -la /usr/lib/libexpat*
-rw-r--r-- 1 root root 196826 Sep 7 2010 /usr/lib/libexpat.a
-rwxr-xr-x 1 root root 706 Sep 7 2010 /usr/lib/libexpat.la
lrwxrwxrwx 1 root root 27 Jun 16 22:32 /usr/lib/libexpat.so -> ../../lib/libexpat.so.0.5.0
lrwxrwxrwx 1 root root 17 Apr 7 14:48 /usr/lib/libexpat.so.0 -> libexpat.so.0.4.0
-rwxr-xr-x 1 root root 331044 Aug 31 2007 /usr/lib/libexpat.so.0.4.0
Nah terlihat ada kejanggalan, ada 2 versi libexpat, libexpat.so.0.5.0 dan libexpat.so.0.4.0.
/usr/lib/libexpat.so merupakan simbolik link dari ../../lib/libexpat.so.0.5.0 dan
/usr/lib/libexpat.so.0 merupakan simbolik link dari libexpat.so.0.4.0
Kita periksa lagi file ../../lib/libexpat.so.0.5.0 yang sebenarnya berada pada /lib/libexpat.so.0.5.0
[root@]# ls -la /lib/libexpat*
lrwxrwxrwx 1 root root 17 Jun 16 22:32 /lib/libexpat.so.0 -> libexpat.so.0.5.0
-rwxr-xr-x 1 root root 131736 Sep 7 2010 /lib/libexpat.so.0.5.0
Sekarang sudah mulai jelas dan memang ada dua versi dari libexpat yaitu libexpat.so.0.5.0 dan libexpat.so.0.4.0
Disini saya ingin pakai versi terbaru yaitu libexpat.so.0.5.0 maka kita hapus simbolik link dari libexpat.so.0.4.0 yang ke /usr/lib/libexpat.so.0
[root@]# cd /usr/lib/
[root@cabang publicnginx]# rm /usr/lib/libexpat.so.0
rm: remove symbolic link `/usr/lib/libexpat.so.0'? y
Kemudian kita buat simbolik link yang baru dari versi libexpat.so.0.5.0
[root@]# ln -s ../../lib/libexpat.so.0.5.0 /usr/lib/libexpat.so.0
Kita periksa kembali apakah sudah sesuai
[root@]# ls -la /usr/lib/libexpat*
-rw-r--r-- 1 root root 196826 Sep 7 2010 /usr/lib/libexpat.a
-rwxr-xr-x 1 root root 706 Sep 7 2010 /usr/lib/libexpat.la
lrwxrwxrwx 1 root root 27 Jun 16 22:32 /usr/lib/libexpat.so -> ../../lib/libexpat.so.0.5.0
lrwxrwxrwx 1 root root 27 Jun 16 23:03 /usr/lib/libexpat.so.0 -> ../../lib/libexpat.so.0.5.0
-rwxr-xr-x 1 root root 331044 Aug 31 2007 /usr/lib/libexpat.so.0.4.0
/usr/lib/libexpat.so -> ../../lib/libexpat.so.0.5.0 dan /usr/lib/libexpat.so.0 -> ../../lib/libexpat.so.0.5.0 sudah ke file libexpat yang sama.
Masalah terselesaikan :)
- aboen's blog
- Add new comment
- 750 reads


Recent comments
3 days 9 hours ago
1 week 4 days ago
7 weeks 4 days ago
16 weeks 5 days ago
18 weeks 4 days ago
19 weeks 1 day ago
19 weeks 1 day ago
20 weeks 17 hours ago
20 weeks 1 day ago
20 weeks 1 day ago