11
2022
12
01:28:53

OpenWrt Luci web开发-Luci ipk编译安装

[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目录,可以参考

image-20210826172929086


一个luci package需要包含一个主Makefile,用于定义luci app的名称和编译规则,只有定义了Makefile openwrt编译时才知道你增加的app需要编译。除了Makefile还需要增加指定的目录和文件,注意app根目录名称是固定的 根目录列表:

名称说明
luasrc用于存放页面文件(必需)
po国际化语言包(可选)
root其他系统文件,一般放默认配置脚本(可选)
htdocsweb静态文件,如js、css等(可选)

下面我们看看uhttpd web服务器的luci app源码目录


image-20210826174208699


创建一个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_TITLEapp的名称,比如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目录即可

目录结构如下:


image-20210826194051150


现在一个luci app源码包就准备好了,为了方便管理我们在openwrt package目录创建test目录,然后将luci-app-helloworld包拷贝到test目录


image-20210826194353204


make menuconfig

在编译之前,还需要开启hello world插件编译 在openwrt源码目录执行命令

make menuconfig

进入菜单选择

LuCI-->Applications-->luci-app-hello_world


image-20210826201520399


按空格选择后保存退出

开始编译

执行以下命令编译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就是我们编译生成的包

安装

  1. ssh登录openwrt系统后台

  2. 通过winscp工具将luci-app-hello_world_1.0-1_all.ipk上传到openwrt系统/tmp目录

  3. 安装 安装通过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


image-20210826203946564


卸载

首先我们查看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#




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/3292.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: