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

/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システムにとって重要ではありません。評価者は一時ファイル、ログ、キャッシュなどでなければなりません。

それでは、削除されたファイルを再作成する方法はありませんか?

答え1

見たらファイルシステム階層標準で指定された/varの目的、それは言う:

/var可変データファイルを含みます。これには、スプールディレクトリとファイル、管理およびロギングデータ、一時ファイルと一時ファイルが含まれます。

「一時的および一時的な」ファイルはただ一つ含まれている内容。また、「スプールディレクトリとファイル」と「管理およびロギングデータ」も含まれています。重要な「管理データ」を削除しました。

続いて/varそれが存在する理由を説明します。

/var/usr読み取り専用でマウントできるようにここで指定します。/usrインストールとソフトウェアのメンテナンスとは異なり、システムの操作中に作成されたすべての内容は/var

キーは/var次のとおりです/usr(ソフトウェアが追加/削除/更新されたときにのみ変更されます)。

さまざまなサブディレクトリは他のセクションで説明されています/var。たとえば、/var/lib(一度削除したファイルが存在した場合)、「プログラムの実行中に変更され、対応するデータ」として定義された「アプリケーションまたはシステムに関連する状態情報」が含まれます。特定のマシンに関連しています。「ホスト関連」。

あなた本物目的を知らずにファイルを削除しないでください。削除したファイルはバックアップしておかない限りバックアップ/homeなどをして再インストールするしかないようです/etc。そうしないと、そのサービスdpkg(およびAPTなど)は利用できません。それ以外の場合は、システムが機能し続ける必要があります。

答え2

見つかったファイルは/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/status

/var/lib/dpkg/statusインストールされたパッケージに関する情報が含まれています。削除した場合は、バックアップから復元する必要があります。バックアップが完全に最新でない場合は、/var/log/apt最近のパッケージジョブログを確認してください/var/log/dpkg.logdpkgこれを行うには、まずこのファイルを作成する必要があります。

/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少なくともAPTを使用してパッケージをインストールした場合(直接インストールではない)、上記のintコマンドのdpkg代わりにそのファイルを使用することです。このアイテムも削除した場合、ほとんどのパッケージでアイテムが生成されるため、/var/lib/dpkg/statusおおよそのパッケージリストの再構築を使用できます。いくつかの例外があるかもしれません。$(cd /usr/share/doc && ls)/usr/share/doc

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

答え3

「再作成」コマンドを実行できず、ファイルが魔法のように見え/var/lib/dpkg/statusます。いいえ、ファイルのバックアップを使用し、/var/libディレクトリの内容を絶対に削除しない方法を学ぶ必要があります。

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

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

答え4

誰かが "/var/lib/dpkg"をヌッキングする場合:

sudo mkdir -p /var/lib/dpkg/updates
sudo mkdir -p /var/lib/dpkg/info
sudo mkdir -p /var/lib/dpkg/alternatives

sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status
sudo cp /var/backups/dpkg.statoverride.0 /var/lib/dpkg/statoverride
sudo cp /var/backups/dpkg.diversions.0 /var/lib/dpkg/diversions
sudo cp /var/backups/dpkg.arch.0 /var/lib/dpkg/arch

sudo dpkg --clear-avail
sudo apt update
sudo apt upgrade # If needed.

関連情報