web-dev-qa-db-ja.com

OpenSUSE:リポジトリのないすべてのパッケージを検索

すべてのリポジトリを(12.1ではなく)ターゲット12.2に変更して、OpenSUSE12.1からOpenSUSE12.2にアップグレードしました。アップグレードしたので、リポジトリ*を持たないパッケージがたくさん見つかりました。YaST Software Managerは、バージョン列に赤いテキストでマークされています。これらをスクロールしてすべて削除することはできますが、zypper search(zypper se)またはSoftware Managerは、これらすべてを一度にターゲット/選択する方法があります。

*-これらのパッケージにはリポジトリ(OpenSUSE 12.1など)がありましたが、これらのリポジトリを12.2リポジトリに置き換えたため、リポジトリの関連付けがなくなりました。 12.2リポジトリには、システムの実行に必要なすべてのものが含まれている必要があるため、これによって問題が発生することはありません。

3
palswim

マーティンの答え /ガイダンスを使用して、削除するパッケージの文字列を取得する簡単なスクリプトを作成しました、zremove.sh

#!/bin/sh

pkgs=""
while read line
do
        pkgs="$pkgs $line"
done

zypper rm $pkgs

「リポジトリなし」のすべてのパッケージにrpmクエリでopenSUSE 12.1のディストリビューションがあることに気付いた後、これを発行しましたそれらすべてを見つけて削除するコマンド:

rpm -qa --qf '%{DISTRIBUTION} : %{NAME}\n' | grep "openSUSE 12.1 :" | sed 's/openSUSE 12.1 : //' | Sudo zremove.sh

これは通常、バッキングリポジトリなしですべてのパッケージを見つける方法の質問には答えませんが、私の最初の問題は解決しました。

2
palswim
rpm -qa --qf '%-30{DISTRIBUTION} %{NAME}\n'| sort

パッケージで使用されているすべてのリポジトリのリストが表示されます。不要なものを見つけることは、読者の練習問題として残されています。 :-)

リポジトリを「失った」パッケージ、または.rpmファイルから直接インストールされたパッケージは、Repository: @Systemを実行すると、zypper infoが表示されます。したがって、理論的にはzypper packages --repo @System --installed-onlyですべてを見つけることができるはずですが、これはlibzyppにはまだありません( openSUSE Bug 770239-'zypper pa 'は@Systemリポジトリのサポートがありません )。

回避策として、インストールされている各パッケージに対してzypper infoを実行し、リポジトリ@Systemを持っているユーザーをフィルタリングする必要があります。

rpm -qa --queryformat="%{n}\n" | while read p; do zypper info $p | grep -q '^Repository: @System' && echo $p; done

かなり遅いですが、仕事をします。

1
mleu