#rpm #rpm-spec
#rpm #спецификация rpm
Вопрос:
Я создал RPM для части программного обеспечения, которое создает моя команда. Установка работает отлично, но я добавляю логику для удаления программного обеспечения и восстановления системы в рабочее состояние.
В рамках установки я должен поместить файл конфигурации в файловую систему. Однако, когда я удаляю RPM, этот файл остается в каталоге, что приводит к неправильной работе службы после удаления нашего пакета.
файл .SPEC:
%files
...
%attr(640, tomcat, tomcat) /var/lib/owf/lib/OWFsecurityContext.xml
...
Журнал установки:
cat Install.log | grep "OWFsecurityContext"
...
D: fini 100640 1 ( 498, 501) 2336 /var/lib/owf/lib/OWFsecurityContext.xml;53a41ad5
...
Файлы, принадлежащие RPM:
$ rpm -ql OurToolName | grep "OWFsecurityContext"
/var/lib/owf/lib/OWFsecurityContext.xml
Журнал удаления
$ cat Remove.log | grep "OWFsecurityContext"
D: fini 100640 1 ( 498, 501) 2336 /var/lib/owf/lib/OWFsecurityContext.xml skip
Почему RPM «пропускает» этот файл? Есть ли способ (помимо простого принудительного удаления в разделе%postun) указать RPM удалить этот файл, как и все другие файлы, которыми он владеет?
Редактировать:
После комментариев @EtanReisner выясняется, что файл принадлежит двум пакетам: пакету, который я создал в этом вопросе (с помощью явной ссылки на файл в %files
разделе и OWF install RPM, которому принадлежит весь каталог, в котором находится файл.
Учитывая, что файл в конечном итоге принадлежит двум пакетам, есть ли способ явно указать RPM удалить его независимо от его статуса, помимо принудительного удаления в %postun
скриптлете?
Комментарии:
1. Помечен ли этот файл как файл конфигурации в
%files
разделе файла спецификации? Что говорит ‘rpm -V OurToolName` перед удалением пакета?2. @EtanReisner — он не помечается как
%config
. Файл упоминается только один раз, как показано в вопросе.rpm -V OurToolName
возвращает:S.5....T. /usr/share/tomcat/apache-tomcat-7.0.42/webapps/OurTool/WEB-INF/spring.properties
, что и ожидалось, поскольку я изменяю этот файл в%post%
скриптлете.3. Возможно, этот файл принадлежит двум пакетам? Что означает ‘rpm -qf /var/lib/owf/lib/OWFsecurityContext.xml ` сказать?
4. @EtanReisner — Вы правы. Он принадлежит двум разным пакетам. вывод
rpm -qf /var/lib/owf/lib/OWFsecurityContext.xml
:owf-7.0-1.noarch OurToolName-1.0.0.0.0-noarch
я обновил вопрос, чтобы спросить, есть ли способ указать RPM удалить этот файл, независимо от его владельца.
Ответ №1:
Я не знаю ни о каком способе заставить RPM игнорировать конкурирующее владение и удалять файл в любом случае, как вы пытаетесь сделать (и немного кода, который я сделал на днях, чтобы выяснить, почему RPM будет пропускать файл, тоже ничего подобного не представил, хотя я и не былищу это в то время).
Я считаю, что владение всем каталогом обычно не рекомендуется по такой причине.
Ответ №2:
Вам нужно пометить его как %config
файл. Происходит то, что он оставляет файл позади, потому что он не соответствует тому, что, по мнению базы данных, должно быть, и не хочет, чтобы вы случайно потеряли данные. Если вы явно пометите его как файл конфигурации, то при удалении он будет переименован в /var/lib/owf/lib/OWFsecurityContext.xml.rpmsave
, что не должно ни с чем конфликтовать.