转自:http://www.right.com.cn/forum/thread-131035-1-1.html

本人菜鸟,最近在学习这方面的知识,在参考资料的基础上总结如下内容。

这篇文章针对如何对openwrt开源系统的LUCI界面进行配置!

主要如下三点:

第一,主要介绍了该如何修改luci源代码,在哪里进行修改;

第二,在LuCI里如何写一个自己的模块;

第三,LuCI实现启动应用程序等脚本命令。

一、如何修改LUCI源代码

如何修改该LuCI的源代码,你首先需要了解一下LuCI基本知识,包括它的模块怎么写的,用的是lua语言等,LuCI实现启动应用程序等脚本命令,然后知道怎么将luci编译进固件中去:输入./scripts/feeds/ install luci。这样子你就会发现feeds文件夹下面有luci了,但是里面除了文件夹一无所有,回到menuconfig中去回发现有luci了,还可以选择ddns等模块,还可以选择中文语言了,可以编译到固件中去了。那么我们就编译一下试试。

在dl文件夹中,我们看到了luci-0.10+svn7976.tar.gz,这证明源码其实是在这里的,我们又进入build_dir/target-mips_uClibc-0.9.30.1这个文件夹下面发现了解压的上述文件,其实这个就是编译的文件夹,里面有theme之类的等等,找个theme里面的header.htm改改编译后看看,发现在新的固件中已经出现了改动,这里说明修改成功了。我再模仿application文件夹下面的一些程序,如luci-ddns写了一个luci-smustar的配置程序界面放到这个文件夹下面,回头到menuconfig中发现没有,怎么办?回到feeds/luci/luci中找到makefile加入$(eval $(call application,smustar,smustar for 802.1x,\+PACKAGE_luci-app-smustar:smustar-scipts))^_^,再回到menuconfig中就看到了,果断的选了,然后就编译到固件中去了,折腾了我几天的luci终于在bulder_dir下找到源码可以修改,不过最好别该这里修改,要改就修改makefile和dl下的源码吧,省得有时候buldr_dir下面的源码会被dl下的那个压缩文件解压过去,扔在里面的文件就会丢失。

二、在LUCI中如何写一个模块

玩openwrt的人都会知道LuCI,因为每次进入系统的时候会有大大的字显示了luci interface configuration,有了这个接口确实不错,方便傻瓜般的配置我们的界面。主要参考资料如下:

官网资料: http://luci.subsignal.org/

在官网的resource中可以找到一个

Documentation: References and HowTos

别的先不说,直接就奔我们的主题吧

HowTo: Write Modules

硬是要翻译的话,就是怎么写一个模块,ok,我就是想要写802.1x的认证模块

按照官方的说法,要完成一个模块并用到里面需要两个东西,

第一个我们先找到usr/lib/lua/luci/controller在里面建立一个文件夹,也就是我们的模块名称smustar

在smustar下面再写我们模块的主文件smumodule.lua

参考官网,我们的模块写法应该是这样写的

module(“luci.controller.smustar.smumodule”, package.seeall)

function index()

entry({“admin”, “network”, “802.1x”}, cbi(“smustar-smumodule/netifaces”), “Network interfaces”, 30).dependent=false

end

第一句话是声明一下这个模块了。

第二句话就是我们模块的主函数,其中要告诉它我们的入口,与其说入口,不如说就是告诉它是要admin登录才能用的,是在network这个菜单下,名字叫做802.1x。模块执行的程序在smustar-smumodule/netifaces这里。

smustar-smumodule/netifaces是什么东西?这是我们要建立的另外一个文件。

我们找到路径/usr/lib/lua/luci/module

在下面建立文件夹smustar-smmodule建立文件netfaces.lua

好了接下来就是要在netfaces.lua写我们的程序了,参考官网所说的这个什么luci最酷的地方,也就是修改config文件

不要说你不懂什么是config文件了,最简单的比如network。

我们在/etc/config下面建立一个配置文件叫smuset

那这就是一个config文件的写法

config  ‘interface’  ‘smustar’

option ‘user’ ‘youruser’

option ‘pass’ ‘yourpass’

ok这个config文件就是这样子了,接下来写netfaces.lua

m = Map(“smuset”, “smustar”) — We want to edit the uci config file /etc/config/smustar 这里是我们要配置的文件了,默认的路径它已经能够区别的,不用管了

s = m:section(TypedSection, “interface”, “smustar”) — Especially the “interface”-sections读出里面的interface区域来

s.addremove = true — Allow the user to create and remove the interfaces

s

ption(Value, “user”, “youruser”)这个能就是一个input即一个输入框了读取的是smuset中的user项。youruser是提示语罗

key=s

ption(Value, “pass”, “your password”)

key.password=true; 设置为星号的密码输入框

return m — Returns the map

好了文件就完成了,之后我们进入luci配置界面

在network下可以看到了802.1x选项

进入后有账号和密码输入框 改一下之后

save&apply一下,发现密码被修改了。我们的802.1x配置界面就做好了!

三、LuCI实现启动应用程序等脚本命令

当我们点击这个按键时候,luci可以实现运行一个应用程序或者脚本的话,你需要知道LuCI开发的一个函数luci.http.formvalue ,这个函数就是用来获取我们的post过去表单的值的,假设你配置页面是一个帐号和密码,然后你需要在点击按键“保存并应用”的时候启动我们的应用程序(我这里是smustar),那么你只要检测该按键的值是否传递过去了,如果传递过去了则是用户提交后页面,如果没有这个值,那么只是用户第一次进入这个页面而已,和wordpress何其相似。代码如下:

local reboot = luci.http.formvalue(“cbi.apply”)

if reboot then

s

ption(DummyValue,”xiugai”,”帐号和密码修改成功!认证已经开启,如果是还没连上网,请确认帐号仍有余额或未在别处登录。”)

luci.sys.call(“killall smustar”)

luci.sys.call(“smustarLogout &”)

luci.sys.call(“smustar &”)

end

如果你需要多个按键,并且这些按键都有不同作用的话,你需要加入一个按钮,同样只要检测这个按钮就知道是不是用户点击了这个按钮提交过去的页面了,比如点击个按钮重启,代码如下:

s

ption(Button,”logout”,”重启”)

local logout=luci.http.formvalue(“cbid.smuset.smustar.logout”)

if logout then

s

ption(DummyValue,”tuichu”,”重新启动中!”)

luci.sys.call(“reboot”)

end

LuCI提供的这个函数luci.sys.call允许你调用shell等任何linux下的脚本或者执行程序,你可以用它来进行更多的程序交换,也就是实现了web配置和linux执行程序之间的交互。如果你需要更加复杂的交互,你可以用luCI的文件函数来得到与程序间的沟通,当然这个程序也得通过文件来交流,如果是自己的程序那好办,如果不是那就期待它提供命令调用,不过一般都支持了。

参考资料:http://chaochaoblog.com/

luci编程 openwrt_openwrt开源系统LUCI配置界面相关推荐

  1. 无线专题 openwrt feeds、web框架luci(lua语言)、UCI (统一配置接口)

    1.openwrt feeds UCI (统一配置接口)openwrt官方说明(有中文版本):https://oldwiki.archive.openwrt.org/zh-cn/doc/uci 在Op ...

  2. Android编程获取网络连接状态及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  3. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面

    http://www.mobiletuts.me 获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. An ...

  4. android编程获取网络和wifi状态及调用网络设置界面,Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 - Android平台开发技术 - 博客园...

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  5. Android编程 获取网络连接状态 及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  6. Linux系统编程 / 分析开源软件Triggerhappy

    哈喽,我是老吴,继续记录我的学习心得 自制力太强导致低效专注 自制力很强的人的成功之道在于,在别人都放弃的情况下仍坚持不懈. 但是这反而会让他们难以关闭专注模式,导致无法进入解决难题所必要的发散模式. ...

  7. RHEL6.3x64 RHCS+Conga(Luci/ricci)+iscsi +CLVM+GFS+Apache配置

    1.拓扑 主机名                主机用途      IP地址      虚拟IP(VIP) FreeNAS              ISCSI Server  172.16.1.20 ...

  8. 从Storm到Flink:大数据处理的开源系统及编程模型(文末福利)

    本文节选自CCF大数据教材系列丛书之<大数据处理>,本书由华中科技大学金海教授主编,包括大数据处理基础技术.大数据处理编程与典型应用处理.大数据处理系统与优化三个方面.本教材以大数据处理编 ...

  9. 从Storm到Flink:大数据处理的开源系统及编程模型

    开源系统及编程模型基于流计算的基本模型,当前已有各式各样的分布式流处理系统被开发出来.本节将对当前开源分布式流处理系统中三个最典型的代表性的系统:Apache Storm,Spark Streamin ...

最新文章

  1. Linux防火墙iptables学习
  2. Solidworks如何创建投影曲线
  3. 创建用于 ASP.NET 的分页程序控件
  4. oracle schema_Oracle数据库坏块检查与修复
  5. 《数据驱动安全:数据安全分析、可视化和仪表盘》一3.3 读入数据
  6. uboot 详细注释讲解
  7. CTF Geek Challenge——第十一届极客大挑战Pwm Write Up
  8. js堆和栈的区别_几个例子理解不同数据类型的堆栈内存处理
  9. 使用Mockito时遇到的一些问题
  10. saas物资管理界面设计_大型物流企业都在用的SaaS系统,看大规模运配网络如何实现精细化管理?...
  11. 退出页面删除cookie_Cookie 机制
  12. CentOS6.5 安装+ Tengine + PHP + MySQL
  13. python查看汉字的编码_python汉字编码
  14. (伪)点到线段的距离 C++
  15. c语言切蛋糕题编程,切蛋糕问题.ppt
  16. iis+php解析漏洞修复,IIS+PHP fastcgi模式 pathinfo取值错误任意代码执行漏洞修复方法...
  17. Seata的四种模式介绍
  18. 问号在c语言里面的作用,问号的作用是什么-写作基础知识
  19. .Net深入学习:序列化
  20. mysql的结构化编程_月光软件站 - 编程文档 - 其他语言 - 结构化子查询:在mysql4.1中的应用...

热门文章

  1. .gitignore更新后如何生效
  2. 准确率,召回率,F值,机器学习分类问题的评价指标
  3. spring mvc在Controller中获取ApplicationContext
  4. ASIHTTPRequest详解
  5. 猜数字if循环(1)
  6. 数据库(oracle) 索引
  7. Kickfire Enters into MySQL Enterprise Agreement with Sun
  8. android异步编程,AsyncTask简单的异步编程android 中的实现
  9. java 实现协方差_无监督数据降维技术-主成分分析(PCA)的Python实现
  10. 关于操作 ASP.NET Web API的实例