パッケージ管理にZypperを使用しているシステム(私の場合はopenSuse)で、現在有効になっているリポジトリに関連付けられていない、インストールされているすべてのパッケージのリストを取得するにはどうすればよいですか?
実際の問題:ディストリビューションをアップグレードするとき(たとえば、openSuse 12.1から12.2に)、有効にしたすべての非標準リポジトリを無効にします。多くの場合、特定のツールの新しいバージョンを取得するためにそれらを追加しただけですが、その新しいバージョンはデフォルトで更新されたディストリビューションに含まれています。リポジトリから追加のパッケージがインストールされることもありましたが、それらを検出する方法がわかりません。システムは機能しますが、アップグレード後に提供リポジトリを削除したため、これらのパッケージは更新されません。
それは、ジッパーの問い合わせをいじり回すことについて少しです。
1)非opensuse-distribution-repositoriesからのインストール済みパッケージを検索します。
zypper search -s | grep "i |" | grep -vi "| patch" | grep -vi "| opensuse" > list1.txt
2)opensuseリポジトリから入手できるパッケージを検索します(インストールされているかどうかに関係なく)。
zypper search -s | grep "v |" | grep -vi "| patch" | grep -i "| opensuse" > list2.txt
3)list1から、list2に表されていないパッケージを特定します。
cat list1.txt | cut -d " " -f3 | cut -d " " -f1 | while read line
do
if [ "$(cat list2.txt | grep -i $line)" = "" ]; then
echo "$line"
fi
done
これで問題が解決するはずです(openSUSE 11.3でテスト済み)。
オプションpa
の方がおそらく適切です。
zypper pa -i
インストールされているすべてのパッケージと、それらの使用可能なバージョンおよびリポジトリを一覧表示します。 -r
フラグが付いた特定のリポジトリに属するパッケージのみを一覧表示するように選択できます。
zypper pa -i -r openSUSE-12.1
そこから、@ ernestophelesによって提案された戦略を使用して、ニーズに一致する戦略を見つけることができます。