web-dev-qa-db-ja.com

/ var / lib / dpkg / statusを再作成するには?

/var/lib/dpkg/の周りのいくつかのファイル、つまり次のファイルを削除しました:

/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*

Debianがこれらのファイルを使用して、インストールされたパッケージに関する情報を保持していることを理解しています。 apt-get updateを実行すると、次のエラーが発生します。

Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open 
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.

[〜#〜] fhs [〜#〜] を理解しているように、/varにあるファイルはシステムクリティカルではありません。評価者は、一時ファイル、ログ、キャッシュなどです。

したがって、削除されたファイルを再作成する方法はありますか?

10
Martin Vegter

ファイルシステム階層標準で指定されている/ varの目的 を見ると、次のように書かれています。

/varには、可変データファイルが含まれています。これには、スプールディレクトリとファイル、管理データとログデータ、一時ファイルと一時ファイルが含まれます。

「一時的で一時的な」ファイルは、そこに含まれるものの1つであることに注意してください。また、「スプールディレクトリとファイル」および「管理データとログデータ」も含まれています。重要な「管理データ」を削除しました。

/varが存在する理由を説明します:

/varは、/usrを読み取り専用でマウントできるようにするために、ここで指定されています。システムの運用中に(インストールやソフトウェアのメンテナンスではなく)書き込まれる/usrに入るすべてのものが/varに含まれている必要があります。

これが/varの重要な点です。/usr(ソフトウェアを追加/削除/更新したときにのみ変更される)とは異なり、その中のデータが変更されます。

以降のセクションでは、/varのさまざまなサブディレクトリについて説明します。たとえば、/var/lib(削除したファイルが以前使用していた場所)は、「アプリケーションまたはシステムに関する状態情報」を保持し、「プログラムが実行中に変更するデータであり、特定の1つのホストに関するデータです。 」

あなたreallyは、特定のファイルが何であるかを知らずにファイルを削除するべきではありません。削除したファイルについては、これらのファイルのバックアップがない限り、/home/etcなどのバックアップを取り、再インストールするだけでよいと思います。そうしないと、dpkg(およびAPTなど)を使用できなくなります。それ以外は、システムは機能し続けるはずです。

13
derobert

「再作成」することはできません/var/lib/dpkg/statusコマンドを実行するという意味で、ファイルは魔法のように表示されます。いいえ。ファイルのバックアップを使用する必要があり、/var/libディレクトリ:

Sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status

これにより、前日のパッケージステータスがわかります。それが他のものを壊さなかったことを祈り始めなさい。

8
Braiam

/var/lib/dpkg/availableは、aptデータから再作成できます。私がdselectを使用してこれを実行し、更新を選択することがわかった最も簡単な方法。これが機能するのは、更新方法としてaptを選択した場合のみです。 dselectは次のことをするようです:

/bin/bash /usr/lib/dpkg/methods/apt/update /var/lib/dpkg apt apt

ただし、Debian sarge以降は状況が変わっている可能性があります。

すべてのパッケージが/var/lib/dpkg/statusディレクトリにディレクトリを追加する必要があるという事実に基づいて、/usr/share/docを再作成するトリックがあります。 http://linuxmafia.com/faq/Debian/package-database-rebuild.html の投稿を参照してください。/usr/share/docのフィルターされたリストを使用して、インストールされたパッケージのリストを作成し、それらをすべて再インストールするスクリプトが提示されています。

5
Chris Gibson

さて、私はあなたがファイルを空に再作成してから、apt-get install long-listを実行できると思います。

基本的に、apt-getを実行できる最小のパッケージセットからこれを行う古代のスクリプトがあります。それを使用すると、宣言されていない依存関係の数十を報告してしまいました。

インストールしたものがすべてわからない場合は、システムを再インストールします。

1
Joshua

遅れて申し訳ありません。 Briam、dirsとファイルを手動で再作成し、次にrepos(mkdirおよびtouch、表示されたエラーでの必要に応じて)を更新し、dpkg --configure -aを使用します。

システムは正常に動作しますが、再インストールして破損していないことを確認することが重要です。以前は、再インストールをスケジュールする時間を稼ぐだけです... /var/lib/*ファイルの削除に注意してください。

0
Daniel Ospitia

Linux Mint 17では、同様の問題が発生しました。私はファイルの削除に熱心で、「アドミニストレーション->アップグレードマネージャー」がちょうど幸せに見えないことに気づきました。

私のために働いた解決策は、エラーメッセージに従って「dpkg」と呼ばれるディレクトリを作成し、その中に「ステータス」と呼ばれる空のファイルを作成することでした。

次に、Update Managerを実行しました。

それは私のために働いた:-)

0
Bluegerbil

'roo'以外のユーザーアカウントがある場合は、そのうちの1つからapt-get dist-upgradeを試すことができます。 Aptはアーカイブをダウンロードしますが、/ var /にいくつかの欠落しているディレクトリがあるため、インストール時に停止します。ディレクトリが表示されます。それらを作成して、apt-get dist-upgradeを新たに実行してください。ルートnに戻る代替アカウントログからそれらを作成できない場合は、そこからディレクトリを作成してから、再度aptを実行します。 logrotate構成についてプロンプトが表示され、Yと入力するだけで最後まで続行し、apt dist-upgradeが完了したら再起動します。すべてが正常に戻るはずです。

0
TheOne