花生壳phtunnel嵌入Openwrthtml
详细介绍如何将phtunnel封装成一个openwrt标准组件,并编译到本身的openwrt固件中。git
phtunnel组件制做下载github
下载本身的编译平台的二进制phtunnel文件是第一步要作的,咱们能够到oray的官方github网站进行下载,根据本身的型号进行下载,好比个人路由器是基于MIPSel,c库使用的是uclibc,那么我能够进入xxxxx,进入xxxxxxxx,并下载mipsel-uclibc-phtunnel文件。web
规划目录结构接网络
下来的任务是规划本身的phtunnel组件安装后,在openwrt系统上是怎样的目录结构。架构
首先核心的应用程序phtunnel咱们能够放在/usr/bin目录下,由于它是一个非管理员应用,因此通常比放在/usr/sbin目录下要更科学一些。app
uci配置文件:因为openwrt的uci是经常使用的配置解决方案(不理解uci可参阅其余文档),因此须要一个uci配置文件,该文件一般放在/etc/config目录下,同时咱们取名一样为phtunnel,这样就可使用uci set phtunnel.xx.xx等操做phtunnel的配置了。函数
根据phtunnel列出的参数,uci的配置以下:网站
启动脚本:一般应用都是做为守护脚本运行,因此phtunnel也会制做成守护程序,自动运行,因此须要在/etc/init.d中创建phtunnel的启动脚本,名称也叫phtunnel。lua
hotplug.d机制:为了及时响应网络状态,快速重启phtunnel,可以使用hotplug机制。这样在wan口断开从新连上网的时候,能立刻重启phtunnel。在/etc/hotplug.d/iface下须要建立一个xx-phtunnel的脚本,其中xx表明脚本执行顺序,能够随便填。
这样,安装后的目录结构是以下图
编写phtunnel组件Makefile
根据目录结构规划,如今来编写组件,因为openwrt的组件是用makefile文件编写。
将makefile及规划的files目录统一放在phtunnel目录内,而后放在openwrt的package/utils目录中便可(可放在package下的任何位置),再来看一下目录结构
这时执行make menuconfig后,就能看到phtunnel组件了
选中该组件后保存,执行make,就能够编译出带phtunnel的固件了和对应的phtunnel的ipk组件包了。
启动脚本
用于启动与中止phtunnel,启动后读取uci配置,变成phtunnel的启动参数,而后启动phtunnel程序,代码以下:
这里用到了openwrt的PROCD机制,这样能够在phtunnel意外崩溃的状况下,自动重启。
hotplug脚本
用于在wan接口链接有效时,从新开启phtunnel,加速重连速度。
phtunnel-luci-app组件制做功能
phtunnel运行后,须要进行扫码登陆,管理,解绑等操做,这些都是须要与客户的交互操做,openwrt提供的luci是实现交互的最佳选择,也是最正式的方式,下面来制做基于luci的phtunnel组件。
核心模块
luci的代码区域在/usr/lib/lua/luci中,因此全部交互的web代码都放在这个下面,首先是核心的基础库phtunnel.lua,它将提供全部核心函数,如获取二维码,登陆信息和解绑操等核心功能。
全部函数的核心都是调用wget来访问rpc服务和官方提供的web服务。
LUCI页面
完成核心函数库后,接下来就是根据luci的架构进行开发。首先是规划菜单与菜单项,如图:
完成这样的菜单,须要在controller目录下实现,如图:
其中setup页面用于设置基本参数,Status页面用于扫码与解绑,Log用于显示日志。
Setup页面
设置页面是一个纯UCI页面,咱们可使用luci提供的cbi模块开发。
显现的页面如图
Status页面
该页面用于显示二维码,管理界面连接及解绑。相关代码在view/oray/phtunnel_status.htm, view/oray/phtunnel_inner_status.htm, view/oray/phtunnel_log_off.htm,
phtunnel_status.htm : 用于显示当前状态。
phtunnel_inner_status.html : 用于后台实时检测绑定状态,当用户使用手机刷二维码绑定后,phtunnel_status.htm页面动态显示绑定账号。
phtunnel_log_off : 用于解绑账号
Log页面
用于显示日志,该页面相对简单(view/oray/phtunnel_log.htm),
经过uci获取日志路径,并使用cat命令将文件内容输出便可。
制做组件的makefile
与制做phtunnel组件同样,将全部文件组织成目录树,并加入Makefile
Makefile
最后一样将组件复制到openwrt/package/utils/下,这样咱们能够在配置界面中看到phtunnel-luci-app组件
选择以上两个组件,充分编译后,便可在本地的luci界面上使用phtunnel了。