Transações e reversão com o Debian

5

Não sei se é de conhecimento comum, mas o RPM tem suporte para a reversão de uma instalação anterior depois de executar uma atualização (que quebra algo, por exemplo). Você pode passar rpm o sinalizador --repackage para gerar um monte de RPMs de arquivos atualmente instalados que isso vai mudar. Você pode, então, dizer " rpm -Uvh --rollback '2 horas atrás' " e reverter sua máquina sem esforço como há 2 horas.

Minha pergunta é: alguém encontrou algo semelhante em distros baseadas no Debian?

    
por Coops 07.06.2009 / 12:19

3 respostas

6

Não acredito que exista essa opção com aptitude ou apt-get . No entanto, aptitude mantém um log excelente e claro em / var / log / aptitude . Você pode usar isso para tentar rollbacks.

Quão bem isso irá depender da situação exata. Se você quer apenas remover alguns pacotes que você instalou, deve ser trivial. Mas, se você fez o upgrade (seja porque seguiu os testes ou instável ou porque instalou uma atualização de segurança ou uma atualização de lançamento), as coisas são um pouco mais complicadas. Você pode verificar se ainda tem o .deb mais antigo em seu cache, ou pode visitar o snapshot do Debian .

Se você não usa aptitude , pode dar uma olhada no log de dpkg (em /var/log/dpkg.log ), mas acho que é muito menos fácil trabalhar com ele.

Editar Agora que vejo o artigo, há algo que é um pouco semelhante. Você pode obter o estado de seus pacotes fazendo esta sequência. Primeiro, obtenha uma lista do estado atual do pacote:

dpkg --get-selections "*" > my_packages-datestamp

Em seguida, você poderá reverter usando essa lista de pacotes:

dpkg --set-selections < my_packages-datestamp
apt-get -u dselect-upgrade

Eu usei esse método para reinstalar e ter exatamente o conjunto atual de pacotes na máquina e funcionou bem. Novamente, no entanto, o quão bem ele funciona dependerá de quais pacotes da lista de pacotes anterior estão disponíveis para você - em seu cache ou em seus repositórios.

    
por 07.06.2009 / 12:40
1

Não existe essa opção no dpkg ou em qualquer ferramenta relacionada ao apt e há uma razão simples para explicar isso. Instalar um pacote não é apenas descompactar arquivos, mas também configurá-los, e isso é feito executando o script de pré / pós instalação / remoção associado a cada pacote.

Restaurar arquivos antigos é fácil, mas desfazer o que os scripts postinst fizeram é muito mais difícil. Em teoria, o dpkg suporta o downgrade porque fornece todas as informações necessárias aos scripts para que eles possam detectar quando são rebaixados, mas na prática muito poucos implementos de pacotes que suportam corretamente (e o Debian não suporta downgrades oficialmente).

Note, entretanto, que para muitos pacotes simples que não possuem script postinst, o downgrade funciona muito bem. apt-get e aptitude podem ser usados para forçar a instalação de versões mais antigas com sintaxes como esta:

aptitude install foo/testing # Downgrade a package to testing if you run unstable
aptitude install foo=1.2-3 # Downgrade to 1.2-3 if you run a higher version

Portanto, se você ficar com uma nota de todos os pacotes instalados com a versão deles, na maioria dos casos você pode restaurar um estado anterior que funcione. Você também pode descobrir as versões instaladas anteriormente analisando o log /var/log/dpkg.log do dpkg (ou o log do aptitude se você usa apenas aptitude e não apt-get ).

    
por 07.06.2009 / 15:51
0

Infelizmente, isso não é algo que o dpkg ou o apt seja capaz de fazer. Pacotes Debian não são feitos para serem rebaixados e não são suportados ou testados. Certamente não há suporte para snapshots.

No entanto, tendo dito isso, você pode fazer isso manualmente. Se você olhar em /var/log/dpkg.log, você encontrará o log das operações que aconteceram. É um pouco detalhado, mas você deve ser capaz de obter a lista de versões anteriores dos pacotes que foram instalados. Supondo que eles ainda estejam disponíveis nos repositórios configurados em seu sources.list, você deve ser capaz de fazer:

# apt-get install foo=1.2 bar=3.4-5

Se eles não estiverem disponíveis no repositório, você ainda poderá encontrá-los em / var / cache / apt / archives / ou poderá encontrá-los disponíveis para download em algum lugar, talvez em outro repositório. Depois de ter sua lista de pacotes, você pode executar:

# dpkg -i foo_1.2_amd64.deb bar_3.4-5_all.deb

Você deve então descobrir que está de volta às versões instaladas anteriormente. Você pode descobrir que algumas coisas não são as mesmas, como configuração.

Existe um método para obter instantâneos usando o LVM, mas isso não é particularmente rápido ou fácil de ativar em uma instalação existente. Você provavelmente teria que reinstalar o sistema e configurar suas unidades para usar o LVM. Você pode então criar um instantâneo do LVM, fazer o upgrade, testá-lo e, em seguida, remover o instantâneo, se estiver satisfeito, ou reverter para esse instantâneo, se não estiver. Obviamente, qualquer dado escrito desde que o instantâneo será removido, assim como os pacotes.

    
por 07.06.2009 / 12:50