LuCI - 網頁用戶配置界面開發

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章