欢迎光临
我们一直在努力

OpenWrt package软件包开发说明

目录结构

如果确定市面上的软件无法满足需求,需要自己开发的话,也很简单。在package目录中有很多软件,看一看,会发现包格式如下:

文件 是否必须 用途
package/Makefile 定义了软件名称、版本、编译、安装等指令
package/files/ 启动脚本、配置文件等
package/patches/ 代码的补丁

以wifidog为例(package在https://coding.net/u/openwrtio/p/packages/git/tree/for-12.09/net/wifidog),Makefile内容如下:

include $(TOPDIR)/rules.mk

PKG_NAME:=wifidog
PKG_VERSION:=1.2.1
PKG_RELEASE=2

PKG_LICENSE:=GPL-2.0
PKG_MAINTAINER:=sinkcup <[email protected]>

PKG_SOURCE_VERSION=$(PKG_VERSION)
PKG_SOURCE:=$(PKG_NAME)-gateway-$(PKG_SOURCE_VERSION).tar.gz
PKG_SOURCE_URL:=http://dl.openwrt.io/sources/ \
https://github.com/wifidog/wifidog-gateway/releases/download/$(PKG_SOURCE_VERSION)/
PKG_MD5SUM:=3c9c35968f154b1c9224245a5d708d5f
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-gateway-$(PKG_SOURCE_VERSION)

PKG_FIXUP:=autoreconf
PKG_INSTALL:=0

include $(INCLUDE_DIR)/package.mk

define Package/wifidog
SUBMENU:=Captive Portals
SECTION:=net
CATEGORY:=Network
DEPENDS:=+iptables-mod-extra +iptables-mod-ipopt +kmod-ipt-nat +iptables-mod-nat-extra +libpthread
TITLE:=A wireless captive portal solution
URL:=http://www.wifidog.org
endef

define Package/wifidog/description
The Wifidog project is a complete and embeddable captive
portal solution for wireless community groups or individuals
who wish to open a free Hotspot while still preventing abuse
of their Internet connection.
endef

define Package/wifidog/conffiles
/etc/wifidog.conf
endef

define Package/wifidog/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/init.d/wifidog $(1)/usr/bin/wifidog-init
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/wifidog $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/wdctl $(1)/usr/bin/
$(INSTALL_DIR) $(1)/usr/lib
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libhttpd.so* $(1)/usr/lib/
$(INSTALL_DIR) $(1)/etc
$(INSTALL_DATA) $(PKG_BUILD_DIR)/wifidog.conf $(1)/etc/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/wifidog-msg.html $(1)/etc/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/wifidog.init $(1)/etc/init.d/wifidog
endef

$(eval $(call BuildPackage,wifidog))

软件包变量

<table”>

变量名是否必须用途PKG_VERSION是包版本,一般与代码版本一致,建议使用语义化版本号PKG_RELEASE是第几次打包。比如版本没变,第一次打包,PKG_RELEASE为1,发布了wifidog_1.2.1-1_ralink.ipk,然后发现配置文件不佳,进行第二次打包,PKG_RELEASE需改为2,会生成wifidog_1.2.1-2_ralink.ipk。PKG_SOURCE_VERSION否代码版本,比如使用git的tag,建议使用语义化版本号。无压缩包,而从git clone时,使用commit id。PKG_SOURCE是代码文件名,下载完毕会保存到dl目录。PKG_SOURCE_URL是代码下载链接的目录(下载时会自动加上PKG_SOURCE文件名),支持多个镜像,每行一个PKG_BUILD_DIR是编译软件包的目录

可以看到wifidog的代码文件名是wifidog-gateway-1.2.1.tar.gz,下载路径有2个:

  • http://dl.openwrt.io/sources/
  • https://github.com/wifidog/wifidog-gateway/releases/download/1.2.1/

拼成完整的下载链接就是:

下载之后,解压缩,会发现子目录是wifidog-gateway-1.2.1,如图:

archive-wifidog-gateway-1.2.1

所以PKG_BUILD_DIR要设置正确,才能顺利编译。

宏定义

Package/$(PKG_NAME)

变量名 是否必须 用途
CATEGORY 一级分类
SUBMENU 二级分类
DEPENDS 依赖。加号“+”表示自动选中此依赖,比较常用。
TITLE 简介

Package/$(PKG_NAME)/conffiles (可选)

配置文件列表。安装时,如果配置文件已存在,则不会被覆盖。卸载时,如果配置文件被修改过,则不会被删除。

Package/$(PKG_NAME)/install (可选)

安装指令。比如拷贝一些文件。常用的有:INSTALL_DIR、INSTALL_BIN、INSTALL_DATA、CP。

业务代码

可以看到package里面只是打包ipk所用的启动脚本、配置文件等,没有业务代码。业务代码在网上,通过PKG_SOURCE_URL指定下载链接,编译时自动下载。因为代码是单独的项目,比如dnsmasq、wifidog,是C、C++、shell等语言开发的,一般都是跨平台的,电脑、手机、路由器都能用,有独立的项目网址,所以不会放在package里。

所以想实现一个需求,首先要做的是开发业务代码。比如wifidog的业务代码在:https://github.com/wifidog/wifidog-gateway,是开源项目,大家一起写代码,合并进去即可。

如果已有的项目不能满足需求,那就需要自行开发新项目。比如owmp,

发布

开发完毕,编译打包生成ipk,发布到opkg软件仓库里即可。请按照之前的文档《搭建opkg软件仓库》进行操作。

参考:https://openwrt.io/docs/create-package/

窗外天空
关注公众号『窗外天空』

获取更多建站运营运维新知!
互联网创业、前沿技术......

赞(0) 打赏
文章名称:《OpenWrt package软件包开发说明》
文章链接:https://www.nixonli.com/24197.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏