目录结构
如果确定市面上的软件无法满足需求,需要自己开发的话,也很简单。在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 <sinkcup@163.com> 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/
拼成完整的下载链接就是:
- http://dl.openwrt.io/sources/wifidog-gateway-1.2.1.tar.gz
- https://github.com/wifidog/wifidog-gateway/releases/download/1.2.1/wifidog-gateway-1.2.1.tar.gz
下载之后,解压缩,会发现子目录是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,
- 业务代码在:https://coding.net/u/openwrtio/p/owmp/git/tree/0.4.0/,只有一个shell文件和一个
Makefile
。 - package在:https://coding.net/u/openwrtio/p/packages/git/tree/for-12.09/admin/owmp
发布
开发完毕,编译打包生成ipk,发布到opkg软件仓库里即可。请按照之前的文档《搭建opkg软件仓库》进行操作。
参考:https://openwrt.io/docs/create-package/

获取更多建站运营运维新知!互联网创业、前沿技术......
最新评论
水淀粉vdfv
有其他下载方式么,网站上的点击下载后没有任何反应,或者直接发给我一下?83835079@qq.com
你好,我的型号ELECOM WRC-X3200GST3,ARMv8 Processor rev 4构架,CPU mediatek/mt7622,找了很久没有找到
我的也是这样。一直无法确认ARCH架构,或是不支持。一直没办法用。不知道怎么办了
您好,现在安装上了,可是ssr plus+配置好节点也没用,一直都是未运行,节点是有效的; 另外那个passwall2一找开就提示"无法确认ARCH架构,或是不支持", 麻烦大佬帮忙看下是什么问题,谢谢!