不久前我将 ubuntu 系统改造成了我的主路由器,但是它真的太臃肿了,不过我也通过折腾它学习了不少知识。因为我只需要 iptables dnsmasq 等基本功能就够了, 所以我需要一个足够轻量的路由器系统,OpenWrt 正是我想要的。OpenWrt 是适合于嵌入式设备的一个 Linux 发行版,它非常的小巧,所有功能都以 package 的形式运行, 并且提供 web 界面进行管理,小米、极路由等很多智能路由器都在用它。

那么直接使用 OpenWrt 系统会是更好的选择,因为我需要在路由器上跑一些“特殊”功能,所以我只需要将它做成 OpenWrt 的插件直接在 web 界面管理就行了。

预置条件#

我默认你已经写好了自己的“插件”,它可能是一个 shell 脚本,也可能是 c golang 或者别的编程语言写好的程序,它已经实现了你需要的功能, 你目前只是需要将它打包为 OpenWrt 的一个插件。当然你可以写一个简单的重启功能脚本来做练习。我自己的程序名称叫 bargo 下面就用它来举例。

Web 管理界面开发#

我们的插件一般都需要做一些动态的配置,OpenWrt 很好的支持了这一切。OpenWrt 的 web 界面也是传统的 MVC 结构,主要用 lua 脚本来编写, 我们只需要按照它的文档规则“填空”就能做出一个简单的配置页面。web 管理里面的主要代码在系统的 /usr/lib/lua/luci 目录,里面就能看到 MVC 目录。

先创建控制器文件 /usr/lib/lua/luci/controller/bargo.lua

1 2 3 4 5 6 7 8 91011# module 名称module("luci.controller.bargo", package.seeall)function index() # 4 个参数介绍 # 1.后台访问路径 admin/services/bargo # 2.target 动作(call, template, cbi)call 是调用自定义函数,template 调用 html 模板,cbi 调用 openwrt 的公共表单页面 # 3.菜单名称 # 4.排序 entry({"admin", "services", "bargo"}, cbi("bargo"), _("Bargo Client"), 1)end

现在就可以在 web 后台能看到这个菜单并进入了。

下面我们来创建插件的配置文件 /etc/config/bargo

123config serveroption username 'option password '

我的插件只需要两个配置信息,用户名和密码。现在我们需要创建表单页面来管理它。上面我们在控制器里写了 cbi(“bargo”) 的调用,我现在只需要 创建一个 cbi 文件,控制器就能根据 cbi 文件自动的用我们的配置信息来生成 web 管理页面。

创建 cbi 文件 /usr/lib/lua/luci/model/cbi/bargo.lua

1 2 3 4 5 6 7 8 910111213141516171819202322232425require("luci.sys")# 页面标题和描述m = Map("bargo", translate("Bargo Client"), translate("Configure Bargo client, Powered By Sinchie."))# 读取配置文件s = m:section(TypedSection, "server", "")s.addremove = falses.anonymous = true# 是否启用的选择框enable = s:option(Flag, "enable", translate("Enable"))# 映射我们的配置到输入框username = s:option(Value, "username", translate("Username"))pass = s:option(Value, "password", translate("Password"))pass.password = true# 如果点击了保存按钮local apply = luci.http.formvalue("cbi.apply")if apply then # 这里是调用我们自己的程序脚本,后面会讲怎么来写这个脚本 io.popen("/etc/init.d/bargo restart > /dev/null &")endreturn m

这样我们的 web 管理页面就写完了,是不是超级简单,就像是“填空”一样,


比丘资源网 » OpenWrt 插件开发

发表回复

提供最优质的资源集合

立即查看 了解详情