Como reverto todos os pacotes para suas versões oficiais?

10

Instalei vários pacotes de PPAs e gostaria de reverter para as versões oficiais agora. Muitos dos PPAs não existem mais /etc/apt/sources.list.d, portanto ppa-purgenão funcionarão neles.

Qual é o caminho mais direto para isso?

eudoxos
fonte

Respostas:

11

Bem, você pode remover e reinstalar os pacotes

ppa-purgeprovavelmente ainda é sua melhor aposta para uma fuga limpa. Apenas adicionando novamente o PPA do qual o pacote veio e usando ppa-purgepara matá-lo. Não tenho certeza de quantos PPAs você instalou, mas se for menor que 10, eu estaria tentando fazer isso.

Se você acha que esse método é muito suave, acabei de escrever bash-porn para ajudar a identificar as versões do pacote cuja origem da instalação agora existe apenas localmente /var/lib/dpkg/status. Não é o mesmo que pacotes "órfãos".

for p in `dpkg-query --showformat='${Package} ' -W`; do
    if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
        echo $p;
    fi;
done

Ainda não tenho certeza se isso é perfeito, mas experimente. Observe que apenas imprimirá os nomes dos pacotes. Você precisará desinstalar / reinstalar manualmente cada pacote.

Para fazer isso, apt-cache policy <package>verifique primeiro o que está disponível para esse pacote executando e você verá uma lista de versões do pacote (incluindo a /var/lib/dpkg/statusversão). Encontre o externo mais próximo e execute:

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

Pode ser necessário adicionar um --reinstallapós o installmas veja como ele funciona.

Oli
fonte
1
@Jokerdino Isso é sutilmente (mas importante) diferente. Isso só encontra pacotes órfãos, ou seja, pacotes que não possuem nenhum repositório de instalação viável atualmente, portanto, ele mostra apenas as coisas que você instalou de um PPA que não existe em nenhum outro lugar. Nas coisas em que você atualiza os pacotes atuais (por exemplo, se você usou o xorg-edgers para atualizar todo o sistema X), esses pacotes não são contados.
Oli
Desculpe. Acabei de perceber isso e removi meu comentário (mas era tarde demais ..: /). Para referência a outras pessoas que podem querer acompanhar a conversa, vinculei a esta resposta .
jokerdino
De acordo com a declaração oficial, o ppa-purge foi removido do ubuntu porque, toda a sua funcionalidade pode ser feita pelo apt-get. Como posso fazer isso com o apt-get.
Rafee
@rafee Por que você acha que ppa-purgefoi removido? Está nos repositórios para o Trusty e em todos os outros lançamentos suportados .
Oli
É removido da instalação padrão e requer aptidão como dependência.
Rafee
1

Eu escrevi um script mais completo que reconhecerá pacotes cuja versão atual não é de um PPA e eles têm uma versão alternativa disponível para PPA. Após a execução, ele imprime um comando pronto para executar que fará o downgrade desses pacotes para suas versões do 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}"
Martin Pecka
fonte