RPM «пропускает» принадлежащий файл во время удаления

#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 , что не должно ни с чем конфликтовать.