相关疑难解决方法(0)

%config(noreplace)文件上出现意外的RPM冲突

我创造我自己的RPM使用rpmbuild.
我的RPM 包含配置文件,即使RPM包含这些配置文件的新版本,也不应该覆盖这些配置文件.

要归档这个,我用这些标记

%config(noreplace) /opt/mypackage/etc/*
Run Code Online (Sandbox Code Playgroud)

在spec文件中.

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

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

  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
Run Code Online (Sandbox Code Playgroud)

问题:

  • 如何解释这种冲突?(我希望配置文件的新版本将存储为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
Run Code Online (Sandbox Code Playgroud)

完整%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/*
Run Code Online (Sandbox Code Playgroud)

unix linux rpm rpmbuild rpm-spec

3
推荐指数
1
解决办法
3221
查看次数

标签 统计

linux ×1

rpm ×1

rpm-spec ×1

rpmbuild ×1

unix ×1