Задача: взять / сделать микроучётную систему для записи прихода / расхода. Исходная система: Alt Linux 7.0

На альте такие вещи реализовываются через различные связки: Framework + PostgreSQL, FPC + Firebird (superserver / portable). Поскольку речь идёт о создании простой программы с базой (ибо Firebird хоть и хорош для хранения больших данных, у него есть «приколы» при работе со связями и отображениями; хранимые процедуры, конечно, это круто, но без корректного механизма отображений и связей это тот ещё геморрой — ждать подтверждение каждой транзакции / записи не прикольно). Связка Ananas + Firebird / MySQL / PostgreSQL (нужное дополнить) не подходит по следующим причинам:

  • Громоздкость приложения во время выполнения, даже если речь идёт о нескольких справочниках с формами.
  • Сбойность самой платформы даже при простом добавлении данных в справочник.
  • Необходимость шаманства с подключением базы чуть ли не при каждом запуске.
  • Некорректно описанный внутренний язык бизнес-приложений — отсутствуют примеры, неудобочитаемый синопсис.
  • Тяжёлая переносимость бизнес-платформы между рабочими станциями.

В итоге выбор остановился на связке Lua + SQLite3. Поскольку всё происходило в Alt Linux 7.0, с интерпретатором пришлось помучиться.

  • Во-первых, в наличии была только версия 5.1.4.
  • Во-вторых, указанная версия версия состояла только из интерпретатора и базовых библиотек. Ни о каком-либо luarocks или luasql речь просто не шла. Окей, вызов принят.


Для сборки компиллятора будут нужны следующие пакеты:

Пакеты, снятые через rpm -qa last, необходимые для разработки.
libsqlite3-devel-static-3.7.15.2-alt1 libsqlite-devel-static-2.8.17-alt2.2 libsqlite-devel-2.8.17-alt2.2 glib-devel-1.2.10-alt18 glib2-devel-2.36.4-alt0.M70P.2 libxcb-devel-1.9.1-alt2 zlib-devel-1.2.8-alt1 libsqlite3-devel-3.7.15.2-alt1 sqlite-2.8.17-alt2.2 libsqlite-2.8.17-alt2.2 libreadline-devel-static-5.2.14-alt3 glibc-devel-static-2.17-alt8.M70P.1 libreadline-devel-5.2.14-alt3 libgcov4.7-devel-4.7.2-alt7 gcc4.7-4.7.2-alt7 glibc-devel-2.17-alt8.M70P.1 glibc-kernheaders-3.8.4-alt1 gcc-common-1.4.16-alt1 glib-1.2.10-alt18

Не стоит бояться этого списка пакетов, поскольку в реале всё устанавливается одной командой:

apt-get install libsqlite3-devel glib-devel libsqlite3-devel-static libxcb-devel zlib-devel sqlite libreadline-devel libreadline-devel-static libgcov4.7-devel gcc4.7 glib -y

Здесь наиболее необходимы gcc, readline, libxcb, libsqlite3, curl и все -devel- пакеты. Без них исходники будут тормозить сборку на каждом шаге.

Хинт.
Если не собираются исходники, смотрите последнюю строку сборки — там указывается пакет. Ищите его в сети и на порталах Alt Linux. Для ускорения процесса можно сделать поиск в базе пакетов:

apt-cache search имя_программы

Команда подумает и выдаст вам имена пакетов с кучей наименований. Дальше вы выбираете и устанавливаете пакеты вышеуказанным способом. Внимание! Все указанные в статье операции выполняются в консоли с правами суперпользователя!

С сайта lua.org берём tar — архив с исходниками (lua-5.3.2.tar.gz) и архив с бинарниками(luabinaries.sourceforge.net). Либо берём бинарники и выполняем в консоли следующий скрипт:

curl -R -O http://www.lua.org/ftp/lua-5.3.2.tar.gz
tar zxf lua-5.3.2.tar.gz
cd lua-5.3.2
make linux test
make linux install

В итоге в папке lua-5.3.2 находятся две: doc и src. Заходим в src и смотрим файлы lua и luac. Это интерпретаторы языка, с которыми мы произведём одно извращение. В консоли нужно набрать следующую команду:

rpm -ql lua5

В выводе смотрим местоположение файлов. Чаще всего это /usr/bin. Копируем туда файлы lua и luac из папки src. Затем заходим в архив с бинарниками, видим папку include и ВСЕ находящиеся в ней файлы копируем в папку /usr/local/include (либо в любую иную, которую укажет luarocks при ошибке компилляции).

Теперь идём на keplerproject.github.io/luarocks/releases/ — здесь забираем архив luarocks-2.3.0.tar.gz. Извлекаем его в каталог и заходим с консоли. Выполняем поочерёдно следующую последовательность команд:

./configure
make
make build
make install

Эта последовательность необходима для того, чтобы luarocks не устанавливался, как «камень»("rocks"), а записывался, как библиотека в системе. Теперь заходим на luarocks.org и в верхней строке поиска вводим "luasql". Жмём на газ. В появившемся окне выбираем ссылку на "LuaSQL-SQLite3" (LuaSQL-SQLite3).

По аналогии с появившейся в статье командой набираем в консоли:

luarocks-5.3 install luasql-sqlite3

Почему luarocks-5.3? Ранее мы подменили стандартный интерпретатор с версии 5.1 до версии 5.3 и вполне логично для совместимости библиотек использовать установку модулей более высокой версии. В консоли выполняем команды:

lua
driver = require "luasql.sqlite3"

Если после этих команд интерпретатор lua выдал приглашение ">", то вы верно подготовили среду разработки:
image

P.S. Маленькая просьба — если хотите передать замечание по этому циклу статей, прошу предварительно прочитать статью «Разработка микро-учётной системы на lua, часть вторая. Постановка задачи», в которой я указываю условия разработки программы и функции, которые на неё возлагаются. Учитывайте это.
Поделиться с друзьями
-->

Комментарии (6)


  1. justabaka
    24.05.2016 14:27

    ./configure
    make
    make install

    Не надо так делать в пакетном дистрибутиве. Собирайте пакеты или хотя бы складируйте подобный софт где-нибудь в /opt через тот же --prefix, например.


    1. hantenellotf
      24.05.2016 19:21

      Уточните конкретнее. Здесь речь идёт о сборке двух Lua — модулей из исходных кодов. После установки в бинарный каталог они не копируются системой, я просто подменяю два базовых файла из общего пакета.
      Alt Linux использует пакетную базу RPM.

      З.Ы. Использование префикса было возможно в luarocks, но сборка с параметром версии 5.3 не вносило никакого эффекта.


  1. mgyk
    25.05.2016 00:27

    pip install hererocks
    hererocks install lua5.3
    export PATH="$PWD/lua53/bin:$PATH" 
    

    https://github.com/mpeterv/hererocks


    1. hantenellotf
      25.05.2016 07:31

      Учёл.


  1. valis
    30.05.2016 07:03

    Как заядлый гик скажу Вам — LUA это классный, компактный язык. Он поддерживает функциональную парадигму, отлично ладит с библиотеками на C и легок в изучении. В общем все что нужно для разработки автоматизации на базе встраиваемых систем и пр.
    Но, как бизнес аналитик и архитектор могу Вам с твердостью заявить:
    У Вас чисто «админский» подход к решению задач — используете то что по Вашему «круто»! Я не буду перечислять и доказывать глупость выбора данной технологии, но вряд-ли кто-то захочет написать учетную систему на LUA


    1. hantenellotf
      30.05.2016 13:44

      Читайте «Разработка микро-учётной системы на lua, часть вторая. Постановка задачи». Там указаны требования, спецификации и список задач, решаемых этими скриптами. На такую узкоспециализированную область накручивать монстров класса Construction ERP (Парус, 1С и иже) мне нафиг не сдалось. Причины выбора компактных систем разработки я указал уже в данной статье.