openwrt开源系统LUCI配置界面
转自: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的文件函数来得到与程序间的沟通,当然这个程序也得通过文件来交流,如果是自己的程序那好办,如果不是那就期待它提供命令调用,不过一般都支持了。
openwrt开源系统LUCI配置界面的更多相关文章
- openwrt web管理luci界面修改
转自:http://blog.csdn.net/user_920/article/details/8504979 以前都没听过openwrt和luci,只接触过简单的php语言.由于工作原因,要修改下 ...
- 开发OpenWrt路由器上LuCI的模块
[题外话] 学校里最近改造了校园网,要求必须用iNode验证,万幸的是路由器能刷OpenWrt,并且OpenWrt上有好多iNode认证的开源项目,比如njit8021xclient(以下简称njit ...
- 路由器开源系统openwrt配置页面定制
1. 新建虚拟机,百度文库有一篇<使用VMware安装OpenWrt>,地址:http://wenku.baidu.com/link?url=NkvaQpTf2dR8FpYn7JD9A7- ...
- 2 OpenWrt路由器系统开发与网页设计
https://www.zhongkerd.com/news/content-729.html 摘 要: 目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户 ...
- Linux 桌面系统字体配置要略
字体显示效果测试 这一段是为了测试宋体字的显示效果,包括宋体里面自带的英文字体,“This is english,how does it look like?”.这一行是小字.后面几个字是加粗的宋体. ...
- C#开源系统大汇总(个人收藏)
C#开源系统大汇总 一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖 ...
- 安装Debian 7.8 过程,以及该系统的配置过程
最近,我给自己的电脑安装了Debian操作系统,版本7.8 stable.Debian我相信大家都能了解,它是Ubuntu的基础,Ubuntu是基于Debian的unstable开发的.我安装这个系统 ...
- zabbix监控系统的配置
一.zabbix介绍 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系 ...
- OpenWrt Web 开发 LuCI框架 lua语言
LuCI作为“FFLuCI”诞生于2008年3月份,目的是为OpenWrt固件从 Whiterussian 到 Kamikaze实现快速配置接口.Lua是一个小巧的脚本语言,很容易嵌入其它语言.轻量级 ...
随机推荐
- 80端口被System进程占用问题
更新: 有可能占用80端口的服务: 如果安装了IIS,关闭IIS: 如果未开启IIS功能,而安装了诸如Web Matrix的开发程序,则有可能被Web Development Agent Servic ...
- hive学习(二) hive操作
hive ddl 操作官方手册https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL hive dml 操作官方手 ...
- python import模块的搜索路径
当在py代码中import所依赖的模块时, python是从哪里找到这些模块呢,即模块的搜索路径是啥? 默认情况下,Python解释器会搜索当前目录.所有已安装的内置模块和第三方模块,搜索路径存放在s ...
- 虚拟机Visualbox安装CentOS
选择安装CentOS系统 进入了安装界面,选择语言,并选择继续 安装的主界面 1.先选择日期时间,选择了亚洲,并选择上海,再点击左上角的完成按钮 2.再选择键盘,选择英文 3.选择语言为英语 4.选择 ...
- Team Service 编译项目并生成项目
第一步:生成GitHub帐号连接 在Service中选择Github 在弹出的GitHub连接中点击授权,即会弹出另一个窗口,输入Github的用户名及口令,即可授权. 第二步:创建Build定义 解 ...
- 二分查找(BinarySearch)
http://blog.csdn.net/magicharvey/article/details/10282801 简单描述 二分查找,又名折半查找,是一种在有序序列中查找特定元素的搜索算法.搜素过程 ...
- php 获取指定月份的开始结束时间
/** * * 获取指定年月的开始和结束时间戳 * * @param int $y 年份 * @param int $m 月份 * @return array(开始时间,结束时间) */ functi ...
- HDU 1016.Prime Ring Problem-素数环,相邻两数和为素数-DFS
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- 转:攻击JavaWeb应用[4]-SQL注入[2]
转:http://static.hx99.net/static/drops/tips-288.html 攻击JavaWeb应用[4]-SQL注入[2] 园长 · 2013/07/18 17:23 注: ...
- Flask实战第56天:板块管理
cms布局 编辑 cms_boards.html {% block main_content %} <div class="top-box"> <button c ...