Como posso desfazer ou reverter um comando “apt-get upgrade” no Ubuntu?

24

Existe alguma maneira no Ubuntu de reverter ou desfazer a última atualização depois de fazer um apt-get upgrade se você não gostar dos resultados?

    
por jjclarkson 10.09.2009 / 00:21

11 respostas

5

aptitude dá acesso a todas as versões de um pacote, se disponível de acordo com Gerenciamento de pacotes Debian .

    
por 18.02.2010 / 22:58
5

Me deparei com o blog Blogstatic de Hartman: Como desfazer uma atualização no Ubuntu Lucid

The first step to undoing the offending update was to find out what updates it was exactly. After searching some forums I came across a way to see my update history: Open synaptic package manager ("sudo synaptic" in the terminal). From the menu bar, click File -> History and you will see all your updates sorted by date.

Unfortunately I had installed about 20 updates today, and I didn't know which one had caused the problem. By searching through each of the packages named in the History list, I was able to downgrade a few at a time until the problem was solved and I had identified the offending update. To do this:

Use the search bar to find the package you want to downgrade. Once you've found what you're looking for, click on the package to select it. From the menu bar, click Package -> Force Version and select the previous version of the package from the drop down menu. Click the "Apply" button to apply the downgrade.

    
por 14.06.2012 / 22:31
5

Eu tive que fazer isso hoje no meu sistema Debian. Primeiro, identifiquei o intervalo de tempo quando a atualização incorreta aconteceu e recuperei as entradas de registro, fornecendo os números de versão antigos e novos dos pacotes atualizados:

$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log
2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:26 upgrade traceroute:amd64 1:2.0.22-1 1:2.1.0-1
2016-03-20 16:58:33 upgrade ethtool:amd64 1:4.2-1 1:4.5-1
2016-03-20 16:58:34 upgrade libsdl1.2debian:amd64 1.2.15+dfsg1-3 1.2.15+dfsg1-4
2016-03-20 16:58:34 upgrade subversion:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:36 upgrade libsvn1:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:56 upgrade linux-image-amd64:amd64 4.3+70 4.4+71
2016-03-20 16:58:56 upgrade linux-libc-dev:amd64 4.3.5-1 4.4.6-1
2016-03-20 16:59:03 upgrade amd64-microcode:amd64 2.20141028.1 2.20160316.1

Em seguida, tentei encontrar os arquivos de pacote ainda em cache no disco (por sorte, eu não tinha executado o autoclean):

$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_amd64.deb': No such file or directory
-rw-r--r-- 1 root root   28820 Dec 18  2014 /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb
-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root  185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb
-rw-r--r-- 1 root root 1317644 Mar  3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root    6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb
-rw-r--r-- 1 root root 1075506 Feb  7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb
-rw-r--r-- 1 root root  983174 Mar  3 11:30 /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root   53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb

Parece que não tenho o pacote ethtool mais antigo por algum motivo. Ainda assim, vamos continuar forçando a instalação dos arquivos de pacotes mais antigos:

$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
dpkg: warning: downgrading amd64-microcode from 2.20160316.1 to 2.20141028.1
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20160316.1) ...
dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:amd64 from 2.4.10-1 to 2.4.9-3
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.10-1) ...
dpkg: warning: downgrading libsdl1.2debian:amd64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...
dpkg: warning: downgrading libsvn1:amd64 from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-3) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
dpkg: warning: downgrading linux-image-amd64 from 4.4+71 to 4.3+70
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.4+71) ...
dpkg: warning: downgrading linux-libc-dev:amd64 from 4.4.6-1 to 4.3.5-1
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.4.6-1) ...
dpkg: warning: downgrading subversion from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-3) ...
dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:amd64:
 libwebkitgtk-3.0-0:amd64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:
  Package libwebkitgtk-3.0-common is not installed.

dpkg: error processing package libwebkitgtk-3.0-0:amd64 (--install):
 dependency problems - leaving unconfigured
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Errors were encountered while processing:
 libwebkitgtk-3.0-0:amd64

Como a mensagem de erro dizia, um dos meus pacotes dependia de um pacote comum pouco antes do upgrade, mas o upgrade o removeu (e o apt-get não consegue mais encontrá-lo). Felizmente, seu arquivo de pacote ainda está em / var / cache / apt, então posso simplesmente adicioná-lo à lista e tentar novamente:

$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*
-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20141028.1) ...
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.3+70) ...
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.3.5-1) ...
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...
Selecting previously unselected package libwebkitgtk-3.0-common.
Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...
Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Setting up libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up libwebkitgtk-3.0-0:amd64 (2.4.9-3) ...
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64

Sucesso! Na verdade, isso não resolveu meu problema. Mas com sucesso rebaixou os pacotes, QED.

    
por 21.03.2016 / 23:35
3

Eu também tive que desfazer uma atualização de pacote hoje em alguns servidores Debian. Reverti com sucesso os pacotes para a última versão usando o aptitute, enquanto o seguinte comando do awk foi muito útil.

( No comando abaixo substitua a string de data pela data do dia a partir da qual você deseja reverter as atualizações )

awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) {gsub(/[\s\t)( ]+/,"",$5); printf("%s=%s ", $2 , $5)}}' /var/log/apt/term.log

revise a saída para verificar se estes são os pacotes e versões a serem revertidos. Em seguida, use o aptitute para fazer o downgrade dos pacotes listados:

aptitute install [paste output here]

Espero que esta seja também uma útil poupança de tempo para os outros.

    
por 20.06.2017 / 16:21
2

Eu acredito que não, além de fazer um backup completo dos sistemas de arquivos relevantes (aqueles que contêm / , /bin , /lib , /sbin , /usr , /var , /etc e /boot (que podem estar todos no sistema de arquivos) e seu registro de inicialização) para que você possa reverter a máquina depois.

    
por 10.09.2009 / 00:34
2

Eu executo meus servidores linux em um ambiente virtualizado e executo um shapshot antes de uma atualização do apt-get, ou qualquer atualização / atualização de terceiros importante para esse assunto.

Então, se algo der errado, eu simplesmente reverterei e a vida continuará até que eu possa descobrir mais informações.

Isso veio muito bem quando eu atualizei minha caixa do Ubuntu para 12.04, e de alguma forma o MySQL estava completamente não-funcional após a atualização. Voltei para trás, encontrei a resposta mais tarde, executei novamente a atualização, fixei o MySQL e a vida era boa.

    
por 31.05.2013 / 21:00
1

Você pode tentar verificar a instalação

After you ./configure; make your program, CheckInstall will run make install (or whatever you tell it to run) and keep track of every file modified by this installation, using the excelent installwatch ...

Então, talvez você possa dizer para executar o aptitude safe-upgrade e acompanhar todas as modificações feitas pela atualização.

    
por 03.10.2009 / 04:26
1

Existe um projeto chamado Nexenta que combina o kernel do OpenSolaris com o espaço do usuário do Ubuntu. Ele fornece uma ferramenta para integrar o apt do ZFS e do Debian Solaris, a fim de fornecer um botão de desfazer para upgrades. Veja aqui: link

Mais geralmente, o que você precisa é de um sistema de arquivos de controle de versão. O Btrfs para Linux está em desenvolvimento.

    
por 05.10.2009 / 04:28
1

Usar Apt-Undo é possível opção, mas só pode funcionar se você estiver usando para instalar e desinstalar pacotes. Não ajudará se você já tiver desinstalado o software da maneira normal.

link link

    
por 10.08.2013 / 16:37
0

Eu fiz isso com sucesso algumas vezes, mas não vou recomendá-lo. Isto é o que eu fiz (se bem me lembro):

1) Remova qualquer software não oficial que não esteja incluído nos repositórios padrão do Ubuntu (pode não ser necessário, mas sugiro como eles podem atrapalhar).

2) Mude seu /etc/apt/sources.list (e sources.list.d / *) para a versão anterior (comente todos os repositórios não oficiais).

3) atualização do apt-get update / aptitude

4) Usando o aptitude, pacotes principais de downgrade (como X11, bibliotecas, etc). Ele vai começar a disparar muitos pacotes quebrados ... então você precisará resolver cada caso (você precisa saber como fazer isso no aptitude). A maneira como você faz o downgrade é indo até o painel de descrição e instalando a versão (pressionando +) na parte inferior.

5) Repita # 4 até que todo o software pertença à sua versão de destino (verifique a coluna de versão no aptitude).

Esta é a razão pela qual eu não recomendo este método:

  • Demora muito tempo (é um processo doloroso)
  • Alguns aplicativos podem não funcionar corretamente (pois ainda podem ter a configuração mais recente). Nesse caso, você precisará "limpar" e reinstalar.
  • Existem atualizações relacionadas ao sistema que não funcionarão após o downgrade
  • É altamente arriscado, pois você pode acabar com um sistema inutilizável

Eu recomendo fazer uma instalação limpa e mover sua configuração pouco a pouco. Também leva tempo, mas no final você tem uma versão estável.

A razão pela qual fiz isso foi principalmente como experimentação e como resultado do desespero.

    
por 07.09.2015 / 09:31
0

DPkg :: Pré-instalação-Pkgs e ZFS em snapshots do Linux

Se você instalou o sistema operacional em um sistema de arquivos ZFS (por exemplo, ZFS no Linux ), é possível configurar apt-get para executar zfs snapshot antes de instalar ou atualizar qualquer coisa, o que fará o backup do seu sistema de arquivos instantaneamente. Pode funcionar com mecanismos de backup que não sejam instantâneos do ZFS, mas deixarei esse teste para outras pessoas.

O script

Crie um arquivo como

/etc/apt/apt.conf.d/71backup

com conteúdo

// Tell 'apt-get' to take a ZFS snapshot before installing or upgrading a
// set of packages:
DPkg::Pre-Install-Pkgs {"/sbin/zfs snapshot rpool/ROOT/debian@apt-get_$(date '+%Y-%m-%d-%H%M')";};

em que rpool/ROOT/debian deve ser substituído pelo nome do sistema de arquivos ZFS ao qual seu sistema operacional está montado. Você deu esse nome quando instalou o sistema operacional pela primeira vez, e ele pode ser encontrado no atributo NAME com o comando

# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...

Mas isso funciona?

É melhor você tirar uma foto antes de seguir o conselho de configuração de alguma pessoa aleatória da Internet:

# zfs snapshot rpool/ROOT/debian@$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/debian@2018-08-01-230001_test

Aí está. Se error: fn_borked ocorrer em breve, você poderá retornar o seu sistema ao estado atual com

# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test

Agora, experimente instalar dois pequenos jogos que provavelmente estão disponíveis em seu repositório:

# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614

Esse instantâneo contém seu sistema de arquivos como era antes dos dois jogos instalados.

# exit
$ sudoku

Tempos divertidos para a vovó, mas você odeia o sudoku.

$ sudo -i
# zfs rollback rpool/ROOT/debian@apt-get_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found

Após vários instantâneos terem sido tirados, você pode reverter para qualquer um anterior adicionando o sinalizador -r . No nosso caso, por exemplo, tente

# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test

Esteja avisado, no entanto, que isso não apenas retornará seu sistema de arquivos ao estado em que estava quando rpool/ROOT/debian@2018-08-01-230001_test foi usado, mas também excluirá irremediavelmente todos os instantâneos posteriores. Se você seguiu junto com esta postagem, o snapshot rpool/ROOT/debian@apt-get_2018-08-02-033614 agora desapareceria.

Eu testei o apt-get upgrade em um Debian GNU / Linux com

# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get

Funciona. Um instantâneo foi criado para o comando install , outro para o comando upgrade .

Advertência : Eu testei isso pela primeira vez hoje e sei muito pouco sobre o funcionamento interno do apt. Se isso quebrar alguma coisa para você ou implicar riscos que minha mente benevolente não tenha considerado, por favor, comente sobre isso abaixo.

    
por 14.08.2018 / 03:42