搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
煮酒与君饮
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
oracle的dataguard physical standby转 snapshot standby操作文档
2
六、IPv6基础知识-地址配置方式_如何设置静态ipv6地址
3
【微服务】一文了解Nginx网关搭建教程
4
什么是IP地域封锁?有什么作用?
5
uni-app加持下的Vue开发:效率与功能的双赢_uniapp和vue
6
Flink SQL性能优化实践_flink sql优化
7
Python爬取去哪儿旅游数据_python爬取去哪儿网青岛市民宿数据
8
Word Embedding的通俗解释_独热编码word embedding
9
2017-2018-1 20155216 20155223《信息安全技术》实验四—— 木马及远程控制技术
10
T5(TexttoText Transfer Transformer) 原理与代码实例讲解_text-to-text transfer transformer
当前位置:
article
> 正文
LuCI - 网页用户配置界面开发_嵌入式用lua开发配置网页
作者:煮酒与君饮 | 2024-08-20 13:36:56
赞
踩
嵌入式用lua开发配置网页
luci 参考资料
http://luci.subsignal.org/trac/wiki/Documentation
http://wiki.openwrt.org/doc/techref/preinit_mount?#first.boot
http://www.google.com.hk/search?q=Luci&hl=en&safe=strict&domains=openwrt.org&sitesearch=openwrt.org&prmd=ivnsl&ei=kDCrTc6UGI-WvAO63LH_CQ&start=0&sa=N
http://wiki.openwrt.org/doc/techref/luci
http://wiki.openwrt.org/doc/uci
http://wiki.openwrt.org/doc/techref/uci
LuCI作为“FFLuCI”诞生于2008年3月份,目的是为OpenWrt固件从 Whiterussian 到 Kamikaze实现快速配置接口。
Lua是一个小巧的脚本语言,很容易嵌入其它语言。轻量级. LUA语言的官方版本只包括一个精简的核心和最基本的库。这使得LUA体积小、启动速度快,从而适合嵌入在别的程序里。
UCI是OpenWrt中为实现所有系统配置的一个统一接口,英文名Unified Configuration Interface,即统一配置接口。LuCI,即是这两个项目的合体,可以实现路由的网页配置界面。
最初开发这个项目的原因是没有一个应用于嵌入式的免费,干净,可扩展以及维护简单的网页用户界面接口。大部分相似的配置接口太依赖于大量的Shell脚本语言的应用,但是LuCi使用的是Lua编程语言,并将接口分为逻辑部分,如模板和视图。
LuCI使用的是面向对象的库和模板,确保了高效的执行,轻量的安装体积,更快的执行速度以及最重要的一个特性————更好的可维护性。
与此同时,LuCI从MVC-Webframework衍生出一个包含了很多库、程序以及Lua程序用户接口的集合,但是LuCI仍然专注于实现网页用户界面并成为OpenWrt Kamikaze官方的一份子。
/www/index.html:
<meta http-equiv="refresh" content="0; URL=/cgi-bin/luci" />
<a style="color: white; text-decoration: none" href="/cgi-bin/luci">LuCI - Lua Configuration Interface</a>
在 web server 中的 cgi-bin 目录下,运行 luci 文件(权限一般是 755 ) , luci 的代码如下:
1 #!/usr/bin/lua
-- 执行命令的路径
2 require"luci.cacheloader" -- 导入 cacheloader 包
3 require"luci.sgi.cgi"
-- 导入 sgi.cgi 包
4 luci.dispatcher.indexcache = "/tmp/luci-indexcache" --cache 缓存路径地址
5 luci.sgi.cgi.run()
-- 执 行 run 方法,此方法位于 /usr/lib/lua/luci/sgi/cgi.lua中, 内容如下:
--[[
LuCI - SGI-Module for CGI
Description: Server Gateway Interface for CGI
]]--
exectime = os.clock()
module("luci.sgi.cgi", package.seeall)
local ltn12 = require("luci.ltn12")
require("nixio.util")
require("luci.http")
require("luci.sys")
require("luci.dispatcher")
-- Limited source to avoid endless blocking
local function limitsource(handle, limit)
limit = limit or 0
local BLOCKSIZE = ltn12.BLOCKSIZE
return function()
if limit < 1 then
handle:close()
return nil
else
local read = (limit > BLOCKSIZE) and BLOCKSIZE or limit
limit = limit - read
local chunk = handle:read(read)
if not chunk then handle:close() end
return chunk
end
end
end
function run()
local r = luci.http.Request(
luci.sys.getenv(),
limitsource(io.stdin, tonumber(luci.sys.getenv("CONTENT_LENGTH"))),
ltn12.sink.file(io.stderr)
)
local x = coroutine.create(luci.dispatcher.httpdispatch)
local hcache = ""
local active = true
while coroutine.status(x) ~= "dead" do
local res, id, data1, data2 = coroutine.resume(x, r)
if not res then
print("Status: 500 Internal Server Error")
print("Content-Type: text/plain\n")
print(id)
break;
end
if active then
if id == 1 then
io.write("Status: " .. tostring(data1) .. " " .. data2 .. "\r\n")
elseif id == 2 then
hcache = hcache .. data1 .. ": " .. data2 .. "\r\n"
elseif id == 3 then
io.write(hcache)
io.write("\r\n")
elseif id == 4 then
io.write(tostring(data1 or ""))
elseif id == 5 then
io.flush()
io.close()
active = false
elseif id == 6 then
data1:copyz(nixio.stdout, data2)
data1:close()
end
end
end
end
openwrt源:
1.转到OpenWrt根目录。
2.输入 ./scripts/feeds update
3.输入 ./scripts/feeds install -a -p luci
4.输入 make menuconfig
5.在”LuCI”菜单下你将找到所有的组件。
OpenWrt 安装包版本库:
1.添加一行文字到你的/etc/opkg.conf中,即将LuCI添加到版本库中:
src luci http://downloads.openwrt/kamikaze/8.09.2/YOUR_ARCHITECTURE/packages
2.输入 opkg update
3.LuCI 简版输入: opkg install luci-light
LuCI 普通版: opkg install luci
自定义模块的安装: opkg install luci-app-*
4.为了实现HTTPS支持,需要安装luci-ssl meta安装包
也许你想修改一下openWrt那个路由配置的丑陋界面,也许你想事项自己软件的一些功能。但是却没有办法去修改LuCI。在路由器上直接修改那就算了,我想说的是如何修改该LuCI的源代码,这样子你编译好的bin镜像文件直接刷入路由器中就ok了。你先得了解一下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下的那个压缩文件解压过去,扔在里面的文件就会丢失,小心!
http://blog.chinaunix.net/uid-27194309-id-3415873.html
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/煮酒与君饮/article/detail/1007426
推荐阅读
article
推荐开源
项目
:
Luci
-
app
-
ttnode
-
IoT
设备
管理利器...
推荐开源
项目
:
Luci
-
app
-
ttnode
-
IoT
设备
管理利器
项目
地址:https://gitcode.com/j...
赞
踩
article
luci
+
ricci
集群
管理
_
luci
ricci
...
luci
简介LuCI框架是一个嵌入式设备的Web框架 HA( 高可用,双机热备,对外只有一个主机,但是两个主机都活着 )...
赞
踩
article
【
OpenWrt
】(
Luci
)
OpenWrt
Web
GUI
开发
之
Luci
框架
粗解...
本博文全部内容都可以在 ???? GitHub ???? 上找到。本博文是 GitHub 上的 README 内容,故本...
赞
踩
article
探索未来科技:
Luci
-app-
chatgpt
-
web
,与
OpenAI
ChatGPT
的完美融合...
探索未来科技:
Luci
-app-
chatgpt
-
web
,与
OpenAI
ChatGPT
的完美融合项目地址:https:/...
赞
踩
article
openwrt
之
luci
界面
开发
------
问题解析
_
openwrt
luci
页面设计...
一个是对象的名字所具有的数据(见图二)在
openwrt
的
luci
界面
开发
中,用到的这个E()函数,其功能是在网页
界面
创建...
赞
踩
相关标签
集群
web框架
luci
ricci
linux运维
python
javascript
前端
开发语言