Я доставляю приложение через 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
и он не будет удален, даже если на некоторых дистрибутивах он пуст.