Неизвестная папка в системном корне / .rpmdb

16

Может кто-нибудь объяснить, для чего предназначена папка /.rpmdb в корневом каталоге? Какое приложение создает и использует это?

BSimulj
источник

Ответы:

11

Я не могу однозначно сказать, что создает этот каталог, но, скорее всего, он создается либо как побочный эффект от установки сторонних драйверов ядра Linux, таких как NVIDIA или VirtualBox, с использованием DKMS , либо с помощью какого-либо другого неподдерживаемого сценария установщика, не предоставленного Ubuntu. Этот каталог, скорее всего, был создан как побочный эффект процесса установки, который поддерживает как дистрибутивы на основе rpm, так и на основе deb. DKMS является таким сценарием установки и определенно может создать этот каталог при правильных условиях. Каталог может быть безопасно удален без ущерба для вашей системы, но он может быть создан снова, когда обновления будут установлены позже. См. Сообщение об ошибке № 1069350 для получения открытого отчета об ошибке, отслеживающего эту проблему.

Это короткий ответ, теперь немного подробнее.

Что такое .rpmdb?

Как вы, возможно, знаете, rpm - это формат программного пакета и набор инструментов для установки пакетов и ведения базы данных установленных пакетов и их взаимозависимостей. Он используется во многих дистрибутивах, но не в Ubuntu и других дистрибутивах на основе deb. К сожалению, для Ubuntu, однако, любое использование rpmкоманды требует наличия или создания действительной базы данных «rpmdb».

В дистрибутивах на основе rpm это не проблема, поскольку по определению они имеют общесистемный rpmdb. В системах Ubuntu, поскольку нет необходимости в общесистемной базе данных rpm, rpmона настроена на использование базы данных, в частности, в домашнем каталоге каждого пользователя $HOME/.rpmdb. Эта база данных создается автоматически по мере необходимости при rpmзапуске. Поскольку он находится в домашнем каталоге каждого пользователя, нет проблем с общими разрешениями или с требованием создания базы данных администратором. Каждый пользователь просто получает свою собственную пустую базу данных RPM.

Зачем вообще запускать rpm на Ubuntu?

Оказывается, что некоторым проектам нравится создавать сценарии установки, которые будут работать с любым дистрибутивом, независимо от того, является ли этот дистрибутив основанным на rpm, deb или ни тем, ни другим. DKMS является одним из таких проектов, он позволяет собирать сторонние драйверы для любого ядра Linux, в котором работает система, и он написан для работы в разных дистрибутивах. В части своей логики, чтобы определить, на каком дистрибутиве он работает и какая версия ядра присутствует, он выполняет rpmкоманду для запроса базы данных. Как я объяснил ранее, это создаст .rpmdbкаталог в молчании, если он еще не существует в домашнем каталоге текущего пользователя. Запрос к базе данных должен завершиться сбоем, поскольку Ubuntu не является дистрибутивом на основе rpm, а DKMS продолжается.

Если вы устанавливаете какие-либо дополнительные пакеты драйверов ядра Linux из Ubuntu, такие как VirtualBox, NVIDIA, ndiswrapper или openswan, вы, вероятно, используете DKMS для установки этих драйверов для вашего ядра. Обычно это делается автоматически, когда драйвер устанавливается из репозиториев Ubuntu. Таким образом, каждый раз, когда устанавливается обновление ядра или драйвера, DKMS запускается снова, чтобы перестроить драйвер для всех доступных версий ядра. Было показано, что при обновлении этих пакетов /root/.rpmdbкаталог действительно появляется, который находится в домашнем каталоге root, поскольку для установки обновлений требуется root.

Я не знаю каких-либо других сторонних сценариев установки, которые могут также выполнять rpmкоманды как способ определения типа распространения, но это, безусловно, возможно. Например, вы можете установить LargePprietaryProgram из Initech, и для этого вы запустите install.shскрипт от имени пользователя root. Этот сценарий может попытаться выполнить запрос к базе данных rpm, чтобы определить, используете ли вы дистрибутив на основе rpm, и /root/.rpmdbсоздается снова.

Это объясняет, почему вы можете видеть, /home/user/.rpmdbи /root/.rpmdbкаталоги отображаются в вашей системе. Но почему в системном корневом каталоге?

Почему .rpmdb создается в корневом каталоге?

Самым простым объяснением этого является то, что $HOMEпеременная окружения как-то не установлена ​​в каком-то контексте процесса, который выполняется rpm. Давайте использовать DKMS ради аргумента, потому что мы точно знаем, что он может запускать rpmкоманды. Поскольку он обычно запускается при установке или обновлении пакетов, он работает в среде любого менеджера пакетов, который вы используете. Если вы используете sudo apt-getдля установки пакетов, он унаследует правильный $HOME. Если вы используете PackageKit, у него может вообще не быть $HOMEпеременной. Я не уверен, какую среду предоставляют Synaptic или Ubuntu Software Center.

Поэтому, если DKMS работает в среде, в которой нет $HOMEпеременной, и из-за способа определения базы данных rpm /.rpmdbвместо нее будет создана пустая база данных rpm /root/.rpmdb. Это было исправлено в rpmпакете для Ubuntu в версии 14.10 для разработчиков, поэтому теперь его следует создавать, /root/.rpmdbдаже если $HOMEон не определен.

Я надеюсь, что это объясняет, почему .rpmdbв системе Ubuntu вообще есть каталоги , почему они могут создаваться автоматически, и почему они могут быть созданы в корневом каталоге при правильном наборе условий. Не о чем беспокоиться, нет ничего злонамеренного в существовании этого каталога, и его можно просто удалить, если его присутствие оскорбительно для эстетики или сканеров безопасности.

Майк Миллер
источник
-1

RPM (Red Hat Package Manager) - это система управления пакетами. Этот RPM был изначально написан в 1997 году Эриком Троаном и Марком Юингом для использования в Red Hat Linux, но сейчас используется во многих дистрибутивах GNU / Linux.

За кулисами менеджера пакетов работает база данных RPM ( RPMDB ), которая хранится в /var/lib/rpm. Он состоит из единой базы данных (пакетов), содержащей всю метаинформацию установленных rpms . База данных используется для отслеживания всех файлов, которые были изменены и созданы, когда пользователь (используя RPM) устанавливает пакет , что позволяет пользователю (через RPM) отменить изменения и удалить пакет позже.


Ссылка: http://en.wikipedia.org/wiki/RPM_Package_Manager

Lucio
источник
4
Какое отношение это имеет к объяснению причин /.rpmdbпоявления в системе Ubuntu (которая не использует rpm)?
Жиль "ТАК - перестань быть злым"
1
возможно используетсяalien
струя