Lunatik — это фреймворк для написания сценариев для ядра Linux на Lua. Разрабатывается LabLua в рамках Lua in kernel с явными ссылками на опыт использования Lua в ядре NetBSD.
Основные компоненты
- интерпретатор Lua, модифицированный для работы в ядре;
- драйвера устройства (написаны на Lua);
- средства командной строки для запуска сценариев и управления средами выполнения из пользовательского пространства;
- C API для загрузки и запуска сценариев и управления средами выполнения из ядра;
- Lua API для привязки средств ядра к Lua-скриптам.
Новые возможности
- Механизм синхронизации потоков: completion barrier API, изменения и примеры.
- Механизмы фильтрации трафика: xtables API, netfilter API, изменения.
- Механизм очередей KFIFO API: kfifo, изменения.
- Более широкая поддержка ядер, совместимость с версиями Linux 5.+.
- Поддержка OpenWRT и OpenWiFi: отдельный репозиторий.
- Поддержка языка MoonScript (компилируется в Lua): репозиторий moontastik, репозиторий языка MoonScript.
- Множественные исправления ошибок и доработки.
Группа разработчиков Lunatik выражает благодарность контрибуторам, благодаря которым стал возможен этот релиз: sav и marcelstanley из Ring-0 Networks, sheharyaar, jperon, vincentmli, rustedusted, glk0, ну и конечно же всем другим участникам, работающими над Lunatik.
Пример драйвера устройства для генерации простых «паролей»
-- /lib/modules/lua/passwd.lua
--
-- implements /dev/passwd for generate passwords
-- usage: $ sudo lunatik run passwd
-- $ head -c <width> /dev/passwd
local device = require("device")
local linux = require("linux")
local function nop() end -- do nothing
local s = linux.stat
local driver = {name = "passwd", open = nop, release = nop, mode = s.IRUGO}
function driver:read() -- read(2) callback
-- generate random ASCII printable characters
return string.char(linux.random(32, 126))
end
-- creates a new character device
device.new(driver)