创建openwrt固件个人专用ipk包(1)Makefile篇

个人专用openwrt固件的打造。

经常编译lean固件的朋友肯定发现,lean修改版本号都是在default-settings里面修改的,这个文件夹在/lede/package/lean里。这个应用主要对路由器固件进行默认设置的,运行原理是将files里的zzz-default-settings文件放入/etc/uci-defaults里面进行执行。uci-defaults这个文件夹比较特殊,在该目录中的所有脚本都自动执行,如果这些脚本以exit 0 退出,它们将在执行完毕后被删除,也就是说这些脚本只运行一次就没了。详细介绍见官方文档

我们编译固件时可以根据default-settings仿写一个应用ipk,进行初始化操作,写入自己的配置文件,打造出自己专用的路由器固件。可以直接在default-settings里面改写,但是lean更新比较频繁,每次这个文件改变后,git pull 就会提示文件被修改,需要删除才可以继续更新。所以有必要重新改写个自己的默认配置应用,将拨号账号、网络配置、各种应用软件的配置文件等等自动配置好,路由器刷入固件后就可以直接工作,免去一番设置工作。既可以放入lean的源码里,编译官方固件也可以用,比较灵活。最后编译出个人专用的路由器固件。这次仿写主要针对官方openwrt源码。

创建openwrt固件个人专用ipk包(1)Makefile篇

把default-settings文件夹复制出来并改名my-settings,把files文件夹里的zzz-default-settings,改名为my-default-settings 。哪个中文汉化包po文件夹可以删除,没什么用。这些的文件最好在linux里面编辑,windows平台也可以用notepad 2、notepad– 等软件编辑。Windows自行创建文件要注意用unix文件格式及utf8编码。

本篇先改写Makefile文件

1、第一段定义本应用软件ipk名称、版本等。PKG_NAME:=default-settings 改为 PKG_NAME:=my-settings ,下面的任意。

2、定义包名改为 define Package/my-settings 。然后修改DEPENDS依赖这块,可以根据你的需要将所需的一些luci应用都写入里面,如你的固件必须含有科学上网,可以后面在写入 +luci-app-ssr-plus+表示选中my-settings,也就要选中luci-app-ssr-plus。如果没有+号,表示除非你选中luci-app-ssr-plus,才可以选择 my-settings 。

注意Openwrt官方新版的Luci中文包是LUCI_LANG_zh_Hans,加入这个就会luci自动选上中文语言。@LUCI_LANG_zh_Hans表示在make menuconfig 配置界面中必须存在LUCI_LANG_zh_Hans中文选项才可以选中本应用my-settings,否则就看不到my-settings这个选项。+@LUCI_LANG_zh_Hans就是说必须存在中文,且选上my-settings也要选上中文,也就是说luci的界面语言必须是中文且无法修改。修改后的代码就是:

define Package/my-settings
  SECTION:=luci
  CATEGORY:=LuCI
  TITLE:=LuCI support for My X86 Default Settings
  PKGARCH:=all
  DEPENDS:=+luci-base +luci +@LUCI_LANG_zh_Hans +luci-app-ssr-plus +luci-compat
endef

3、define Package/default-settings/description 改为define Package/my-settings/description

4、定义包的位置这项define Package/default-settings/install,改为 define Package/my-settings/install 。这块主要就是把脚本文件写入到uci-defaults文件夹里。脚本文件my-default-setting对于一些简单修改可以用uci等命令在脚本里执行,对于配置内容很多的文件用命令改写设置很麻烦。如dhcp配置文件,我自定义了很多设备名称及ip地址,一条条用命令加入太麻烦,就可以直接将配置好的能正常运行的dhcp配置文件拷贝进固件里,替换Dnsmasq源码编译生成的默认配置文件。 我完成的是这样 :

define Package/my-settings/install
	$(INSTALL_DIR) $(1)/etc/uci-defaults
	$(INSTALL_BIN) ./files/my-default-settings $(1)/etc/uci-defaults/99-my-settings
	
	$(INSTALL_DIR) $(1)/usr/share/linshi
	$(INSTALL_CONF) ./files/dhcp $(1)/usr/share/linshi/
	$(INSTALL_CONF) ./files/shadowsocksr $(1)/usr/share/linshi/
	$(INSTALL_CONF) ./files/nft-qos $(1)/usr/share/linshi/

endef

这里的意思是说,把files文件夹里的my-default-settings 文件写入到/etc/uci-defaults文件夹里,并重命名为99-my-settings,99为优先级别。在/usr/share/里建立linshi文件夹,将files文件夹的dhcp、shadowsocksr、nft-qos配置文件都放入到/usr/share/linshi/里面。这些配置文件是以前在openwrt固件/etc/config/里面配置好的,可以正常运行的配置文件。之所以这些配置文件不直接放入到/etc/config文件夹里,比如dhcp配置文件,是因为Dnsmasq也在/etc/config/里生成了dhcp文件,本Makefile文件也要生成dhcp文件,会起冲突导致编译失败,我们先把配置文件临时放到/usr/share/linshi/里面,再由my-default-settings脚本文件执行拷贝动作到/etc/config/

$(1) 变量表示运行的路由器上的根目录。$(INSTALL_DIR)表示创建文件夹。

然后用Winscp等软件把你路由器里面现有的/etc/config/文件夹里的dhcp、shadowsocksr等配置文件放入到my-settings文件夹里的files文件夹里。

5、最后使用eval函数实现my-settings的各种定义。改为

$(eval $(call BuildPackage,my-settings))

6、到这里,Makefile文件就设置好了,完整的Makefile文件:

#
# Copyright (C) 2016-2017 GitHub 
#
# This is free software, licensed under the GNU General Public License v3.
# See /LICENSE for more information.

include $(TOPDIR)/rules.mk

PKG_NAME:=my-settings
PKG_VERSION:=2
PKG_RELEASE:=35
PKG_LICENSE:=GPLv3
PKG_LICENSE_FILES:=LICENSE

include $(INCLUDE_DIR)/package.mk

define Package/my-settings
  SECTION:=luci
  CATEGORY:=LuCI
  TITLE:=LuCI support for My X86 Default Settings
  PKGARCH:=all
  DEPENDS:=+luci-base +luci +@LUCI_LANG_zh_Hans +luci-app-ssr-plus +luci-compat
endef

define Package/my-settings/description
	Language Support Packages.
endef

define Build/Compile
endef

define Package/my-settings/install
	$(INSTALL_DIR) $(1)/etc/uci-defaults
	$(INSTALL_BIN) ./files/my-default-settings $(1)/etc/uci-defaults/99-my-settings
	
	$(INSTALL_DIR) $(1)/usr/share/linshi
	$(INSTALL_CONF) ./files/dhcp $(1)/usr/share/linshi/
	$(INSTALL_CONF) ./files/shadowsocksr $(1)/usr/share/linshi/
	$(INSTALL_CONF) ./files/nft-qos $(1)/usr/share/linshi/

endef

$(eval $(call BuildPackage,my-settings))

my-default-settings 脚本文件见下一篇。

技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/net/560.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

评论列表(2条)

  • 言西
    言西 2023年2月10日 21:10

    感谢分享,今晚就编译一个试试。
    另外,现在新版用的 fw4 防火墙,没有自定义规则了,放进 /etc/firewall.user 也不自动运行,大佬有这方面需求嘛?