web-dev-qa-db-fra.com

Comment puis-je rétablir tous les packages dans leurs versions officielles?

J'ai installé un certain nombre de paquets à partir de PPA et j'aimerais maintenant revenir aux versions officielles. Beaucoup de PPA n'existent plus dans /etc/apt/sources.list.d, donc ppa-purge ne fonctionnera pas avec eux.

Quel est le moyen le plus direct pour cela?

10
eudoxos

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

ppa-purge est probablement toujours votre meilleur choix pour une évasion propre. Il suffit de ré-ajouter le PPA d'où vient le paquet, puis d'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 envisagerait de le faire.

Si vous pensez que cette méthode est trop douce, je viens d'écrire quelques bash- porn pour aider à identifier les versions de paquet dont la source d'installation n'existe maintenant que localement dans /var/lib/dpkg/status. Ce n'est pas la même chose que les paquets "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 suis pas sûr que ce soit encore parfait, mais essayez-le. Notez que cela va seulement imprimer les noms des paquets. Vous devrez manuellement désinstaller/réinstaller chaque paquet.

Pour ce faire, regardez d’abord ce qui est disponible pour ce paquet en exécutant apt-cache policy <package> et vous verrez une liste de ses versions (y compris la version /var/lib/dpkg/status). 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.

11
Oli

J'ai écrit un script plus complet qui reconnaît les packages dont la version actuelle ne provient pas d'un PPA, et ils ont une version alternative disponible pour le PPA. Une fois qu'il est exécuté, il imprime une commande prête à l'emploi qui rétrogradera ces packages vers leurs versions PPA.

https://Gist.github.com/peci1/2d7859857fdad73ee8443f5ecd5ee5a

#!/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}"
0
Martin Pecka