如何在OpenWrt

时间:2015-12-29 14:11:08

标签: openwrt

在makefile中,我使用INSTALL_DATA将配置文件复制到/etc/config。并且在运行期间将更改配置文件。

我发现,重新安装应用程序后,配置文件将恢复到ipk中打包的默认值。

我想知道重新安装后如何保留配置文件。有人可以帮帮我吗?

生成文件:

define Package/zm_control/install
    $(INSTALL_DIR) $(1)/etc/config
    $(INSTALL_DATA) ./config/$(PKG_NAME).json $(1)/etc/config/$(PKG_NAME).json
endef

2 个答案:

答案 0 :(得分:1)

您的Package/zm_control/install目标在程序包构建过程中执行,即在主机上执行,而不是在OpenWrt设备上执行。它将配置文件复制到将嵌入到固件映像文件和.ipk文件中的登台目录。

执行/etc/config/时没有sysupgrade标志的-n文件夹中的配置会自动保留。因此,如果您使用新生成的图像重新刷新设备,则配置不会丢失。

但是,如果要使用opkg install命令安装新版本的软件包,则需要在Makefile中定义自定义preinstpostinst目标。像这样:

define Package/$(PKG_NAME)/preinst
#!/bin/sh
# check if we are on real system
if [ -z "$${IPKG_INSTROOT}" ]; then
        #Backup config file
        cp /etc/config/$(PKG_NAME).json /tmp/$(PKG_NAME).json.bak
fi
exit 0
endef

define Package/$(PKG_NAME)/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
        #Restore config file
        mv /tmp/$(PKG_NAME).json.bak /etc/config/$(PKG_NAME).json
fi
exit 0
endef

答案 1 :(得分:0)

据我所知,这是一个更简单的解决方案,只需将您的包使用的配置文件添加到" conffiles" Makefile中的部分:

define Package/zm_control/conffiles
/etc/config/config_file1
/etc/config/config_file2
# ecc...
endef

例如:openwisp-config Makefile