Я создаю свой собственный RPM с помощью rpmbuild
.
Мой RPM содержит файлы конфигурации, которые никогда не должны переопределяться, даже если RPM содержит новая версия этих файлов конфигурации.
Чтобы заархивировать это, я пометил их тегом
%config(noreplace) /opt/mypackage/etc/*
в файле спец.
Согласно документации и этому сайту, локально измененный файл никогда не будет переопределен в этом случае, а это именно то, что я хочу.
Однако при выполнении следующих операций:
- Установите версию 1 RPM
- Изменить файл конфигурации
etc/myconfig
- Пакет обновления с версией 2 RPM
У меня возникает конфликт:
$ 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
- person nhed   schedule 12.09.2013