3

正在使用rpmbuild.
我的 RPM包含永远不会被覆盖的配置文件的配置文件,即使 RPM 包含这些配置文件的新版本。

为了存档这个,我用

%config(noreplace) /opt/mypackage/etc/*

在规范文件中。

根据文档和本网站,在这种情况下,本地修改的文件永远不会被覆盖,这正是我想要的。

但是,在执行以下操作时:

  1. 安装 RPM 版本 1
  2. 更改配置文件etc/myconfig
  3. 使用 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/*
4

1 回答 1

7

如果这实际上是你的问题,你可能会踢自己......

我认为这可能只是因为您正在“安装”而不是“升级”替换-ih-Uh

我创建了一个具有类似设置的测试 RPM,结果如下:

像你一样使用 -ih

$ sudo rpm --prefix ~/rpmroot/ -ih /home/nhed/rpmbuild/RPMS/x86_64/ptst-1.1.0-1.x86_64.rpm

#################################### [100%] 文件 /home/nhed/rpmroot/etc /a 来自安装 ptst-1.1.0-1.x86_64 冲突

与来自软件包 ptst-1.0.0-1.x86_64 的文件 来自安装 ptst-1.1.0-1.x86_64 的文件 /home/nhed/rpmroot/etc/b 与来自软件包 ptst-1.0.0-1.x86_64 的文件冲突来自安装 ptst-1.1.0-1.x86_64 的文件 /home/nhed/rpmroot/etc/c 与来自包 ptst-1.0.0-1.x86_64 的文件冲突

与-呃

$ sudo rpm --prefix ~/rpmroot/ -Uh /home/nhed/rpmbuild/RPMS/x86_64/ptst-1.1.0-1.x86_64.rpm

##################################### [100%]

警告:/home/nhed/rpmroot/etc/a 创建为 /home/nhed/rpmroot/etc/a.rpmnew

##################################### [100%]
于 2013-09-12T01:22:11.277 回答