NJET模块嵌入lua指南

介绍

在NJET和其它系统集成时,有时需要对接外部系统,因为面临的外部系统千差万别, 为每个系统开发单独的c模块实现繁琐,因此可以通过嵌入lua的模式实现定制。作为server端, openresty 开源的lua模块可以满足需要,但作为client,需要额外的框架及lua库

client嵌入架构

额外Lua库

第三方的Lua 库 在auto/lib/luapkg 目录下

由于rpm 构建时,编译时会使用源码目录中的luajit, 以及rpm临时安装文件会拷贝到 rpmbuild 的 %{buildroot}目录,因此所有放到 luapkg 目录下的第三方模块,需要稍微做一些修改,Makefile 中的编译及安装阶段需要识别以下环境变量:

变量 描述
DESTDIR make 时指定的安装路径前缀
LUA_MODULE_DIR Lua 模块安装路径
LUA_CMODULE_DIR Lua C 模块安装路径
LUA_INCLUDE_DIR Lua 头文件地址
LUA_LIB_DIR Lua 链接的库地址

这些环境变量外部构建的脚本可能会设置不同的值, 如果外部环境变量有设置这些值,第三方模块的编译及安装脚本需要使用外部设置的值。例如:

LUA_MODULE_DIR  ?= /usr/local/share/lua/5.1
LUA_CMODULE_DIR ?= /usr/local/lib/lua/5.1
LUA_INCLUDE_DIR ?= /usr/local/include/luajit-2.1
LUA_LIB_DIR   ?= /usr/local/lib

。。。。

install:
        mkdir -p $(DESTDIR)$(LUA_CMODULE_DIR)/smithsnmp
        cp core/core.so $(DESTDIR)$(LUA_CMODULE_DIR)/smithsnmp/
        cp -a lualib/* $(DESTDIR)$(LUA_MODULE_DIR)