在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
答案 0 :(得分:1)
您的Package/zm_control/install
目标在程序包构建过程中执行,即在主机上执行,而不是在OpenWrt设备上执行。它将配置文件复制到将嵌入到固件映像文件和.ipk
文件中的登台目录。
执行/etc/config/
时没有sysupgrade
标志的-n
文件夹中的配置会自动保留。因此,如果您使用新生成的图像重新刷新设备,则配置不会丢失。
但是,如果要使用opkg install
命令安装新版本的软件包,则需要在Makefile中定义自定义preinst
和postinst
目标。像这样:
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