【发布时间】:2013-09-15 15:08:01
【问题描述】:
我正在使用 rpmbuild 创建自己的 RPM。
我的 RPM包含配置文件,即使 RPM 包含这些配置文件的新版本,也不应被覆盖。
为了存档,我用
标记了这些%config(noreplace) /opt/mypackage/etc/*
在规范文件中。
根据文档和this site,在这种情况下,本地修改的文件永远不会被覆盖,这正是我想要的。
但是,在进行以下操作时:
- 安装 RPM 版本 1
- 更改配置文件
etc/myconfig - 使用 RPM 版本 2 更新软件包
我遇到了冲突:
$ rpm --prefix ~/rpmroot/ -ih dist/mypackage-1.0.1-1.x86_64.rpm
########################################### [100%]
file /home/user/rpmroot/mypackage/etc/myconfig from install of mypackage-1.0.2-1.x86_64 conflicts with file from package mypackage-1.0.1-1.x86_64
问题:
- 如何解释这种冲突? (我希望新版本的配置文件将存储为
myconfig.rpmnew并且现有的保持不变) - 我做错了什么?
更新(附加信息)
rpm -qcp dist/mypackage-1.0.1-1.x86_64.rpm 的输出为:
/opt/mypackage/etc/config1.xml
/opt/mypackage/etc/config2.xml
/opt/mypackage/etc/run.sh
/opt/mypackage/etc/config3.xml
完整的%files 部分:
%files
%defattr(0444,root,root)
/opt/mypackage/java/*
#dba
%defattr(0444,root,root)
/opt/mypackage/dba/sql/*
%defattr(0555,root,root)
/opt/mypackage/dba/script/*
#srv
%defattr(0555,root,root)
/opt/mypackage/srv/bin/*
/opt/mypackage/srv/lib/*
#etc
%defattr(0664,root,root)
%config(noreplace) /opt/mypackage/etc/*
【问题讨论】:
-
奇怪的是“(noreplace)”功能没有记录在案......当你遇到麻烦说“%config”时,这几乎是我书中的预期行为......
-
已记录,但不是很好:rpm.org/wiki/PackagerDocs/Spec(也可以查看非官方但有用的网站:www-uxsup.csx.cam.ac.uk/~jw35/docs/rpm_config.html)
-
是的,我看到了非官方的,这是我搜索中唯一出现的一个(以及你的问题)。昨晚是我们第一次尝试
noreplace
标签: linux unix rpm rpmbuild rpm-spec