使用opkg安装软件时,常常需要对候软件包进行初始化或者自定义化操作,这种开发需求一般写给shell脚本就可以对付了。 现在的问题是当这些脚本多了之后,原作者也不愿意修改安装包,我们怎么分发这些自定义的脚本,能不能把自定义的这些脚本编译到opkg包里?

位置

把本地的shell脚本放在openwert 仓库的这个目录,编译openwrt的时候就会被打包到对应opkg二进制文件中:

1
2
/barrier_breaker/package/package-abc    # package makefile文件所在
package-abc/files                      # shell脚本放置目录

步骤

  1. 修改Makefile

package目录下任意找一个package目录,比如chinadns, 然后修改Makefile文件。 在install语句后添加 :

1
$(INSTALL_BIN) ./files/your_script.sh $(1)/etc/config/your_script.sh
  1. 放置脚本 将脚本your_script.sh放置在files目录下;

  2. 选择opkg 在make menuconfig 图像界面中选择修改过的包(chinadns)

package 和注入文件相关的部分makefile代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
##
    include $(TOPDIR)/rules.mk  
     PKG_NAME:=xxx
    PKG_RELEASE:=1  
    PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
    PKG_SOURCE_URL:=https://github.com/xxx/releases/download/v$(PKG_VERSION)
    PKG_MD5SUM:=f772a750580243cfxcsfd2xc39d7b9171b1
    PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)  
    include $(INCLUDE_DIR)/package.mk  
##  

    define Package/xxx 
        SECTION:=net  
        CATEGORY:=Network  
        TITLE:=xxx 
    endef  
###   

    define Package/xxx/description
        button haha upgrade.
    endef
###   
    
    #define Package/xxx/conffiles
    #/etc/config/system
    #/etc/hotplug.d/button/00-button
    #endef
###        

    define Package/wps_button/install
        #$(INSTALL_DIR) $(1)/etc/init.d
        $(INSTALL_BIN) ./files/xxx $(1)/etc/config/xxx
        #$(INSTALL_DATA) ./files/system.conf $(1)/etc/config/system
    endef
###  

    $(eval $(call BuildPackage,xxx))

##