Réponses:
Eh bien, vous pouvez supprimer et réinstaller les packages
ppa-purge
est probablement toujours votre meilleur pari pour une évasion propre. Il suffit de rajouter le PPA dont le package est issu, puis de l'utiliser ppa-purge
pour le tuer. Je ne sais pas combien de PPA vous avez installés, mais si c'est moins de 10, je chercherais à le faire.
Si vous pensez que cette méthode est trop douce, je viens d'écrire du bash
-porn pour aider à identifier les versions de package dont la source d'installation n'existe désormais qu'en local /var/lib/dpkg/status
. Ce n'est pas la même chose que les packages "orphelins".
for p in `dpkg-query --showformat='${Package} ' -W`; do
if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
echo $p;
fi;
done
Je ne sais pas encore si c'est parfait, mais essayez-le. Notez que cela n'imprimera que les noms des packages. Vous devrez désinstaller / réinstaller manuellement chaque package.
Pour ce faire, regardez d'abord ce qui est disponible pour ce package en exécutant apt-cache policy <package>
et vous verrez une liste des versions du package (y compris la /var/lib/dpkg/status
version). Trouvez le périphérique externe le plus proche et exécutez:
sudo apt-get install <package>=<version>
Vous devrez peut-être ajouter un --reinstall
après le install
mais voyez comment cela se passe.
ppa-purge
été supprimé? Il est dans les dépôts de Trusty ainsi que de toutes les autres versions prises en charge .
J'ai écrit un script plus complet qui reconnaîtra les packages dont la version actuelle ne provient pas d'un PPA, et ils ont une version alternative disponible pour le PPA. Après son exécution, il imprime une commande prête à exécuter qui rétrogradera ces packages vers leurs versions PPA.
https://gist.github.com/peci1/2d7859857fdad73ee8443f5ecd5ee5a3
#!/usr/bin/env bash
# BSD 3-clause license, copyright Martin Pecka @ 2019
# This script outputs a command that will revert all packages from non-PPA versions to their latest PPA version.
# This may be handy i.e. for finding packages for which you installed a newer version from a .deb file, or after
# incompletely removing a PPA.
export LC_ALL=C
command=""
for p in `dpkg-query --showformat='${Package} ' -W`; do
if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
versions=$(apt-cache policy $p | tr "\n" "\r" | grep -Po '(?<=\r )[ *]{3} [^\r]+ [0-9]+\r\s+[0-9]+' | sed 's/ [0-9]\+\r\s\+\([0-9]\+\)/ \1/g' | tr "\r" "\n")
installable_versions=$(echo "${versions}" | grep -v " 100$")
version_to_install=$(echo "${installable_versions}" | head -n1 | grep -Po "\s+\K.*(?= [0-9]+$)")
if [[ ! -z "${version_to_install}" ]]; then
echo "${p}=${version_to_install}"
command="${command} ${p}=${version_to_install}"
else
echo "${p}: no PPA version"
fi
fi;
done
echo "To revert packages to their latest PPA version, call the following command as root. Please, carefully go through the list of changes apt-get will present to you!"
echo "apt-get install ${command}"