%config(noreplace) 是否足以指示 RPM 在升级时不要触及配置文件?

Is %config(noreplace) enough to instruct an RPM not to touch a config file in an upgrade?

在我的 RedHat 7.4 上,我正在使用 CMake 创建一个 RPM,我想给 RPM 的指令之一是 - 单独保留某个配置文件,以防操作是升级。

我认为我可以在 CMakeLists.txt 中使用 (mcve):

完成此操作
cmake_minimum_required(VERSION 3.4.0 FATAL_ERROR)                                                                                                                                                                  
project(MyKibana)

set(kibana_version 6.2.2)
set(kibana_dir /usr/share/mykibana)

list(APPEND CPACK_RPM_USER_FILELIST                                                                                                                                                
  "%config(noreplace) ${kibana_dir}/config/kibana.yml"
  )

但是,当我执行 sudo yum upgrade /tmp/my-kibana-6.2.2-577-g7cca696.el7.my.x86_64.rpm -y 时,我看到 /usr/share/mykibana/config/kibana.yml 处的文件被 RPM 中的文件覆盖

除了%config(noreplace)指令,我还需要做些什么吗?

rpm 配置文件的行为理解起来相当复杂。

%config(noreplace) 不会替换您的配置文件如果您更改了它。如果您没有修改配置文件,它将总是被新的配置文件覆盖。

为了更透彻的了解;看到这个优秀的页面:http://people.ds.cam.ac.uk/jw35/docs/rpm_config.html