Мне всегда было очень интересно как заставить плагин Verlihub’а – Lua работать с сокетами. Ведь по сути умей он работать с ними, можно было бы без проблем получать данные из интернета и обрабатывать их силами lua скриптов…
Поехали…
Шаг 1. Получение исходников.
Качаем исходники библиотек Lua и LuaSocket:
/usr/home/fly8r/compile/lib/>wget http://www.lua.org/ftp/lua-5.1.4.tar.gz /usr/home/fly8r/compile/lib/>wget http://luaforge.net/frs/download.php/2664/luasocket-2.0.2.tar.gz
А также получаем сорсы плагина для Verlihub – Lua 1.8.1:
/usr/home/fly8r/compile/plugins/>wget http://www.verlihub-project.org/download/lua-1.8.1.tar.gz
Шаг 2. Установка.
Lua
Распаковываем:
/usr/home/fly8r/compile/lib/>tar xvfz lua-5.1.4.tar.gz
Для 64 битной системы надо исправить файлик /path/to/lua/src/Makefile. Находим строчку:
CFLAGS= -O2 -Wall $(MYCFLAGS)
и дописываем в нее -fPIC:
CFLAGS= -O2 -Wall $(MYCFLAGS) -fPIC
Теперь можно собирать и устанавливать:
/usr/home/fly8r/compile/lib/lua-5.1.4/>make freebsd /usr/home/fly8r/compile/lib/lua-5.1.4/>make install
LuaSocket
Распаковываем:
/usr/home/fly8r/compile/lib/>tar xvfz luasocket-2.0.2.tar.gz
Собираем и устанавливаем:
/usr/home/fly8r/compile/lib/luasockets-2.0.2/>make /usr/home/fly8r/compile/lib/luasockets-2.0.2/>make install
Создаем сивольные ссылки:
/usr/home/fly8r/>ln /usr/local/lib/lua/5.1/socket/core.so /usr/local/lib/libluasocket.so /usr/home/fly8r/>ln /usr/local/lib/lua/5.1/mime/core.so /usr/local/lib/libluamime.so
Lua-1.8.1 plugin
И наконец мы добрались до самого интересного – сборки плагина! Тут в принципе все просто, но есть нюансы.
Распаковываем:
/usr/home/fly8r/compile/plugins/>tar xvfz lua-1.8.1.tar.gz
Конфигурируем с поддержкой luasocket:
/usr/home/fly8r/compile/plugins/lua-1.8.1/>./configure --with-luasocket
И тут мы можем натолкнуться на первый нюанс:
checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yes ...skipped... checking lua5.1/lua.h presence... no checking for lua5.1/lua.h... no configure: error: Please install the lua library headers (lua.h, lualib.h, lauxlib.h)
Не унываем, это строчка говорит нам о том, что библиотека Lua не была найдена. Поэтому поступаем хитро и явно указываем, где конфигуратору искать хедеры и саму библиотеку:
/usr/home/fly8r/compile/plugins/lua-1.8.1/>./configure --with-luasocket CPPFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib
После этого все конфигурируется нормально. Далее собираем и устанавливаем как обычно:
/usr/home/fly8r/compile/plugins/lua-1.8.1/>make /usr/home/fly8r/compile/plugins/lua-1.8.1/>make install
Шаг 3. Подключение к Verlihub.
Вообще в Verlihub предусмотрено 2 способа загрузки плагинов. Расмотрим оба, на примере нашего Lua плагина.
Способ №1.
Для загрузки плагина следует из хаба набрать команду:
!plugin liblua_pi.so
При этом в некоторых случаях хаб может сказать – библиотека не найдена. Странно, ведь мы ее установили. Идем в /usr/local/lib/ и смотрим что с библиотекой. Видим, что сама библиотека liblua_pi.so.0 на месте, а вот символической ссылки в виде имени, которую разыскивает хаб нет. Что ж, не проблема. Делаем символическую ссылку:
/usr/local/lib/>ln -sf /usr/local/lib/liblua_pi.so.0 /usr/local/lib/liblua_pi.so
После чего повторяем предыдущий шаг и грузим библиотеку без проблем.
Чтобы плагин загружался автоматически при каждом запуске хаба, следует создать ссылку на него в каталоге plugins с конфигами хаба:
ln -sf /usr/local/lib/liblua_pi.so /usr/local/etc/verlihub/plugins/
Способ №2.
Он предусматривает использование plugman – менеджера плагинов Verlihub. Для загрузки плагина в хабе набираем команду:
!onplug lua
Или сделать чтобы плагин включался при каждом запуске хаба:
!modplug lua -a1
Теперь у нас к хабу прикручен плагин, позволяющий использовать скрипты, написанные на lua.