web-dev-qa-db-ja.com

システムルート/.rpmdbの不明なフォルダー

誰かがルートディレクトリの/.rpmdbフォルダーの目的を説明できますか?どのアプリケーションがそれを作成し、使用していますか?

16
BSimulj

このディレクトリを作成するものを明確に言うことはできませんが、 DKMS を使用して、NVIDIAやVirtualBoxなどのサードパーティLinuxカーネルドライバーをインストールする副作用として作成される可能性があります。 Ubuntuによって提供されていない他のサポートされていないインストーラースクリプトによって。このディレクトリは、たぶんrpmベースとdebベースの両方のディストリビューションをサポートするインストールプロセスの副作用として作成されたものです。 DKMSはたまたまそのようなインストールスクリプトであり、適切な条件下で間違いなくこのディレクトリを作成できます。ディレクトリはシステムに害を与えることなく安全に削除できますが、後で更新プログラムをインストールすると再び作成される場合があります。この問題を追跡する未解決のバグレポートについては、 bug#106935 をご覧ください。

それは簡単な答えですが、今はもう少し詳しく説明します。

.rpmdbとは何ですか?

ご存知かもしれませんが、rpmは、パッケージをインストールし、インストールされたパッケージとそれらの相互依存関係のデータベースを維持するためのソフトウェアパッケージフォーマットおよびツールセットです。多くのディストリビューションで使用されていますが、Ubuntuやその他のdebベースのディストリビューションでは使用されていません。ただし、Ubuntuにとって残念なことに、rpmコマンドを使用するには、有効な「rpmdb」データベースが存在または作成されている必要があります。

Rpmベースのディストリビューションでは、定義によりシステム全体にrpmdbがあるため、これは問題ではありません。 Ubuntuシステムでは、システム全体のrpmデータベースは必要ないため、rpmは各ユーザーのホームディレクトリ、特に$HOME/.rpmdbの下のデータベースを使用するように構成されます。このデータベースは、rpmが実行されるたびに、必要に応じてサイレントに作成されます。各ユーザーのホームディレクトリにあるため、共有アクセス許可や、管理者がデータベースを作成する必要はありません。すべてのユーザーは、独自の空のプライベートrpmデータベースを取得します。

Ubuntuでrpmが実行されるのはなぜですか?

いくつかのプロジェクトは、ディストリビューションがrpmベース、debベース、またはどちらでもない、どのディストリビューションでも動作するインストールスクリプトを作成することを好みます。 DKMSはそのようなプロジェクトの1つであり、システムが実行中のLinuxカーネルに合わせてサードパーティのドライバーを構築でき、ディストリビューション全体で機能するように作成されています。実行しているディストリビューションと存在するカーネルバージョンを判断するロジックの一部で、rpmコマンドを実行してデータベースを照会します。前に説明したように、現在のユーザーのホームディレクトリに.rpmdbディレクトリが存在しない場合は、これがサイレントに作成されます。 Ubuntuはrpmベースのディストリビューションではないため、データベースクエリは失敗し、DKMSは続行されます。

VirtualBox、NVIDIA、ndiswrapper、openswanなど、Ubuntuから追加のLinuxカーネルドライバーパッケージをインストールする場合、おそらくDKMSを使用してカーネル用のドライバーをインストールしていることになります。これは通常、ドライバーがUbuntuリポジトリからインストールされるときに自動的に行われます。そのため、カーネルまたはドライバーのアップデートがインストールされるたびに、DKMSが再度実行され、利用可能なすべてのカーネルバージョンのドライバーが再構築されます。これらのパッケージが更新されると、/root/.rpmdbディレクトリが実際に表示されることが示されています。これは、更新のインストールにルートが必要なため、ルートのホームディレクトリにあります。

配布タイプを検出する方法としてrpmコマンドを実行する可能性のある他の特定のサードパーティインストールスクリプトは知りませんが、それは確かに可能です。たとえば、InitechからLargeProprietaryProgramをインストールしたい場合は、install.shスクリプトをルートとして実行します。このスクリプトは、rpmデータベースを照会して、rpmベースのディストリビューションを実行しているかどうかを確認し、/root/.rpmdbが再度作成される場合があります。

したがって、/home/user/.rpmdbおよび/root/.rpmdbディレクトリがシステムに表示される理由を説明しています。しかし、なぜシステムのルートディレクトリにあるのでしょうか?

なぜ.rpmdbがルートディレクトリに作成されるのですか?

これに対する最も簡単な説明は、rpmを実行するプロセスコンテキストで$HOME環境変数が何らかの形で設定解除されることです。 rpmコマンドを実行できることが明確にわかっているため、議論のためにDKMSを使用しましょう。通常、パッケージのインストールまたは更新時に実行されるため、使用するパッケージマネージャーの環境で実行されます。 Sudo apt-getを使用してパッケージをインストールすると、正しい$HOMEを継承します。 PackageKitを使用する場合、$HOME変数がまったくない場合があります。 SynapticまたはUbuntu Software Centerが提供する環境がわかりません。

したがって、DKMSが$HOME変数を持たない環境で実行されており、rpmデータベースの定義方法が原因で、/.rpmdbではなく/root/.rpmdbに空のrpmデータベースが作成されます。これは14.10開発バージョンのUbuntuのrpmパッケージで修正されているため、/root/.rpmdbが定義されていなくても$HOMEを作成する必要があります。

Ubuntuシステムに.rpmdbと呼ばれるディレクトリが存在する理由、一見自動的に作成される理由、適切な条件の下でルートディレクトリに作成できる理由を説明することを願っています。心配する必要はありません。このディレクトリの存在に悪意はありません。また、その存在が美学やセキュリティスキャナーに不快感を与える場合は、単純に削除できます。

11
Mike Miller