Existe uma distribuição que suporte a reversão de pacotes atualizados?

23

Existe uma ferramenta ou até mesmo uma distribuição inteira que suporte pacotes revertidos depois de uma atualização?

Como exemplo: eu atualizei os pacotes A, B e C. Depois de trabalhar com esses pacotes por vários dias, eu encontrei um bug em B que quebrava o negócio.

Enquanto eu enviava um relatório de bug, eu também precisava fazer o downgrade de B para a versão anterior para que eu pudesse terminar o que estava prestes a fazer. Enquanto isso, A é dependente de B, então ele precisa ser rebaixado também, mas C é independente de ambos, então ele pode permanecer na versão atual.

Existe uma ferramenta ou uma distribuição que suporte isso?

Eu sei que a maioria das distribuições tem um modo de fazer o downgrade de um pacote, mas isso é geralmente superficial ou impossível, porque o pacote anterior foi removido dos repositórios e em alguns casos (por exemplo, após atualizar o servidor X e o Mesa) realmente ... confuso.

    
por Steffen Winkler 10.03.2016 / 09:22

7 respostas

21

O NixOS suporta reversões de atualização, embora, pelo que entendi, não vá tão longe quanto você como: se você atualizar A, B e C em uma operação, você pode rolar toda a operação de volta, mas não apenas A e B. (Você deve ser capaz de rolar A, B e C de volta e, em seguida, atualizar C ... ) Isso faz sentido a partir de uma perspectiva transacional.

O Debian (em combinação com o arquivo de snapshot se você não tiver mais os pacotes antigos) permitirá que você faça o downgrade de B, e ferramentas como apt ou aptitude em muitos casos descobrirá que A também precisa ser rebaixado (uma vez que você os convenceu de que não deseja simplesmente atualizar B). Mas como você diz que tende a ser um pouco confuso, e os downgrades de pacotes não são suportados no Debian de qualquer maneira (o que significa que na maioria das vezes eles funcionam, mas se eles quebram não é um bug).

    
por 10.03.2016 / 09:41
15

Em qualquer distribuição baseada em yum (por exemplo, Red Hat EL , CentOS , etc), você pode:

  1. examine o histórico de alterações no sistema usando sudo yum history list

    Loaded plugins: fastestmirror
    ID     | Login user               | Date and time    | Action(s)      | Altered
    ------------------------------------------------------------------------------
        10 | Administrator <admin>    | 2016-03-08 09:08 | Install        |   11   
         9 | Administrator <admin>    | 2016-03-03 16:48 | Install        |    1   
         8 | Administrator <admin>    | 2016-03-03 16:09 | Install        |    5   
         7 | Administrator <admin>    | 2016-02-26 18:13 | Install        |    1   
         6 | Administrator <admin>    | 2016-02-26 15:12 | Install        |   27   
         5 | Administrator <admin>    | 2016-02-26 15:07 | Install        |    1   
         4 | Administrator <admin>    | 2016-02-26 15:05 | Install        |    3  <
         3 | Administrator <admin>    | 2016-02-26 15:03 | Install        |    1 > 
         2 | Administrator <admin>    | 2016-02-26 15:01 | I, U           |   49   
         1 | System <unset>           | 2016-02-26 14:38 | Install        |  296   
    history list
    
  2. verifique os detalhes usando sudo yum history info 10

  3. reverter para um ponto anterior no histórico, usando sudo yum history rollback 9

Aviso

Existem algumas advertências óbvias:

  1. Se o pacote antigo não estiver mais disponível, você está brindando (para citar @vonbrand),
  2. Se você instalar algo fora do yum, poderá quebrar o histórico.

No meu exemplo, que < na linha com ID 4 (na última coluna) significa que não posso reverter esse ponto.

sudo yum history rollback 2
Loaded plugins: fastestmirror
Transaction history is incomplete, before 4.
 You can use 'history rollback force', to try anyway.
Error: Failed history rollback, incomplete
    
por 10.03.2016 / 12:57
7

Em OpenSUSE você pode facilmente usar Snapper com o sistema de arquivos Btrfs .

Se você usar a configuração do sistema de arquivos padrão durante a instalação, será habilitado por padrão .

Quando o Snapper estiver ativado, ele será totalmente integrado com yast2 e zypper . Ele criará um instantâneo do sistema de arquivos toda vez que você instalar ou atualizar algo (ou criar um usuário, etc.).

Para reverter o sistema para uma condição anterior, você só precisa executar yast2 snapper .

    
por 10.03.2016 / 13:21
6

O AIX é muito bom para reverter as atualizações. Bem - nós estamos no site Unix / Linux e você nunca especificou que você quer Linux:)

Cada única atualização do AIX salva todos os arquivos modificados em um subdiretório separado dentro do sistema de arquivos / var. A atualização pode ser revertida com um comando nativo simples, e o reverter não precisa que a rede esteja ativa, não precisa de nenhuma mídia / pacotes, não não reinstala nada e não depende de nenhuma tecnologia de snapshot - o efeito é simplesmente que os arquivos reaparecem como eram antes da atualização.

Como bônus, existe um comando nativo trivial mksysb para criar um backup de sistema independente inicializável. O arquivo que pode ser inicializado em um sistema completamente disfuncional que não inicializa devido a algum mau funcionamento / corrupção.

E é tudo tecnologia comprovada com décadas de história:)

    
por 10.03.2016 / 19:21
5

No Fedora (e tenho certeza também em outras distribuições) você pode pedir para voltar a uma versão anterior:

dnf downgrade <packages>

leva você até a última versão dos pacotes, e você pode pedir um específico por:

dnf downgrade <package>.<version>

Isso só funciona se o (s) pacote (s) ainda estiverem disponíveis nos repositórios. A funcionalidade não é desconhecida, por qualquer meio. Ele tem suas dificuldades, se parte da atualização foi para alterar as configurações, a reversão não será necessariamente para a versão passada exata.

    
por 10.03.2016 / 11:12
2

O Arch Linux também suporta o downgrade de pacotes e o kernel. Você também pode instalar as ferramentas downgrader e downgrade para automatizar o processo. A solução btrfs também funciona, eu usei para fazer uma reversão manual antes.

Como posso reverter meu sistema:

sudo -i
mount /dev/sda3 /mnt/hd #mount the top btrfs subvolume
ls #find the version you want
mv @ @-old #move the '/' subvolume (I named mine '@')
btrfs sub snap @-<date> @ #replace @ with the backup from <date>
sync
reboot #the changes will take effect once the system restarts

Um benefício do btrfs é que você pode usar subvolumes e "partições" dinâmicas. Por exemplo, eu tenho um subvolume para / (chamado @), / tmp (@tmp) e / home (@home). É então fácil fazer o backup e reverter qualquer um deles. Eu tenho / tmp em um subvolume separado porque fazer backup com o resto do sistema parece inútil, já que ele é apagado em quase todos os reinícios.

    
por 14.03.2016 / 22:59
2

Eu uso o Arch Linux e ele armazena todos os pacotes baixados para /var/cache/pacman/pkg/ para que você possa fazer downgrade de qualquer pacote a qualquer momento (você não pode inicializar, usar um usb ao vivo). De Arch Wiki :

pacman -U <file_name_of_the_package>

Para evitar que o pacote seja atualizado, inclua o nome do pacote em /etc/pacman.conf , como:

IgnorePkg=linux

Para economizar espaço, você pode limpar a pasta de cache com:

pacman -Sc

Que excluirá todos os pacotes mais antigos e manterá o mais novo, ou usará -Scc para remover todos.

    
por 15.03.2016 / 00:35