すべてのリポジトリを(12.1ではなく)ターゲット12.2に変更して、OpenSUSE12.1からOpenSUSE12.2にアップグレードしました。アップグレードしたので、リポジトリ*を持たないパッケージがたくさん見つかりました。YaST Software Managerは、バージョン列に赤いテキストでマークされています。これらをスクロールしてすべて削除することはできますが、zypper search(zypper se
)またはSoftware Managerは、これらすべてを一度にターゲット/選択する方法があります。
*-これらのパッケージにはリポジトリ(OpenSUSE 12.1など)がありましたが、これらのリポジトリを12.2リポジトリに置き換えたため、リポジトリの関連付けがなくなりました。 12.2リポジトリには、システムの実行に必要なすべてのものが含まれている必要があるため、これによって問題が発生することはありません。
マーティンの答え /ガイダンスを使用して、削除するパッケージの文字列を取得する簡単なスクリプトを作成しました、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
これは通常、バッキングリポジトリなしですべてのパッケージを見つける方法の質問には答えませんが、私の最初の問題は解決しました。
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
かなり遅いですが、仕事をします。