Posso reverter uma atualização do apt-get se algo der errado?

40

Existe uma maneira, antes de iniciar um aptitude upgrade ou apt-get upgrade , de configurar algo para que você possa "facilmente" reverter o sistema para o estado "apt" que estava antes da atualização real, se algo der errado? ?

Por exemplo, reinstale a versão antiga dos pacotes que foram atualizados durante o processo.

(EDIT) Algumas dicas : Eu sei que o etckeeper por exemplo usa alguns gancho em apt para que seja notificado sempre que apt instale ou desinstale um pacote. Eu suponho que poderia haver algum tipo de script que pudesse salvar a lista de pacotes recém-instalados e seu número de versão anterior para poder reinstalá-los do apt cache ( /var/cache/apt/archives ). Há também checkinstall que pode acompanhar as modificações dos arquivos ...

Algum detalhe sobre como conseguir isso corretamente?

    
por Totor 11.06.2013 / 20:55

3 respostas

35

Eu só agora tinha que descobrir uma resposta para isso, porque o último apt-get upgrade em um servidor Debian tornou impossível inicializar o kernel mais recente além de um busybox, deixando de montar a partição zfs root. Pelo menos um kernel antigo ainda pode ser inicializado, mas era incompatível com outro software. Assim, a necessidade de uma reversão.

A resposta curta - você pode usar o seguinte comando: $ apt-get -s install $(apt-history rollback | tr '\n' ' ')

se ele fizer o que você deseja, remova o -s e execute-o novamente. Aqui estão os passos que dei para que isso funcionasse corretamente:

  1. Eu temporariamente reduzi meu /var/log/dpkg.log para deixar apenas a atualização de hoje

  2. Eu instalei o pequeno script apt-history de aqui em ~ / .bashrc e correu

    $ apt-history rollback > rollback.txt
    ...
    libzfs2:amd64=0.6.4-4~wheezy 
    zfsutils:amd64=0.6.4-4~wheezy 
    zfs-initramfs:amd64=0.6.4-4~wheezy
    ...
    
  3. Isso fornece uma lista bem formatada de pacotes versionados para serem revertidos, alimentando-os em apt-get install . Apare essa lista conforme necessário em um editor de texto e execute (com -s para o dry-run primeiro):

    $ apt-get -s install $(cat rollback.txt | tr '\n' ' ')
    $ apt-get install $(cat rollback.txt | tr '\n' ' ')
    

Apt avisa sobre os downgrades esperados. Para evitar que essa reversão seja sobregravada pela próxima atualização, os pacotes precisarão ser fixados, até que o problema original seja resolvido. Por exemplo com: apt-mark hold zfsutils libzfs2 ...

function apt-history(){
    case "$1" in
      install)
            cat /var/log/dpkg.log | grep 'install '
            ;;
      upgrade|remove)
            cat /var/log/dpkg.log | grep $1
            ;;
      rollback)
            cat /var/log/dpkg.log | grep upgrade | \
                grep "$2" -A10000000 | \
                grep "$3" -B10000000 | \
                awk '{print $4"="$5}'
            ;;
      *)
            cat /var/log/dpkg.log
            ;;
    esac
}
    
por 16.10.2015 / 20:56
6

Os arquivos de log /var/log/apt/history.log e /var/log/apt/term.log são os mais próximos disponíveis para sua descrição:

I suppose there could be some kind of script that could save the list of newly installed package and their previous version number

history.log fornece uma lista resumida de cada ação que apt toma no seguinte formato:

Start-Date: 2013-06-21  16:05:05
Commandline: apt-get install rdiff-backup
Install: python-pyxattr:i386 (0.5.0-3, automatic), rdiff-backup:i386 (1.2.8-6), python-pylibacl:i386 (0.5.0-3, automatic
), librsync1:i386 (0.9.7-7, automatic)
End-Date: 2013-06-21  16:05:42

Em particular, ele fornece uma lista de pacotes recém-instalados ou de pacotes removidos. Além disso, term.log mostra o que realmente apareceu no terminal durante a ação, para mostrar as versões antigas e novas dos pacotes. Uma amostra aleatória do meu history.log :

Preparing to replace gnupg 1.4.10-4 (using .../gnupg_1.4.10-4+squeeze1_i386.deb) ...
Unpacking replacement gnupg ...
Processing triggers for install-info ...
Processing triggers for man-db ...
Processing triggers for doc-base ...
Processing 1 changed doc-base file(s)...
Registering documents with scrollkeeper...
Setting up gnupg (1.4.10-4+squeeze1) 

A tentativa de reverter apt automaticamente não é recomendada, mas se você usar os registros, deverá ser possível fazê-lo manualmente, a menos que a ação com falha tenha interrompido algo que interfere nas ações de apt , por exemplo um banco de dados do dpkg inconsistente. Nesse caso, você terá que corrigir o problema antes de continuar.

    
por 22.06.2013 / 00:15
3

Não, o apt não facilita isso.

A melhor opção é algum tipo de instantâneo. As capturas de tela do sistema de arquivos por meio de lvm / zfs / btrfs ou instantâneos da instância, se você estiver usando uma VM de algum tipo.

A única outra opção é fazer um inventário de pacotes instalados (dpkg -l) antes e depois. Se você quiser "reverter", terá que instalar explicitamente a versão anterior.

    
por 11.06.2013 / 21:50