如何处理nodejs应用程序的rpm配置更改

时间:2015-04-02 18:01:43

标签: node.js shell centos rpm rpmbuild

我用rpm来打包nodejs应用程序相当新。

要求是我们始终合并配置文件中可能包含的任何更改,而不会消除系统管理员可能已更改的任何设置。

正如您所猜测的,nodejs应用程序的配置文件位于json。

我已经在spec文件中调查了%config和%config(noreplace),而noreplace更适合,但是如果我们在新配置文件中添加了一些新内容,那么将这些更改添加到现有文件中文件,而不会消除系统管理员可能已做的任何更改。

我发现很少有工具/ shell脚本可以做到这一点,但我不确定是否有更多直接的方法或最佳实践可以实现这一目标?

1 个答案:

答案 0 :(得分:0)

您需要的是一种检测规范.rpmsave部分中%post个文件的方法。它可能看起来像这样:

%post
# Check this during an update to the RPM $1 = 2
if [ "$1" = "2" ]
then
  ########################################################################
  # apply updates to config files, preserving any customizations
  #   1) restore original (customized) file if renamed to file.rpmsave
  #   2) run all config files through config_updates.pl
  ########################################################################
  #
  # RPM query will get config files from old and new rpm, so there will be dups
  # 
  IFS=$'\n'
  # Eliminate dups by passing query through sort -u %name is RPM name
  config_files=(`rpm -qc %name | sort -u`)
  unset IFS
  for AF in "${config_files[@]}"
  do
    # Search for config files with .rpmsave extension
    [ -f "$RF.rpmsave" ] && {
      # Save the new $RF file (cp -vf $RF $RF.new)
      # Copy the original rpm config file renamed during
      # the update with.rpmsave extension
      # back to $RF (cp -vf $RF.rpmsave $RF)
      # Launch another script to merge $RF.new into $RF.
      %dir_to_config_script/config_updates.pl -file=$RF
    }
  done
fi