gitを使用してインストールされたパッケージのリストを追跡する

gitを使用してインストールされたパッケージのリストを追跡する

私のシステムはDebian Busterです。 gitを使用してインストールされたパッケージのリストを追跡したいと思います。

インストールされたパッケージのリストを使用する場合、リストdpkg -lはどこから入手できますか?

でいくつかのパッケージ情報が見つかり/var/lib/dpkg/statusましたが、そのファイルには私が興味のあるものよりも多くの情報が含まれています。パッケージリストが保存される場所は他にありますか?

インストールされたパッケージ、そのバージョン、または削除されたパッケージを知るための最良のトレースファイルは何ですか?

修正する

gitを使って/var/lib/dpkg/statusを追跡しようとしましたが、出力は非常に不明で混乱しました。ステータス情報が多すぎます。インストールされているパッケージのリストとそのバージョンを追跡するだけです。 dpkg -l の出力に似ています。

dpkg -l で示されたパッケージのリストは一部のファイルに保存されていますか、それとも毎回動的に生成されますか?

/var/lib/dpkg/にgitリポジトリを作成し、gitにいくつかのフィルタを作成して、デフォルトでdpkg -lの出力を追跡できますか?または、git statusを実行するたびにリストが動的に生成される可能性がありますか?それとも他の解決策がある場合は、gitがどのような可能性を提供するのかわかりません。

ベストアンサー1

インストール済みパッケージのリストはい;これは/var/lib/dpkg/status正式な参照です。インストールされたパッケージは、「インストールの確認がインストール済み」の状態でこのファイルに表示されます。dpkg -lこのファイルは実行されるたびに処理され、ファイルに保存された情報は出力を生成するために使用されます。

より単純なデータセットを追跡して比較を簡素化するには、必要に応じて生成する必要があります。

インストールされているパッケージのリストを追跡するには、次を実行できます。

dpkg --get-selections

gitバージョンも必要なので、定期的に追跡されたファイルに出力を保存します。

dpkg -l

より適切かもしれません。

指摘したとおりマーティン・コンラッドここで生成された情報を使用して後でシステム状態を復元できるようにするには、手動でインストールされたタグも追跡する必要があり、保存も追加します。

apt-mark showmanual
apt-mark showhold

上記のすべてをフックに追加して、システムのすべての変更を追跡できます。dpkgたとえば、/etc/packages/ファイルを保存するには(代わりに/var/lib/dpkg「所有者」はdpkgそのまま残す必要があります)/etc/dpkg/dpkg.cfg.d/package-history

post-invoke="if [ -x /usr/local/bin/package-history ]; then /usr/local/bin/package-history; fi"

そして、/usr/local/bin/package-history次のファイルが含まれています

#!/bin/sh
cd /etc/packages
dpkg --get-selections > selections
dpkg -l > list
apt-mark showhold > holds
apt-mark showmanual > manual

後者は実行可能でなければなりません。

sudo chmod 755 /usr/local/bin/package-history

上記のコマンドの出力はすべて整列しているため、後処理する必要はありません。これらのファイルを使用すると、インストールされているパッケージの状態を正確に復元し、バージョンの変更を追跡し、削除されたが削除されていないパッケージを表示することもできます。

スクリプトに追加git commit(最初に変更を確認)したり、それを使用してファイルの変更を追跡したり、gitリポジトリ自体を作成したりすることもできます。フックを使用してファイルが更新されていることを確認してください。package-historyetckeeper/etc/packages/etc/packagesdpkgどのaptによって駆動されるか、またはdpkgに基づく他のパッケージ変更スクリプト自体内でコミットすると、コミット粒度は実行に対応し、関連するタスクdpkgに対応します。package-historydpkgetckeeperetckeeper

スクリプトで送信を処理するには、次を追加します。

if [ "$(git status --porcelain | wc -l)" -gt 0 ]; then
    git add *
    git commit -m 'Update package information'
fi

上記のスクリプトの最後に移動し、rootとして手動で一度実行してgit履歴を初期化する必要があります(後でmkdir /etc/packages; git init /etc/packages)。

おすすめ記事