dpkg -r 删除软件包时给出警告

dpkg -r 删除软件包时给出警告

我有一个自定义二进制包。我正在从 Makefile 创建包。以下是相同的代码:

FIREFOX_DIR = /usr/share/mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}

build:
    mkdir -p $(app_source_dir)
    mkdir -p $(app_source_dir)/opt/Sapience/config
    mkdir -p $(app_source_dir)/opt/Sapience/firefox
    mkdir -p $(app_source_dir)/$(FIREFOX_DIR)/firefox-extension@sapience
    mkdir -p $(app_source_dir)/usr/bin
    mkdir -p $(app_source_dir)/DEBIAN
    cp $(RT)/../bin/sapiencecollector $(app_source_dir)/usr/bin/.
    cp $(RT)/../DEBIAN/control $(app_source_dir)/DEBIAN/.
    cp $(RT)/../DEBIAN/postinst $(app_source_dir)/DEBIAN/.
    cp $(RT)/../DEBIAN/prerm $(app_source_dir)/DEBIAN/.
    cp $(RT)/../config/conf.ini $(app_source_dir)/opt/Sapience/config/.
    cp -r $(RT)/../external/firefox-extension/* $(app_source_dir)/$(FIREFOX_DIR)/firefox-extension@sapience/.
    dpkg --build $(app_source_dir) $(app_name)-$(version).deb

作为安装的一部分,我需要在 /opt 中创建一个名为 Sapience 的目录。为了做到这一点,我在软件包目录中创建了相同的目录层次结构。/opt 已存在于 Linux 中,我不想在安装软件包的机器上再次创建它。软件包已正确安装。当我尝试使用命令删除软件包时,dpkg -r <pkgname>出现以下错误:dpkg:warning:删除时,/opt 目录不为空,因此未删除。

我不想删除 /opt 目录,但 dpkg 仍试图删除它。有人能告诉我需要做哪些更改才能避免 dpkg 删除目录吗?

答案1

根据这个帖子dpkg 尝试从未被任何其他 Debian 软件包使用的目录中删除软件包,因此对于 dpkg 来说该目录看起来是空的,但是如果您将其他软件放在 /opt 下,则它在文件系统层上就不是空的。

因此,dpkg 将继续沿文件系统目录层次结构向上移动,直到删除安装的所有祖先,除非在祖先下还安装有另一个包。

要查看哪些软件包依赖于 /opt:

$ dpkg -S /opt

一个解决方案,取自这个帖子,就是创建一个“core-custom”包,它将容纳 /opt,并且是所有其他自定义包所必需的。您还可以将该包用作元包来安装您喜欢的所有常规包。虽然警告并不是什么大问题,但越干净越好。

相关内容