[TOC]
前言
前面我们写了一个简单的hello world页面,那是基于现有目录直接增加文件的方式,但那种方式不方便管理,比如你想卸载那个hello world怎么办呢?只能自己找到那些文件进行删除。OpenWrt系统支持插件的方式管理ipk文件,ipk文件就是一个软件包,类似于安卓的apk、linux的rpm等,可以通过命令进行安装、卸载和查看。
OpenWrt包管理
Opkg 是一个轻量快速的套件管理系统,已成为 Opensource 界嵌入式系统标准。常用于路由、交换机等嵌入式设备中,用来管理软件包的安装升级与下载。 GNU/Linux 用户可能会对 apt-get,aptitude,pacman,yum 等比较熟悉,也会看出其相似之处,opkg 工具 (一个 ipkg 变种) 是一个用来从本地软件仓库或互联网软件仓库上下载并安装 OpenWrt 软件包的轻量型软件包管理器。
opkg基本命令
opkg update 更新可以获取的软件包列表 opkg upgrade 对已经安装的软件包升级 opkg list 获取软件列表 opkg install 安装指定的软件包 opkg remove 卸载已经安装的指定的软件包
luci app package组织结构
在OpenWrt系统中,所有软件都是通过package管理,可以基于单个package进行编译,最终生成ipk文件,ipk文件可以直接上传到OpenWrt系统通过opkg进行安装。
luci框架本身就是一个package,luci app是luci package的一个子集,新建的package需要按照luci package指定目录存放文件。
系统自带的luci app在feeds/luci/applications目录,可以参考
一个luci package需要包含一个主Makefile,用于定义luci app的名称和编译规则,只有定义了Makefile openwrt编译时才知道你增加的app需要编译。除了Makefile还需要增加指定的目录和文件,注意app根目录名称是固定的 根目录列表:
名称 | 说明 |
---|---|
luasrc | 用于存放页面文件(必需) |
po | 国际化语言包(可选) |
root | 其他系统文件,一般放默认配置脚本(可选) |
htdocs | web静态文件,如js、css等(可选) |
下面我们看看uhttpd web服务器的luci app源码目录
创建一个luci app
我们将hello world 源码打包成一个package 首先新建一个package目录,命名为luci-app-helloworld,注意luci app的package名称必需以luci-app-作为前缀,格式为luci-app-xxx
然后在luci-app-helloworld中增加主Makefile,内容如下
include $(TOPDIR)/rules.mk
LUCI_TITLE:=helloworld luci app
LUCI_PKGARCH:=all
LUCI_DEPENDS:=
PKG_NAME:=luci-app-hello_world
PKG_VERSION:=1.0
PKG_RELEASE:=1
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature
Makefile格式说明: Makefile模板都是统一的,在新增一个luci app时,我们只需要稍微修改即可使用。
字段 | 必需 | 说明 |
---|---|---|
LUCI_TITLE | 是 | app的名称,比如helloworld |
LUCI_DEPENDS | 否 | 依赖包名称,一般luci app都依赖核心模块用于实现某个功能,增加依赖后,只要勾选了luci app编译,依赖的模块会自动编译 |
PKG_NAME | 是 | 模块名称,必需保持唯一,要防止和别的名称冲突 |
PKG_VERSION | 否 | 版本号 |
PKG_RELEASE | 否 | 发布版本 |
注意Makefile中的最后一行不能去掉,否则make menuconfig 看不到选项
# call BuildPackage - OpenWrt buildroot signature
Makefile定义了一个luci app,我们还需要将源码放到指定目录,由于helloworld app比较简单,只涉及到lua文件,只需要将源码拷贝到luasrc目录即可
目录结构如下:
现在一个luci app源码包就准备好了,为了方便管理我们在openwrt package目录创建test目录,然后将luci-app-helloworld包拷贝到test目录
make menuconfig
在编译之前,还需要开启hello world插件编译 在openwrt源码目录执行命令
make menuconfig
进入菜单选择
LuCI-->Applications-->luci-app-hello_world
按空格选择后保存退出
开始编译
执行以下命令编译app
make package/luci-app-hello_world/compile V=s
编译完成后会生成ipk安装包,位于bin的子目录,由于与平台有关,如果你选择的是x86平台,就在x86子目录中,这里我们直接通过查找的方式找到ipk文件 查找命令
find bin/ -name "*hello_world*"
这里我采用的是mips平台,搜索结果如下
root@ubuntu:/openwrt# find bin/ -name "*hello_world*"
bin/packages/mipsel_24kc/base/luci-app-hello_world_1.0-1_all.ipk
root@ubuntu:/openwrt#
luci-app-hello_world_1.0-1_all.ipk就是我们编译生成的包
安装
ssh登录openwrt系统后台
通过winscp工具将luci-app-hello_world_1.0-1_all.ipk上传到openwrt系统/tmp目录
安装 安装通过opkg命令,直接执行
opkg install /tmp/luci-app-hello_world_1.0-1_all.ipk
即可完成安装
注意: 在安装之前需要删除上次我们手动拷贝的hello world相关文件
root@OpenWrt:~#
root@OpenWrt:~# rm /usr/lib/lua/luci/controller/helloworld.lua
root@OpenWrt:~#
root@OpenWrt:~# rm /usr/lib/lua/luci/view/helloworld.htm
root@OpenWrt:~#
root@OpenWrt:~# cd /tmp
root@OpenWrt:/tmp# opkg install luci-app-hello_world_1.0-1_all.ipk
Installing luci-app-hello_world (1.0-1) to root...
Configuring luci-app-hello_world.
root@OpenWrt:/tmp#
root@OpenWrt:/tmp#
安装完成后我们可以进入openwrt管理页面看到hello world菜单,在系统-->软件包的界面可以以看到hello world app
卸载
首先我们查看app包名称
root@OpenWrt:/tmp#
root@OpenWrt:/tmp# opkg list |grep hello
luci-app-hello_world - 1.0-1
root@OpenWrt:/tmp#
可以看到名称为luci-app-hello_world 执行
opkg remove luci-app-hello_world
即可卸载完成 操作过程:
root@OpenWrt:/tmp#
root@OpenWrt:/tmp# opkg list |grep hello
luci-app-hello_world - 1.0-1
root@OpenWrt:/tmp#
root@OpenWrt:/tmp# opkg remove luci-app-hello_world
Removing package luci-app-hello_world from root...
root@OpenWrt:/tmp#
root@OpenWrt:/tmp#
root@OpenWrt:/tmp# opkg list |grep hello
root@OpenWrt:/tmp#
本文链接:https://www.kinber.cn/post/3292.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝: