/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可変データ ファイルが含まれます。これには、スプール ディレクトリとファイル、管理データとログ データ、一時ファイルと一時ファイルが含まれます。

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

存在する理由については次のように説明されています/var

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

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

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

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

答え2

にあるファイルは、/varシステムにとって非常に重要です。たとえば、/var/mailまたはには/var/spool/mailユーザーの電子メールが含まれています。隣人のメールボックスに火をつけるのと同じくらい、これを削除しないでください。 の特定のサブディレクトリにあるファイルだけが、/var多かれ少なかれ一時的なファイルを含んでいます。たとえば、 のログ ファイル/var/log、 では通常再作成できるキャッシュ/var/cache、 の一時ファイル (使用中は削除しないでください!) などです/var/tmp

データは/var/libきわめて重要です。たとえば、MySQL は通常、デフォルトでデータベースを に保存するように設定されています。これを消去すると、データベースが消去されます。Dpkgも/var/lib/mysql独自のデータベースを に保存します。/var/lib/var/lib/dpkg/status

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

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

/var/lib/dpkg/infoには、Debian パッケージに同梱されているファイルが含まれています。これらのファイルは、パッケージを再インストールするだけで復元できます。もちろん、そのためにはインストールされたパッケージのリストが必要になります。 を復元した場合は/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 のみを使用したことがある場合は (直接ではなく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.

関連情報