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


10

/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はシステムクリティカルであるとは限りません。評価者は、一時ファイル、ログ、キャッシュなどです。

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


1
Braiamの回答でステータスファイルを取得できます。ただし、削除したものも/var/lib/dpkg/info非常に重要です。FHSを誤解しており、AFAIKの唯一のリカバリパスは、(a)バックアップからの復元または(b)再インストールです。
derobert 2014年

回答:


13

Filesystem Hierarchy Standardに記載されている/ var目的を見ると、次のように書かれています。

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

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

なぜ/var存在するのかを説明します:

/var/usr読み取り専用でマウントできるようにするために、ここで指定されています。一度行ったすべてのものは、/usrシステムのインストール中に(インストールやソフトウェアの保守ではなく)書き込まれ/varます。

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

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

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


別のマシンからファイルをコピーできますか、それともマシン固有ですか?
Martin Vegter 2014年

1
@MartinVegterステータスは、この特定のマシンにインストールされているパッケージをリストします。完全に同じパッケージ状態(インストールされているだけでなく、削除されているがパージされていない)のマシンからコピーすることもできます。apt-get update利用できるように再構築すると思います。info /のものはインストールされた各パッケージから取得されますが、少なくとも古いconfファイルの場合も履歴も反映します...しかし、おそらくまったく同じパッケージマシンからのコピーで
回避でき

現在のドキュメントでは、「/var/lib状態情報。データベース、パッケージングシステムメタデータなど、プログラムの実行中にプログラムによって変更される永続的なデータ」が宣言されています。
ミッコランタライネン

8

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

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

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


また/var/backups、そこに複数のコピーがあります。
derobert 2014年

@Braiam-私にはstatus-oldがなく、/ var / backupsにも何もありません。別のマシンからファイルをコピーできますか、それともマシン固有ですか?
Martin Vegter 2014年

1
@MartinVegterいいえ、機能しません。最も速い方法は、重要なファイルのバックアップをとり、システムを再インストールすることです。ところで、でも/var/backups/dpkg.status.0
Braiam 2014年

8

にあるファイルは、/varシステムに非常に重要です。たとえば、/var/mailまたは/var/spool/mailユーザーのメールが含まれます。あなたはそれをあなたの隣人の郵便受けに火をつけるよりもそれを削除しないでしょう。これは、の/var一時的なファイルを含む特定のサブディレクトリ内のファイルのみです。のログファイル、/var/logで通常再作成できるキャッシュ/var/cache、の一時ファイル(使用中は削除しないでください!)です/var/tmp

のデータは/var/lib非常に重要です。たとえば、MySQLは通常/var/lib/mysql、デフォルトでデータベースを保存するように構成されています。これを消去すると、データベースが消去されます。Dpkgは独自のデータベース/var/libも配置します。/var/lib/dpkg/status1であります。

/var/lib/dpkg/statusインストールされているパッケージに関する情報が含まれています。それを消去した場合は、バックアップから復元する必要があります。バックアップが完全に最新でない場合は、下の最近のパッケージ操作のログをチェック/var/log/aptしてに/var/log/dpkg.log。動作する前に、そのファイルを作成する必要がありますdpkg

/var/lib/dpkg/availableインターネットからダウンロードされたデータから構築されます。apt-get updateそれを再構築する必要があります。

/var/lib/dpkg/infoDebianパッケージに付属するファイルが含まれています。これらのファイルは、パッケージを再インストールするだけで復元できます。もちろん、そのためにインストールされているパッケージのリストが必要です。を復元した場合は/var/lib/dpkg/status、そこからパッケージのリストを抽出できます。

apt-get install --reinstall $(</var/lib/dpkg/status sed -n 's/^Package://p')

を失った場合は/var/lib/dpkg/status、空のファイルを作成し、apt-get install --reinstallパッケージのリストで実行することで、ファイルを再作成できる場合があります。パッケージのリストも保存される場所の1つは/var/lib/apt/extended_states、少なくとも(dpkg直接ではなく)APTを使用してパッケージをインストールしたことがない場合です- /var/lib/dpkg/status上記のコマンドの代わりにそのファイルを使用します。それも削除した場合は$(cd /usr/share/doc && ls)、ほとんどのパッケージがにエントリを作成するため、でおおよそのパッケージリストを再構築できます/usr/share/doc。おそらくいくつかの例外があります。

このシステムでのパッケージ管理について支援を求めないでください。システムクリティカルなファイルの削除からの回復は、正確な科学ではありません。バックアップから復元できない場合は、できるだけ早く新しいクリーンなシステムをインストールする必要があります。


歴史的な問題とそれを修正した方法を説明することから始めれば、そのようなシステムのパッケージについて支援を求めることは問題ないと思います。このようなシステムを修復すると、パッケージ管理プロセスのセキュリティの脆弱性などに気付く場合があり、そのようなシステムへの対処が困難であるにもかかわらず、貴重な場合があります。
ミッコランタライネン

5

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

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

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

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


1

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

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

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


0

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

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

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

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


0

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


0

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

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


-2

ラズベリーpi 3を購入し、問題に直面して「ファイル/ var / lib / dpkg / statusを解析できなかったか、開けませんでした」というエラーが発生した場合、これは私にとってはうまくいった回避策です:

「/ var / lib / dpkg / status」ファイルを再作成するにはどうすればよいですか?これは不必要なファイルではないため、これは、Raspbian OSにインストールされたパッケージに関する情報を保持する非常に重要なファイルです。 :

  1. Raspbianシステム内でwgetを実行します。

    wget http://www.doglabscs.com/recover1.sh
    
  2. いくつかの権限を付与します。

    chmod 777 recover1.sh
    
  3. システムのドキュメントフォルダーを分析し、ステータスファイルを再生成します。

    ./recover1.sh
    
  4. 完了したら、ファイルをダウンロードして注意深くお読みください。ファイルに記載されている手順に従います。

    wget http://www.doglabscs.com/recover2.txt
    cat recover2.txt
    

こんにちは!リンクではなく、回答の一部としてコードを投稿してください。
dhag 2017

警告:既に問題がなければ、テストせずにrecover1.sh電流/var/lib/dpkg/statusを破棄します。次に、混合されたバッグのトリックを実行して、ある程度機能するバージョンを再構築しようとします。/ var / lib / dpkg / statusファイルが完全に欠落している場合を除き、上記のスクリプトを実行しないでください。それ以外の場合strings /var/lib/dpkg/statusは、破損したファイルの再構築を開始するためのより良い方法かもしれません。
ミッコランタライネン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.