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

23

Existe uma ferramenta ou mesmo uma distribuição inteira que suporte a reversão de pacotes alterados após uma atualização?

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

Enquanto eu enviava um relatório de erros, também precisava fazer o downgrade de B para a versão anterior para poder concluir o que estava prestes a fazer. Enquanto isso, A é dependente de B, portanto, também precisa ser desclassificado, mas C é independente de ambos, para que possa permanecer na versão atual.

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

Eu sei que a maioria das distribuições tem uma maneira de fazer o downgrade de um pacote, mas isso geralmente é meio superficial ou nem mesmo possível porque o pacote anterior foi removido dos repositórios e, em alguns casos (por exemplo, após a atualização do servidor X e do Mesa), fica realmente .. . bagunçado.

Steffen Winkler
fonte
3
O que deve ser observado: se a alteração da versão do pacote for menor, as respostas abaixo podem ser aplicadas; no entanto, observe que alterações maiores no pacote podem atualizar os dados no disco que não funcionarão corretamente posteriormente na versão mais antiga. Por exemplo, a atualização principal do mysql-server (ou joomla) adiciona e modifica campos e atualiza tabelas SQL, a atualização inn2 pode alterar o tipo de banco de dados ou alguma atualização do kernel distro pode atualizar o sistema de arquivos ext3 para ext4 ou alguma atualização do pacote converterá os arquivos de configuração, etc. A única proteção contra essas alterações "irrecuperáveis" são as capturas instantâneas de LVM / btrfs / etc (ou backup / restauração muito mais lenta).
Matija Nalis 11/03/16
@MatijaNalis +1 por mencionar isso!
Steffen Winkler

Respostas:

21

O NixOS suporta rollbacks de atualização, embora, como eu o entenda, não vá tão longe quanto você gostaria: se você atualizar A, B e C em uma operação, poderá reverter toda a operação, mas não apenas A e B. (Você deve ser capaz de reverter A, B e C e depois atualizar C ...) Isso faz sentido de uma perspectiva transacional.

O Debian (em combinação com o repositório de instantâneos, se você não tiver mais os pacotes antigos) permitirá que você faça o downgrade de B, e ferramentas como aptou aptitudeem muitos casos descobrirão que A também precisa ser rebaixado (depois de convencê-los de que você não queira simplesmente atualizar B). Mas como você diz isso tende a ser um pouco confuso, e as atualizações de pacotes não são suportadas no Debian de qualquer maneira (o que significa que na maioria das vezes elas funcionam, mas se elas quebram, não é um bug).

Stephen Kitt
fonte
1
isso parece interessante! A comunidade parece ativa e saudável. Definitivamente vou tentar, obrigado! Se na sexta-feira à noite não houver resposta melhor / diferente, marcarei sua resposta.
Steffen Winkler
As reversões no NixOS são impressionantes, mas o poder real vem da abordagem declarativa: A descrição dos pacotes (e do sistema) pode ser obtida de um repositório git, portanto, você pode gerenciar seu sistema da mesma maneira que gerencia um projeto de software, incluindo ramificações e fusões etc. (e devido a atualizações atômicas e pureza você nunca quebrar coisas)
Daniel Jour
O gerenciador de pacotes Nix também pode ser executado em outras distribuições Linux, lado a lado com seu gerenciador de pacotes 'nativo'. Também roda no OSX, e vi alegações de que pode funcionar no Windows. Você também pode dizer ao Nix para usar versões 'nativas' de alguns pacotes, em vez de instalar suas próprias duplicatas, embora você perca algumas de suas garantias dessa maneira (por exemplo, pode não perceber que você trocou alguma dependência).
Warbo 10/03/16
apenas para sua informação, eu consegui instalar o NixOS no meu laptop (a imagem do KDE4 me deu um Kernel Panic, mas a imagem pequena (~ 390 MB) foi inicializada corretamente.Para alguém que só instalou distribuições baseadas no Debian, isso foi bastante interessante / divertido. , Ainda não entendo algumas coisas sobre o gerenciador de pacotes, especialmente quando se trata de ambientes de desktop. Instalei o gdm / gnome-shell, mas ele não funcionaria. Ativei o gnome3 / gdm no arquivo configuration.nix e na reconstrução -lo, ambos os pacotes e suas dependências foram transferidas novamente ele fez um trabalho após uma reinicialização, mas eu não entendo por que..
Steffen Winkler
@SteffenWinkler Ao usar o NixOS, você normalmente não instala itens nix-env, mas especifica configuration.nixe depois executa nixos-rebuild switch. Isso tem o benefício de que toda a configuração do sistema está em um único local e é fácil fazer backup da configuração do sistema inteiro (basta fazer backup do configuration.nixarquivo).
Pauan 29/11
15

Em qualquer yumdistribuição baseada (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. reversão para um ponto anterior na história, usando sudo yum history rollback 9

Atenção

Existem algumas ressalvas óbvias:

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

No meu exemplo, isso <na linha com ID 4(na última coluna) significa que não posso reverter além desse 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
andcoz
fonte
3
recurso interessante! Mas devido ao 'brinde' não se encaixa na minha conta.
Steffen Winkler
AFAIK, isso só é possível no RHEL / CentOS 6 ou superior. Se você ainda está usando o RHEL / CentOS 5, é SOL.
Curinga
E, a propósito, em um ambiente corporativo com --enablereporepositórios gerenciados, essa abordagem é bastante viável, pois você sempre tem os pacotes antigos disponíveis, mesmo que precise usar um sinalizador para ativar um repositório antigo que não está em uso no caso de downgrade.
Wildcard
Qual é o benefício de reverter versus apenas instalar a versão mais antiga novamente?
Bratchley 11/03/16
@Bratchley automation! yum simplesmente cuida de manter a lista de pacotes e versões instalada e verifica dependências ao reinstalar versões antigas. Obviamente, você pode fazer isso manualmente .
22816 Andcoz
7

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

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

Uma vez ativado, o Snapper fica totalmente integrado com yast2e 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.

insira a descrição da imagem aqui

andcoz
fonte
ferramenta interessante de fato. Embora eu goste bastante do ext4. Vai pesquisar isso! Estou correto ao assumir que o Snapper não está 'vinculado' ao OpenSUSE, mas ao btrfs?
Steffen Winkler
O Snapper é desenvolvido pelo SUSE. É uma coleção de ferramentas que automatizam a criação dos instantâneos Brtfs em "eventos". Suponho que você possa usá-lo em outras distribuições, mas não tenho certeza. Em qualquer caso, você pode criar manualmente os instantâneos Brtfs em qualquer distribuição.
andcoz
3
Lembre-se de que, se o seu volume contiver dados, não apenas binários e scripts, a reversão de um instantâneo também reverterá seus próprios dados. Essa opção parece arriscada, mais adequada para aqueles que realmente conhecem o layout do sistema de arquivos. Para mim, os instantâneos sempre foram para backups consistentes, replicação e situações de recuperação total.
jimp
1
Observe também que muitos pacotes têm arquivos e / ou diretórios, /varportanto, ele deve ser revertido, /mesmo que seja um fs ou subvolume separado. É muito melhor testar minuciosamente uma atualização antes de aplicá-la aos servidores de produção do que confiar em recursos como a reversão da atualização do sistema operacional (o que é trivialmente fácil de ser feito de maneira semi-árdua, mas é um problema extremamente difícil de resolver corretamente ).
11556
1
@Jimp Um bom conselho. De qualquer forma, o OpenSuSE não habilita o snapper, a menos que /homeesteja em um sistema de arquivos separado sem captura de imagem .
andcoz
6

O AIX é muito bom em reverter atualizações. Bem - estamos no site Unix / Linux e você nunca especificou que deseja Linux :)

Cada atualização única 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 simples comando nativo, e a reversão não precisa que a rede esteja ativa, não precisa de mídia / pacotes, não reinstala nada e não depende de nenhum tecnologia de instantâneo - o efeito é simplesmente que os arquivos reaparecem como eram antes da atualização.

Como um bônus, há um comando nativo trivial mksysbpara criar um backup do sistema independente inicializável. O arquivo que pode ser simplesmente 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 :)

kubanczyk
fonte
Você costuma ter problemas com os programas restaurados dessa forma em estado inconsistente e reversão (ou seja, um banco de dados cujo mecanismo de armazenamento foi alterado ou um serviço que mudou para um novo formato de arquivo de configuração) ou existem boas maneiras de trabalhar aquele?
Josh Rumbut 10/03
1
Esse é o modelo que usei quando construí um sistema rudimentar de gerenciamento de pacotes para software que tradicionalmente era distribuído em tarballs compactados / compactados com gzip. Sempre que instalava as atualizações, ele criava um "pacote de reversão" de tudo que deveria ser modificado. Esse pacote de reversão pode então ser usado para reverter, desde que nenhum outro pacote de atualização tenha sido aplicado nesse ínterim. Eu sempre me perguntei se os gerenciadores de pacotes adequados poderiam fazer isso, mas dadas as restrições de reverter apenas na ordem inversa ... talvez devêssemos usar o git.
Monty mais dura
droga. Eu deveria ter especificado que eu quis dizer distribuições GNU / Linux. Mas, curiosamente, o AIX parece ser capaz de executar os 'programas' do GNU / Linux atualmente, acho que vou dar uma olhada mais de perto.
Steffen Winkler
5

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

dnf downgrade <packages>

fornece a penúltima versão dos pacotes e você pode solicitar uma versão específica:

dnf downgrade <package>.<version>

Isso funciona apenas se os pacotes ainda estiverem disponíveis nos repositórios. A funcionalidade não é inédita, por qualquer meio. Ele tem seus problemas, se parte da atualização mudar as configurações, a reversão não será necessariamente a versão anterior exata.

vonbrand
fonte
Você também pode usar dnf histórico de desfazer #thing para desfazer
Clearer
This only works if the package(s) are still available in the repositories. Sim, esse é exatamente o problema. Estou meio surpreso que não pareça haver uma solução 'mais ampla' para isso, especialmente com a quantidade de distribuições de lançamento contínuo. No momento, parece que o NixOS é minha melhor opção, ou eu precisaria de algum tipo de ferramenta de criação de imagens do sistema que funcione apenas com diferenças e possa restaurar o sistema para um ponto específico no tempo nas últimas 20 (?) Atualizações.
Steffen Winkler
@ SteffenWinkler, se o pacote antigo não estiver mais disponível, você estará brindando. Obviamente. A menos que você tenha algum tipo de backup local.
vonbrand
2
@MTilsted, porque já é velho demais? Repositórios não contêm todas as versões desde o início dos tempos.
vonbrand
1
No dnf.conf (o mesmo que yum.conf) há keepcache = true Pacotes antigos disponíveis, pois o cache lond não é limpo manualmente. Mas foi "inchar" o cache do pacote.
MMV-ru
2

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

Como 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). É fácil fazer backup e reverter qualquer uma dessas opções. Eu tenho / tmp em um subvolume separado porque fazer backup com o resto do sistema parece inútil, pois é apagado em quase todas as reinicializações.

Caleb Reister
fonte
Eu segui um link no wiki e cheguei aqui . Isso parece bem legal e, ao verificar o repositório, existem arquivos desde 2013! Por que usar o modo btrfs quando isso existe? Por causa dos arquivos que são 'atualizados'? Ou tem alguma outra razão?
Steffen Winkler
Agora mudei permanentemente para o Arch Linux depois de fazer uma breve visita ao NixOS. Ele (Arch Linux) não é tão instável quanto eu sempre pensei que seria e tem uma comunidade saudável.
Steffen Winkler
@SteffenWinkler Isso está correto. Além disso, as opções de downgrade do Arch não são "oficialmente" suportadas e o downgrade provavelmente ignorará as dependências (que podem ficar bastante confusas se algo der errado).
Caleb Reister
2

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

pacman -U <file_name_of_the_package>

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

IgnorePkg=linux

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

pacman -Sc

O que excluirá todos os pacotes antigos e manterá o mais novo, ou será usado -Sccpara remover todos.

Alko
fonte
Note-se que este (ignorando pacotes) equivale a uma atualização parcial, o que é incompatível ...
jasonwryan
Eu segui um link no wiki e cheguei aqui . Isso parece bem legal e, ao verificar o repositório, existem arquivos desde 2013! Por que usar o modo btrfs quando isso existe? Por causa dos arquivos que são 'atualizados'? Ou tem alguma outra razão?
Steffen Winkler