Назад | Перейти на главную страницу

Решение проблемы обновления libevent на Amazon AWS

Я создаю приложение (на Python) на Amazon EC2 со следующей цепочкой зависимостей:

gevent-websocket ---> Gevent ---> Libevent

Последний (libevent) был обновлен в воскресенье, и теперь мой сервер генерирует эту ошибку:

(...)
  File "/usr/lib/python2.6/site-packages/gevent-0.13.7-py2.6-linux-x86_64.egg/gevent/__init__.py", line 41, in <module>
    from gevent import core
ImportError: libevent-1.4.so.2: cannot open shared object file: No such file or directory

Не желая тратить много времени на эту проблему, я попытался смягчить ее, создав символическую ссылку на всегда актуальную версию:

$ sudo ln -s /usr/lib64/libevent.so /usr/lib64/libevent-1.4.so.2

Но это не совсем сработало:

(...)
  File "/usr/lib/python2.6/site-packages/gevent-0.13.7-py2.6-linux-x86_64.egg/gevent/__init__.py", line 41, in <module>
    from gevent import core
ImportError: /usr/lib/python2.6/site-packages/gevent-0.13.7-py2.6-linux-x86_64.egg/gevent/core.so: undefined symbol: current_base

Я немного озадачен, как действовать дальше. Стоит ли создавать больше символических ссылок? К чему? Или есть способ лучше решить эту проблему ...

PS. Для записи я использую Amazon AMI.

В обновлении libevent было добавлено изменение версии библиотеки ABI (вы, вероятно, найдете libevent-1.4.so.3). Вы не можете просто создать символическую ссылку, потому что двоичные файлы, созданные против предыдущего ABI, не будут работать (следовательно, undefined symbol: current_base ошибка). Вам необходимо пересобрать gevent для новой версии библиотеки. Похоже, вы установили его из архива яйца или исходного кода, поэтому удалите текущий модуль (удалите /usr/lib/python2.6/site-packages/gevent-0.13.7-py2.6-linux-x86_64.egg) и установите его снова.