我用rpm来打包nodejs应用程序相当新。
要求是我们始终合并配置文件中可能包含的任何更改,而不会消除系统管理员可能已更改的任何设置。
正如您所猜测的,nodejs应用程序的配置文件位于json。
我已经在spec文件中调查了%config和%config(noreplace),而noreplace更适合,但是如果我们在新配置文件中添加了一些新内容,那么将这些更改添加到现有文件中文件,而不会消除系统管理员可能已做的任何更改。
我发现很少有工具/ shell脚本可以做到这一点,但我不确定是否有更多直接的方法或最佳实践可以实现这一目标?
答案 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