Debian はインストールされたパッケージのリストをどこに保存しますか?

Debian はインストールされたパッケージのリストをどこに保存しますか?

Debian (Armbian) サーバーがダウンする前にインストールされていたパッケージのリストを見つける必要があります。オフラインなので、aptまたはdpkg(または他のコマンド) は使用できません。どのファイルリストが含まれています (バイナリであっても)。検索してみましたが、すべて前述のコマンドを実行するように指示されているだけで、これはオプションではありません。

答え1

/etc および /var のバックアップから `dpkg --get-selections` を近似するにはどうすればよいですか?あなたの根本的な懸念に対処します。

インストールされたパッケージのリストは に保存されます/var/lib/dpkg/status。 行を探しますStatus: install ok installed。これは、パッケージが正しくインストールされていることを示します。

次の AWK 呼び出しは、ファイルからインストールされたパッケージ名を抽出しますstatus

awk '/^Package:/ { package = $2 }
     /^Status: install ok installed/ { print package }' /path/to/status

システムが複数のアーキテクチャをサポートしている場合は、それも追跡する必要があります。

awk '/^Package:/ { p = $2; i = 0 }
     /^Status: install ok installed/ { i = 1 }
     i && /^Architecture: all/ { print p; next }
     i && /^Architecture/ { printf "%s:%s\n", p, $2 }' /path/to/status

もう一つの興味深いファイルは、/var/lib/apt/extended_statesインストールされたパッケージの「自動インストール」フラグを記録するファイルです。フラグを復元するには、次のように実行します。

awk '/^Package:/ { p = $2 }
     /^Architecture/ { a = $2 }
     /^Auto-Installed: 1/ { printf "%s:%s\n", p, a }' /path/to/extended_states |
xargs sudo apt-mark auto

両方のファイルを組み合わせて手動でインストールされたパッケージを一覧表示し、依存関係管理を利用して自動的にインストールされたパッケージをインストールすることができます (ただし、必ずしも同じパッケージ セットがインストールされるわけではありません)。

awk 'FNR == NR && /^Package:/ { p = $2 }
     /^Status: install ok installed/ { i = 1 }
     FNR == NR && i && /^Architecture: all/ { ps[p] = 1; next }
     FNR == NR && i && /^Architecture/ { ps[p ":" $2] = 1}
     FNR != NR && /^Package:/ { p = $2 }
     FNR != NR && /^Architecture:/ { a = $2 }
     /^Auto-Installed: 1/ { delete ps[p ":" a] }
     END { for (p in ps) print p }' /path/to/status /path/to/extended_states

「ファイル」セクションを参照してくださいman dpkg:

/var/lib/dpkg/ステータス
利用可能なパッケージのステータス。このファイルには、パッケージが削除対象としてマークされているかどうか、インストールされているかどうかなどの情報が含まれています。

関連情報