Debian(Armbian)サーバーがシャットダウンされる前に、インストールされているパッケージのリストを探す必要があります。オフラインなので、またはapt
(dpkg
または他のコマンド)は使用できません。私が知る必要がありますどのファイルリストを含めます(バイナリの場合でも)。検索しようとしましたが、すべてはオプションではなく、前述のコマンドを実行するように求められます。
答え1
/etcおよび/varバックアップで「dpkg --get-selections」をどのように近似しますか?あなたにとって重要な問題を解決してください。
インストールされたパッケージのリストは/var/lib/dpkg/status
.Look for Status: install ok installed
line に保存されます。これはパッケージが正しくインストールされたことを示します。
次の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
パッケージを記録する「autoinstall」フラグです。次のコマンドを実行してフラグを復元できます。
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
これら2つのファイルを組み合わせて、手動でインストールされたパッケージを一覧表示し、依存関係管理を使用して自動的にインストールされたパッケージをインストールできます(必ずしも同じパッケージセットがインストールされるわけではありません)。
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/状態
利用可能なパッケージの状態です。このファイルには、パッケージが削除対象としてマークされているか、インストールされているかなどに関する情報が含まれています。