Existe alguma maneira de reverter a atualização mais recente?

55

Isso aconteceu comigo várias vezes nos últimos 5 anos: uma atualização quebrou meu sistema. Cada vez que acabo com essa situação, tenho que reinstalar todo o sistema, o que é realmente irritante.

Existe alguma maneira de reverter a atualização mais recente para poder ter um sistema funcional sem reinstalar? Caso contrário, qual é a melhor maneira de sugerir isso como uma idéia de prioridade máxima?

Eu li que essa idéia foi descrita em brainstorm.ubuntu.com, mas parece que está morta ... e os fóruns estão cheios de exemplos de atualizações que quebram as coisas, é por isso que sinto que algo precisa ser feito sobre esse tópico. Obrigado!

Marcelo Ruiz
fonte
17
Estou entrando apenas para votar nesta pergunta. A falta de uma ferramenta de reversão coerente em um SO Desktop 2011 é patética. O Windows tinha Restauração do Sistema há mais de 5 anos , isso está muito longe da curva. Os usuários foram treinados ( corretamente ) para instalar atualizações de segurança, mas somos constantemente punidos por fazer isso por falhas nos drivers.
Gates VP
@GatesVP Este ponto que você fez há mais de 8 anos ainda está atormentando o Ubuntu (não pode falar por outras distros, mas provavelmente não são melhores). Acho isso totalmente frustrante. Alguém deve ter suas palavras impressas em fonte de 64 pt e ficar na frente de todos os novatos prestes a mergulhar no mundo do linux.
horaceT 20/06
Eu tenho que concordar que uma imagem de backup é o caminho a percorrer. Não se afirma se este é um sistema de 'produção'. Se é e é possível ter um sistema de teste de clone, o backup de imagem é o caminho a seguir. Se apenas uma atualização de aplicativo, a solução mais rápida é fazer o downgrade com ou sem a opção 'force'.
JHPArizona 10/07

Respostas:

14

Em sinápticos, você pode pelo menos controlar quais foram as atualizações recentes: menu Arquivo, histórico.

(se o sináptico for inicializável, com o sistema quebrado). Portanto, com um comando apt -...-, para reverter a atualização, não deve ser muito difícil.

Eu acho que também existe um comando histórico para a linha de comando.

Talvez você precise excluir o pacote inteiro e instalar uma versão específica. No entanto, é possível instalar uma versão específica, mas nunca tive a necessidade de fazê-lo.

update: Veja como fazer com o apt:

Encontre pacotes instalados nas últimas 3x24h:

find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' 

Com a política do apt-cache, você vê as versões disponíveis de um programa:

sudo apt-cache policy PROGRAM:
 *** 3.6.7+build3+nobinonly-0ubuntu0.10.04.1 0
        500 http://de.archive.ubuntu.com/ubuntu/ lucid-updates/main Packages
        500 http://security.ubuntu.com/ubuntu/ lucid-security/main Packages
        100 /var/lib/dpkg/status
     3.6.3+nobinonly-0ubuntu4 0

aqui 3.6.7 e 3.6.3. Agora você sabe qual versão anterior pode ser instalada (geralmente não o antecessor imediato):

sudo apt-get install PROGRAM=3.6.3

Então você precisa fazer um apt-pinning, para impedir futuras atualizações:

Crie um novo arquivo em /etc/apt/preferences.d/ (se> = 10.4) com o nome do seu programa,

Package: program
Pin: version 3.6.3*
Pin-Priority: 1000
Usuário desconhecido
fonte
Obrigado a todos pela informação. Mal posso esperar pelo ubuntu para gerenciar zfs imediatamente!
Marcelo Ruiz
Sinto muito - o que isso tem a ver com o zfs? O zfs gerencia reversões? Ou as atualizações quebram o zfs-install? Ou o zfs-update quebra alguma coisa?
usuário desconhecido
E se a versão estiver de 1.0.2g-1ubuntu4.12acordo com o apt? Ele se recusa a aceitar isso como um número de versão. Eu quero fazer o downgrade do formulário 1.0.2g-1ubuntu4.13para1.0.2g-1ubuntu4.12
Csaba Toth
obrigado, suuuuuuuuuuuuuch uma dor embora. minha última atualização, que destruiu totalmente a entrada controlador tem exatamente 80 pacotes listados em find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' neste momento é menos de um aborrecimento para reinstalar o sistema inteiro
tatsu
7

Principalmente, você pode consultar as /var/log/apt/history.logalterações feitas pelo apt / synaptic. É apenas um pouco forense e um monte de recortar / colar para fazer.

Volte para a data em que seu sistema ainda estava funcionando bem.

Primeiro, pegue todos os pacotes que foram instalados desde então e junte-os em um script de desinstalação. Quando o script terminar, comece a adicionar novamente todos os pacotes removidos.

Um exemplo de caso:
logfile:

Start-Date: 2014-05-28  21:28:11
Commandline: synaptic
Install: libfglrx-amdxvba1:amd64 (13.12-3kali1, automatic), libgl1-fglrx-glx:amd64 (13.12-3kali1), glx-alternative-fglrx:amd64 (0.4.1kali1, automatic), libfglrx:amd64 (13.12-3kali1, au$
Remove: fglrx-glx-ia32:amd64 (12-6+point-3)
End-Date: 2014-05-28  21:28:27

você pode ver,

libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 & libfglrx:amd64 

foi instalado pela Synaptic. como libfglrx:amd64foi removido pelo Synaptic.

Fomos na ordem inversa, então primeiro removemos os pacotes recém-instalados e adicionamos novamente os pacotes que foram removidos.

Um comando de trabalho para este caso pode se parecer com:

sudo apt-get remove -y libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 libfglrx:amd64 && sudo apt-get install -y libfglrx:amd64

Talvez não seja a melhor ideia ficar sem a -yopção - ter mais controle sobre o processo (para evitar dependências quebradas). A maioria de vocês não quebraria o dedo enquanto fazia algumas verificações "y"

Na maioria dos casos, uma reversão é possível dessa maneira, mas se as dependências já estiverem quebradas - você pode encontrar um problema ainda maior.

Matt
fonte
6

Na maioria das vezes, se o seu sistema estiver danificado, é um problema do kernel .

Simplesmente inicialize um kernel antigo e reinstale os pacotes mais recentes (especialmente os pacotes do kernel) que provavelmente não foram atualizados corretamente. Algumas notas:

/var/log/dpkg.log

é seu amigo para verificar qual é a lista dos pacotes atualizados / instalados recentemente

sudo apt-get -f install

pode na maioria das vezes corrigir pacotes semi-instalados

Giordano Battilana
fonte
4

Infelizmente ainda não há como fazer isso. O snapshot / rollback no nível do sistema de arquivos é um dos recursos dos próximos btrfs, mas ainda há maneiras de se tornar um recurso completo e estável o suficiente para ser usado como o sistema de arquivos padrão.

psusi
fonte
11
Para capturas instantâneas do sistema de arquivos, você poderia usar o LVM em vez disso, com ext3 ou ext4.
Flimm
@Flimm, agora você pode, embora não funcione muito bem e exija que você configure o LVM ao instalar.
Psd #
3

Ao fazer uma grande atualização, clono o disco usando o Clonezilla . Grave-o em um CD, tenha um HDD (externo) sobressalente disponível e siga as instruções no Clonezilla LiveCD. Escolha o partition-imagemodo, isso usa menos espaço.

Se você acha que quebrou o sistema (ou deseja reverter quaisquer alterações), basta inicializar no Clonezilla LiveCD, selecione a imagem no seu disco rígido (externo) e restaure-o. Como essas imagens são uma cópia literal de todos os bits do seu disco, isso pode levar algumas horas, dependendo da velocidade do disco e da velocidade da conexão (a conexão entre os dados, geralmente um HDD USB externo e o computador).

A propósito, isso é chamado de método de backup.

Lekensteyn
fonte
3

Você pode instalar uma versão mais antiga de um determinado pacote (downgrade) com o apt ou o dpkg facilmente . Encontrar uma versão mais antiga do pacote é o problema, pois elas geralmente desaparecem do pool e se refletem à medida que as atualizações chegam.

Se você instalar o pacote a partir de um CD de instalação, de um espelho desatualizado ou de um cache, também será necessário mantê-lo fixado à versão antiga para que não seja atualizado até que você permita. O que significa que você deve observar as atualizações e testá-las até que o problema seja resolvido. Obviamente, isso é um problema, já que, enquanto isso (talvez para sempre), você ficará com o pacote não corrigido e possivelmente inseguro. Isso significa que todo usuário com algum tipo de problema no sistema ficará em um estado aleatório até que possa resolvê-lo.

Todos os softwares também não são compatíveis com versões anteriores; portanto, uma versão mais antiga de algo pode não se comportar corretamente quando alimentada com configurações ou arquivos de dados mais recentes. Obviamente, isso é impossível de resolver, a menos que você também reverta todos os dados do usuário para um estado antes da atualização.

Seria ótimo se houvesse uma maneira de fazer isso, mas é extremamente problemático. Quem pensa que existe uma solução coerente deve escrever uma proposta e convidar comentários ou, melhor ainda, fazer uma solução de prova de conceito (código, script, documento). Trollar e lamentar não é construtivo.

Como não há solução técnica limpa, a maioria dos softwares é desenvolvida (e integrada) com a mentalidade "o único caminho a seguir". Tentar gerenciar versões desatualizadas é uma perda de tempo de todos. Os problemas encontrados são corrigidos nas versões mais recentes o mais rápido possível. Como uma solução menor, gostaria de ver um arquivo de versões anteriores do pacote mantido em algum lugar para uma solução temporária ocasional.

Enquanto isso, você pode relatar erros e não esperar que o software de ponta nunca falhe. Uma correção, uma vez encontrada, deve estar na próxima atualização. Devs são humanos (principalmente) e, portanto, falíveis. Os computadores são complicados e cheios de variedade e detalhes insanos. Sistemas mantidos defensivamente usando componentes bem suportados e distribuição estável de software integrada podem ser muito estáveis ​​sem se tornarem inseguros ou não atualizáveis, apesar disso.

XTL
fonte