Назад | Перейти на главную страницу

Удаление RPM не удаляет доставленные каталоги и оставляет мусор

Я доставляю приложение через RPM.

Это приложение предоставляет различные каталоги и файлы.
Например. под /opt/internal/com
копируется файловая структура.

Я ожидал этого на rpm -e вся файловая структура, поставляемая под /opt/internal/com будет удален.
Но это не так.
В файловой структуре есть непустые каталоги.

Это причина? Но эти (непустые) каталоги были созданы при установке RPM. Поэтому я ожидал, что они будут «принадлежать» RPM и удаляться автоматически.

Это неправильно? Могу ли я удалить их вручную?

RPM не удаляет файлы, о которых он не знает, поэтому, если новые файлы были созданы в каталоге, не являющемся частью пакета, RPM не удалит их или каталоги.

Он удалит каталоги, если они пусты и знает о них. Это зависит от того, как был написан файл спецификации.

Ответ Джеймса О'Гормана абсолютно верен.

Еще один сценарий, с которым я недавно столкнулся, заключается в том, что вам необходимо указать каталоги, принадлежащие пакету RPM, в разделе% files с помощью строки «% dir / dir / path», чтобы он запомнил все файлы и каталоги в базе данных RPM, когда установлен и может быть удален (если содержимое каталога не принадлежит этому пакету) во время стирания RPM.

Следует проявлять большую осторожность при указании собственных каталогов, поскольку существуют разные методы для обработки стирания RPM в разных дистрибутивах.

например если ваш пакет содержит следующие файлы и каталоги:

**DIR:** /opt/dir1/empty_dir **FILE:** /opt/dir1/file1 **FILE:** /opt/dir1/dir2/file2

тогда ваш раздел% files должен выглядеть так

%files
%dir /opt/dir1
%dir /opt/dir1/empty_dir
%dir /opt/dir1/dir2
/opt/dir1/file1
/opt/dir1/dir2/file2

Сложность в том, что вы можете пропустить %dir /opt/dir1 и он не будет удален, даже если на некоторых дистрибутивах он пуст.