OpenWrt重装ipk后如何保持配置

How to keep config after reinstall ipk on 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

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

当您在没有 -n 标志的情况下执行 sysupgrade 时,/etc/config/ 文件夹中的配置会自动保留。因此,如果您 re-flash 具有新生成图像的设备,您的配置将不会丢失。

但是,如果您想使用 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

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

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

例如:openwisp-config Makefile