luci网页shell_openwrt luci web分析

luci网页shell_openwrt luci web分析openwrtluciweb分析www/cbi-bin/lucirun方法的主要任务就是在安全的环境中打开开始页面(登录页面),在run中,最主要的功能还是在dispatch.lua中完成。LUCI的MVC用户管理:在luci的官方网站说明了luci是一个MVC架构的框架,这个MVC做的可扩展性很好,可以完全的统一的写自己的html网页,而且他对shell的支持相当的到位,(因为luci是lu…

openwrt luci web分析

www/cbi-bin/luci

run方法的主要任务就是在安全的环境中打开开始页面(登录页面),在run中,最主要的功能还是在dispatch.lua中完成。

LUCI的MVC

用户管理:

在luci的官方网站说明了luci是一个MVC架构的框架,这个MVC做的可扩展性很好,可以完全的统一的写自己的html网页,而且他对shell的支持相当的到位,(因为luci是lua写的,lua是C的儿子嘛,与shell是兄弟)。

在登录界面用户名的选择很重要,luci是一个单用户框架,公用的模块放置在/luci/controller/下面,各个用户的模块放置在/luci/controller/下面对应的文件夹里面,比如 admin登录,最终的页面只显示/luci/controller/admin下面的菜单。这样既有效的管理了不同管理员的权限。

controller

controller主要用于控制页面按钮位置,以及调用的功能.首先来编辑这个文件.

代码如下:

格式模板:

这个脚本文件可以分为3块:第1行,37行,916行

第1行

说明了模块的名称,本文在controller目录下创建了addtest.lua文件,将模板中的控制器名替换为addtest即可.

第3行

第3~7行定义按钮的位置,调用的功能,显示名称.其中第3行和第7行是固定的模板格式,不需要修改

第4行

entry表示添加新的模块.

第一个参数{“admin”,”system”,”addtest”}表示按钮的位置.admin表示我们这个功能只有以管理员身份登录页面才可以看到.system表示一级菜单名,addtest则是一级菜单下的子菜单.

第二个参数alias(“admin”,”system”,”addtest”,”set”)表示调用的功能.这个按钮没有独立的功能,而是将它关联到它的下一级子菜单set.

第三个参数_(“AddTest”)表示显示名称,可选.如果页面按钮想做成中文,可以在这里设置.

第四个参数99表示显示顺序的优先级,Luci根据这个值为同一父菜单的所有子菜单排序.

第5行

第一个参数{“admin”,”system”,”addtest”,”set”}表示在addtest下再增加一个子选项set.

第二个参数cbi(“addtest”)表示调用cbi模块,这里将会调用到/usr/lib/lua/luci/model/cbi/addtest.lua

第6行

第二个参数call(“action_info”)表示执行指定方法,这里将会调用我们下面写的acttion_info函数.

备注

关于entry第二个参数调用目标.我们还有一个template没有涉及,它表示访问指定页面.比如template(addtest_info)将会直接访问/usr/lib/lua/luci/view/addtest_info.htm.

9~16行

这里使用lua语言调用nixio接口写了一个简单的函数,首先判断文件是否存在,然后读取其中的内容赋值给变量info,最后访问指定页面/usr/lib/lua/luci/view/addtest_info.htm,同时将变量info传递过去.

luci接口手册

nixio接口手册

uci

UCI是openwrt的配置管理机制,它将配置统一放到/etc/config文件夹下.详细地介绍请参考这里.

下面来编辑这个文件

代码如下:

Section开始语法: config ‘类型’ ‘名字’

参数定义语法: option ‘键’ ‘值’

列表定义语法: list ‘集合名字’ ‘值’

简单解释下,我们在/etc/config下新建一个名为addtest的配置文件,其中类型为arguments,名字省略.有两个键,一个名为interval用来存时间间隔.一个名为content用来存准备周期性输入的内容.

model

在controller提到cbi会调用到model文件夹中的addtest.lua文件.下面来编辑它

代码如下:

来解释下这个文件

第1行

模板m = Map(“配置文件文件名”, “配置页面标题”, “配置页面说明”)

第一个参数:上一步我们新建配置文件/etc/config/addtest.这里就是建立与配置文件的联系.

第二,三两个参数,则是页面的主标题和副标题.还不清楚的话,翻上去看看最终效果图,看看它们在哪里.

第3行

在一个配置文件中可能有很多Section,所以我们需要创建与配置文件中我们想要的Section的联系.

有两种方式可以选择:NamedSection(name,type,title,description)和TypedSection(type,title,description),前者根据配置文件中的Section名,而后者根据配置文件中的Section类型.我们选用了第二种.

第4行

设定不允许增加或删除Section

第5行

设定显示Section的名称,这里建议你可以试试设定为true,看看会发生什么.

7~9行

接着则是建立与Section中的option之间的联系.模板s:option(交互形式,option键值,显示名称).

第一个参数:常见的交互形式有Value(文本框),ListValue(下拉框),Flag(选择框).,不知道为啥我打不开官方文档,这里也可以参考

第二个参数表示在配置文件中的option的键值

第三个参数表示,你希望在页面上呈现的名称.

创建后开发者无需考虑读取以及写入配置文件的问题,系统会自动处理.

11~14行

系统会为我们在页面上自动创建一些按钮Save&Apply,Save,Reset.我们仅仅将配置写入/etc/config下对应的文件是不够的,我们还希望可以根据这个配置进行一些操作.

这部分代码的作用是,当你按下页面的apply按钮后,相当于在串口shell下输入/etc/init.d/addtestd restart

init.d

上面已经可以读写配置了,怎么根据配置来进行操作呢?来编辑~/temp/addtest/files/etc/init.d/addtestd这个文件.

代码如下:

第1行

Linux 系统根据 “#!” 及该字串后面的信息确定该文件的类型,表示这个文件需要由/bin/sh和/etc/rc.common来解释执行.

第2行

表示启动的优先级,这里暂时用不到

4~17行

是一个函数,主要作用是读取/etc/config/addtest中的内容,然后根据是否打开开关在第15行将配置传递给可执行文件addtest,由它根据配置执行指定的操作.

读取配置的方法,我强烈推荐你阅读官方文档,精炼而简洁.

获取布尔值类型:config_get_bool 变量名 Section名 Section参数名

获取变量值:config_get 变量名 Section名 Section参数名

19~23行

对应于/etc/init.d/addtestd start.首先使用config_load 配置文件名的方法载入配置文件,然后使用config_foreach 遍历函数名 Section类型的方法,遍历配置文件中的Section.

25~30行

对应于/etc/init.d/addtestd stop.找到addtest这个进程的进程号,然后杀死它

备注

前面提到的/etc/init.d/addtestd restart中的restart命令,在/etc/rc.common进行了定义,简单来讲就是先执行了stop命令,再执行start命令.

最后务必执行$sudo chmod 755 ~/temp/addtest/files/etc/init.d/addtestd.

src

前面提到run_addtest调用可执行文件addtest,现在我们编辑这部分内容

通过这个可执行文件,我们周期性地将时间戳和内容写入了/tmp/addtest文件.

最后我们写一个简单的Makefile:

View

前面已经根据配置将指定的内容周期性地写入了/tmp/addtest.在controller中我们的函数action_info读取了/tmp/addtest中的内容并访问指定页面/usr/lib/lua/luci/view/addtest_info.htm,同时将读取的内容通过变量info传递过去.

下面我们来编辑这个页面,

Makefile

用一个Makefie文件将它们打包生成一个ipk文件.

================ End

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30743.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注