系统根目录/.rpmdb上的未知文件夹


16

有人可以解释根目录中的/.rpmdb文件夹用于什么吗?哪个应用程序创建并正在使用它?

Answers:


11

我不能确切地说是由什么创建此目录,但是它可能是由于使用DKMS安装第三方Linux内核驱动程序(如NVIDIA或VirtualBox)的副作用,或者是由其他未提供的不受支持的安装程序脚本创建的Ubuntu的。该目录很可能是由于安装过程的副作用而创建的,该安装过程恰好支持基于rpm和基于deb的发行版。DKMS恰好就是这样的安装脚本,并且肯定可以在正确的条件下创建此目录。可以安全地删除该目录而不会损害您的系统,但是以后安装更新时,可以再次创建该目录。有关跟踪此问题的公开错误报告,请参见错误#1069350

这是简短的答案,现在有更多详细信息。

什么是.rpmdb?

您可能知道,rpm是一种软件包格式,是用于安装软件包以及维护已安装软件包及其相互依赖性的数据库的工具集。许多发行版都使用它,而Ubuntu和其他基于deb的发行版则不使用它。然而不幸的是,对于Ubuntu,该rpm命令的任何使用都要求存在或创建有效的“ rpmdb”数据库。

在基于rpm的发行版上,这不是问题,因为根据定义,它们具有系统范围的rpmdb。在Ubuntu系统上,由于不需要系统范围的rpm数据库,rpm因此将其配置为使用每个用户的主目录下的数据库,尤其是$HOME/.rpmdb。每当rpm运行时,都会根据需要以静默方式创建此数据库。由于它位于每个用户的主目录中,因此共享权限没有任何问题,也不需要管理员创建数据库。每个用户仅获得自己的私有空rpm数据库。

为什么要在Ubuntu上完全运行rpm?

事实证明,某些项目喜欢创建可在任何发行版上使用的安装脚本,无论该发行版是基于rpm,基于deb还是都不基于rpm。DKMS就是这样的一个项目,它允许为系统恰好正在运行的任何Linux内核构建第三方驱动程序,并且它被编写为可跨发行版工作。在确定其运行于哪个发行版以及存在哪个内核版本的逻辑的一部分中,它执行rpm命令以查询数据库。如前所述,.rpmdb如果当前用户的主目录中不存在该目录,它将以静默方式创建目录。数据库查询应该失败,因为Ubuntu不是基于rpm的发行版,并且DKMS仍在继续。

如果您从Ubuntu安装了其他任何Linux内核驱动程序包,例如VirtualBox,NVIDIA,ndiswrapper或openswan,则可能是在使用DKMS为您的内核安装这些驱动程序。当从Ubuntu存储库安装驱动程序时,通常会自动完成此操作。因此,无论何时安装内核或驱动程序更新,DKMS都会再次运行以为所有可用的内核版本重建驱动程序。已经显示出,在更新这些软件包时/root/.rpmdb,实际上确实会出现该目录,该目录位于root的主目录中,因为安装更新需要root。

我不知道还有其他任何特定的第三方安装脚本,它们也可以执行rpm命令来检测分发类型,但是这确实是可能的。例如,您可能要从Initech安装LargeProprietaryProgram,并以install.shroot用户身份运行脚本。该脚本可能会尝试查询rpm数据库,以查看您是否正在运行基于rpm的发行版,并且/root/.rpmdb会再次创建该脚本。

因此,这说明了为什么您可能会看到/home/user/.rpmdb/root/.rpmdb在系统上显示目录。但是为什么要在系统根目录下?

为什么在根目录中创建.rpmdb?

对此最简单的解释是,$HOME环境变量在运行的某些过程上下文中以某种方式未设置rpm。为了论证,让我们使用DKMS,因为我们明确知道它可以运行rpm命令。因为它通常在安装或更新软件包时运行,所以它可以在您碰巧使用的任何软件包管理器的环境中运行。如果sudo apt-get用于安装软件包,它将继承正确的$HOME。如果使用PackageKit,则可能根本没有$HOME变量。我不确定Synaptic或Ubuntu软件中心提供的环境是什么。

因此,如果DKMS在没有$HOME变量的环境中运行,并且由于rpm数据库的定义方式,则会在中创建一个空的rpm数据库,/.rpmdb而不是在其中/root/.rpmdbrpm在14.10开发版本的Ubuntu软件包中已对此问题进行了修复,因此/root/.rpmdb即使$HOME未定义,它现在也应该创建。

我希望这能解释为什么.rpmdb在Ubuntu系统上根本没有调用过的目录,为什么它们似乎是自动创建的,以及为什么可以在正确的条件下在根目录中创建一个目录。不用担心,此目录的存在也没有恶意,并且如果它的存在对美观或安全扫描程序有害,则可以将其删除。


-1

RPM(Red Hat软件包管理器)是一个软件包管理系统。RPM最初由Erik Troan和Marc Ewing于1997年编写,用于Red Hat Linux,但现在已在许多GNU / Linux发行版中使用。

RPM数据库(RPMDB)存储在包管理器的幕后/var/lib/rpm。它由一个数据库(包)组成,该数据库包含已安装rpm的所有元信息。该数据库用于跟踪用户(使用RPM)安装软件包时更改和创建的所有文件,从而使用户(通过RPM)撤消更改并稍后删除软件包。


参考:http : //en.wikipedia.org/wiki/RPM_Package_Manager


4
这与解释为什么/.rpmdb会出现在不使用rpm的Ubuntu系统上有什么关系?
吉尔(Gilles)“所以,别再邪恶了”

1
可能会使用alien
喷射机
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.