OpenSUSE: Trouver tous les packages sans référentiel

Je viens de passer à OpenSUSE 12.2 à partir d'OpenSUSE 12.1 en changeant tous mes référentiels à la cible 12.2 (au lieu de 12.1). Maintenant que j'ai mis à jour, j'ai trouvé un tas de packages qui n'ont pas de référentiel *, que le gestionnaire de logiciel de YaST marque avec du text rouge dans la colonne de version. Je peux faire défiler ceux-ci et supprimer chacun d'eux, mais je me request si la search zypper se ( zypper se ) ou le gestionnaire de logiciel a un moyen de cibler / sélectionner tous ceux-ci à la fois.

* – Ces packages avaient un référentiel (quelque chose d'OpenSUSE 12.1), mais depuis que j'ai remplacé ces référentiels par les référentiels 12.2, ils n'ont plus d'association de référentiel. Cela ne crée pas de problème, car les référentiels 12.2 doivent contenir tout ce dont j'ai besoin pour faire fonctionner mon système.

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

vous donne une list de tous les repos utilisés par vos packages. Trouver ceux que vous ne voulez pas est laissé comme un exercice pour le lecteur. :-) .

En utilisant la réponse de Martin , j'ai écrit un script rapide pour prendre une string de packages à supprimer, zremove.sh :

 #!/bin/sh pkgs="" while read line do pkgs="$pkgs $line" done zypper rm $pkgs 

Après avoir remarqué que tous mes packages «sans référentiel» avaient une dissortingbution d' openSUSE 12.1 dans la requête rpm , j'ai émis cette command pour les localiser et les supprimer:

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

Cela ne répond généralement pas à la question de savoir comment find tous les packages sans un référentiel de sauvegarde, mais cela a résolu mon problème initial.

Les packages qui ont «perdu» leur référentiel ou qui ont été installés directement à partir d'un file .rpm afficheront Repository: @System lorsque vous aurez une zypper info sur eux. Donc, en théorie, il devrait être possible de les find tous avec des zypper packages --repo @System --installed-only mais cela manque toujours dans libzypp ( openSUSE Bug 770239 – 'zypper pa' ne supporte pas le repo @System ).

Comme solution de contournement, il faut faire une zypper info sur chaque package installé et filterr pour ceux qui ont le référentiel @System :

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

Assez lent mais fait le travail.