web-dev-qa-db-ja.com

2つのホストにインストールされているパッケージの違いのリストを計算する

私は、Debian仮想サーバーにいくつかの問題を追加するだけで、それらすべてを最初から再インストールします。しかし、私はまだ古いバージョンにアクセスでき、インストール済みパッケージのリストを取得できました。

将来の仮想サーバーの復元プロセスを容易にするために、サーバーごとに特定のパッケージのリストを作成したいと思います。

私が達成したいことをよりよく説明するため。私はすでに、あらゆる場所で使用されるいくつかの基本的なパッケージと構成を備えた新しい仮想サーバーを作成する自動化されたプロセスを持っています。ここで、この「スケルトン」を使用してデルタを保存し、特定のサーバーの再インストールを容易にします。

本当のプラスは、デフォルトから変更された構成ファイルも保存することですが、私はパッケージリストのみを使用できます。

つまり、ホストにインストールされているが別のホストにはインストールされていないパッケージのリストを作成する方法が必要です。

リストに手動でインストールされたパッケージのみが含まれ、すべての依存関係のリストが含まれていない場合は、非常に便利です。

この特定のタスクを達成するために設計された既存のツールがある場合は、遠慮なく提案してください。ただし、依存関係をできる限り小さくしたいと思います。詳細については、これらは正確には仮想サーバーではなく、LXCコンテナーです。

11
krtek

参照インストール(一度だけ):

dpkg-query -W -f='${Package}\n' | sort > baselist.txt

(以下はbashを想定しています)

参照インストールから追加されたパッケージを取得するには(削除されたものは表示されません):

comm -1 -3 baselist.txt <(dpkg-query -W -f='${Package}\n' | sort)

さらに良いことに、baselist.txtのコピーを避けます:

comm -1 -3 <(ssh user@refserver cat /path/to/baselist.txt) <(dpkg-query -W -f='${Package}\n' | sort)
12
shellholic

古いサーバーで次を実行:

dpkg --get-selections> old-packages-list

上記のファイルを新しいサーバーにコピーし、これを新しいサーバーで実行します。

dpkg --set-selections <古いパッケージリスト

apt-get update

dselect update

また、パッケージを移行する前に、古いサーバーから新しいサーバーに/etc/apt/sources.listのすべての追加リポジトリも追加することを忘れないでください。そうしないと、ほとんどのパッケージがインストールされないままになります。

2
Farhan

Blueprint は、まさにあなたのニーズに合わせて設計されています。インストールされている説明パッケージと変更された設定ファイルを吐き出します。クリーンボックスに適用するために、これらの記述をPuppetまたはChefスクリプトに変換できます。

1
Ben Butler-Cole

次のコマンドを使用して、両方のサーバー上のパッケージの完全なリストを取得できます。

     dpkg -l | sort > old_file
     dpkg -l | sort > new_file

次に、以下を使用して違いを取得できます。

     diff -Nur old_file new_file > changes.txt

Grepを使用して、必要な変更をフィルタリングできます。また、diffを使用して構成ファイルの変更を取得し、必要に応じて適用するパッチを生成することもできます。ちなみに、diffは2つのファイルだけでなく2つのフォルダーも比較できます。

1
Khaled

この役立つパッケージも見つかりました。その説明は次のとおりです。

Debianパッケージのファイルシステムツリーを現在のファイルシステムツリーと比較し、異なるファイルの統一されたdiffを出力するBashスクリプト。

https://code.google.com/p/dpkg-diffs/

単一のbashファイルをPATHのどこかに貼り付けて実行できます-私にとってはうまくいくようで、古すぎません。

これが誰かを助けることを願っています。

0
smaudet