Comment restaurer tous les packages dans leurs versions officielles?


10

J'ai installé un certain nombre de packages à partir de PPA, et je voudrais revenir aux versions officielles maintenant. Bon nombre des AAE n'existent plus en /etc/apt/sources.list.d, donc ppa-purgene fonctionnera pas sur eux.

Quelle est la méthode la plus simple pour cela?

Réponses:


11

Eh bien, vous pouvez supprimer et réinstaller les packages

ppa-purgeest 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-purgepour 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/statusversion). Trouvez le périphérique externe le plus proche et exécutez:

sudo apt-get install <package>=<version>

Vous devrez peut-être ajouter un --reinstallaprès le installmais voyez comment cela se passe.


1
@Jokerdino C'est subtilement (mais surtout) différent. Cela ne trouve que les packages orphelins, c'est-à-dire les packages qui n'ont pas de référentiel d'installation viable actuel, de sorte qu'il n'affichera que les éléments que vous avez installés à partir d'un PPA qui n'existent pas ailleurs. Pour les choses où vous mettez à niveau les packages actuels (par exemple, si vous avez utilisé xorg-edgers pour mettre à niveau l'ensemble du système X), ces packages ne sont pas comptés.
Oli

Désolé. Je viens de le remarquer et j'ai supprimé mon commentaire (mais il était trop tard ..: /). Pour référence à d'autres qui pourraient vouloir suivre la conversation, j'ai lié à cette réponse .
jokerdino

Conformément à la déclaration officielle, ppa-purge a été supprimé d'ubuntu car, toutes ses fonctionnalités peuvent être effectuées par apt-get. Comment puis-je faire cela avec apt-get.
rafee

@rafee Pourquoi pensez-vous avoir ppa-purgeété supprimé? Il est dans les dépôts de Trusty ainsi que de toutes les autres versions prises en charge .
Oli

Il est supprimé de l'installation par défaut et nécessite une aptitude en tant que dépendance.
rafee

1

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}"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.