PyICQt

Материал из Lblss.ru
Перейти к: навигация, поиск

У меня этот асько-транспорт прикручен к Openfire взамен штатного плагина. Штатный не устроил корявой работой с пользовательским инфо. Само по себе подключение PyICQt в консоли Openfire не вызывает проблем. Здесь опишу только некоторые особенности установки/запуска.

Пользователь ejabberd используется исключительно по традиции.


Содержание

Очередность запуска

Так как PyICQt использует СУБД MySQL и должен работать с сервером Openfire, необходимо определить в rc-скрипте (см. ниже) очередность запуска, добавив строку:

# REQUIRE: openfire mysql

Проблемы при переходе на Python 2.6

Стартовый скрипт

FreeBSD 8.1. На Python 2.5 эта хрень работала, а вот при использовании Python 2.6 стартовать через штатный rc-скрипт отказалась. Самое прикольное, что в зависимостях висит именно питон 2.6. Видимо, не слишком рабочее решение изначально. Решение помогла найти эта статья. Теперь стартовый скрипт выглядит иначе.

Замечу что после обновления Python до версии 2.7 этот же скрипт остался без изменений за исключением изменения номера версии.

cat /usr/local/etc/rc.d/jabber-pyicq-transport

# PROVIDE: jabber_pyicq
# REQUIRE: DAEMON
# REQUIRE: openfire mysql
# KEYWORD: shutdown

. /etc/rc.subr

name="jabber_pyicq"
rcvar=`set_rcvar`

load_rc_config $name

: ${jabber_pyicq_enable="NO"}
: ${jabber_pyicq_dir="/usr/local/lib/jabber/pyicq"}
: ${jabber_pyicq_piddir="/var/run/pyicq"}
: ${jabber_pyicq_user="ejabberd"}

export PYTHON_EGG_CACHE=/var/spool/ejabberd/.python-eggs/

pidfile="${jabber_pyicq_piddir}/PyICQt.pid"
python="/usr/local/bin/python2.7"
procname="${python}"
command="/usr/sbin/daemon"
command_args="${python} ${jabber_pyicq_dir}/PyICQt.py -o pid=${pidfile}"

run_rc_command "$1"

Сомневаюсь в правильности использования экспорта переменной окружения. Без неё питон пытается создать кеш в /root, что ему не удаётся, естественно. Возможно, есть более правильное решение.

Модули

Вторая проблема, с которой столкнулся - это сообщения об ошибках

/usr/local/lib/jabber/pyicq/src/avatar.py:9: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
  import sha
/usr/local/lib/jabber/pyicq/src/tlib/oscar.py:24: DeprecationWarning: the md5 module is deprecated; use hashlib instead
  import md5

Ужасного в этих варнингах нет ничего, работает и так. Но вообще то, есть обсуждение и там же ссылка на патч.

Проблема с реактором

При запуске вываливается сообщение Unable to find a reactor.

Решение отсюда: в /usr/local/lib/jabber/pyicq/src/main.py в самом начале заменяем сложный алгоритм выбора реактора

reactorchoices = ["epollreactor", "kqreactor", "cfreactor", "pollreactor", "selectreactor", "posixbase", "default"]
...
print "Unable to find a reactor.\nExiting..."
sys.exit(1)

на пару строк:

from twisted.internet import selectreactor as bestreactor
bestreactor.install()

Установка вручную

Архив со скриптами распаковать в /usr/local/lib/jabber/pyicq, стартовый скрипт (см. выше) положить куда надо. Туда же сделать симлинк с именем config.xml на файл конфига (хорошо бы его в параметрах указать, но это искать надо, где и как).

Чуть выше есть правка по подключению реактоора - тоже надо.

Далее новенькое. Скрипты не подхватили библиотеку Image, хотя, библиотека PIL (порт py27-pillow) установлена на сервере. При запуске же скрипта лезет ругачка на ее отсутствие. Устраняется сие правкой в src/contact.py и src/imgmanip.py, там следует поправить так: import PIL as Image.

Персональные инструменты