RPM 删除不会删除已交付的目录并留下垃圾

RPM 删除不会删除已交付的目录并留下垃圾

我通过 RPM 交付应用程序。

此应用程序提供各种目录和文件。
例如,/opt/internal/com
正在复制文件结构。

我原本以为rpm -e所有交付的文件结构都/opt/internal/com将被删除。
但事实并非如此。
文件结构中有一些目录不为空。

这是原因吗?但是这些(非空)目录是由 RPM 安装创建的。所以我希望它们归 RPM 所有并被自动删除。

这有错吗?我应该手动删除它们吗?

答案1

RPM 不会删除任何它不知道的文件,因此如果在目录中创建了不属于软件包的新文件,RPM 不会删除它们或目录。

如果目录为空并且它知道这些目录,它将删除这些目录。这取决于 spec 文件的编写方式。

答案2

詹姆斯·奥戈曼的回答完全正确。

还有一个我最近遇到的需要添加的场景,就是您需要在 %files 部分中用一行“%dir /dir/path”来告诉 RPM 包所拥有的目录,这样它在安装时就会记住 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,即使它在某些发行版上是空的,它也不会被删除。

相关内容