Existe uma 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?
Existe uma 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?
Respostas:
aptitude
dá acesso a todas as versões de um pacote, se disponível, de acordo com o gerenciamento de pacotes Debian .
Me deparei com o Blogstatic Blog do Hartman: Como desfazer uma atualização no Ubuntu Lucid
O primeiro passo para desfazer a atualização incorreta foi descobrir quais atualizações eram exatamente. Após pesquisar em alguns fóruns, deparei-me com um histórico de atualizações: Abra o gerenciador de pacotes sinápticos ("sudo synaptic" no terminal). Na barra de menus, clique em Arquivo -> Histórico e você verá todas as suas atualizações classificadas por data.
Infelizmente, eu tinha instalado cerca de 20 atualizações hoje e não sabia qual havia causado o problema. Ao pesquisar em cada um dos pacotes nomeados na lista Histórico, consegui fazer o downgrade de alguns de cada vez até que o problema fosse resolvido e eu identificasse a atualização incorreta. Para fazer isso:
Use a barra de pesquisa para encontrar o pacote que você deseja fazer o downgrade. Depois de encontrar o que está procurando, clique no pacote para selecioná-lo. Na barra de menus, clique em Pacote -> Forçar versão e selecione a versão anterior do pacote no menu suspenso. Clique no botão "Aplicar" para aplicar o downgrade.
Eu tive que fazer isso hoje no meu sistema Debian. Primeiro, identifiquei o intervalo de tempo em que ocorreu a atualização incorreta e recuperei as entradas de log, 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 do pacote ainda em cache no disco (felizmente para mim não havia 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 instalando com força os 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 dizia a mensagem de erro, um dos meus pacotes dependia de um pacote -comum pouco antes da atualização, mas a atualização o removeu (e o apt-get não pode mais encontrá-lo). Felizmente, seu arquivo de pacote ainda está em / var / cache / apt, para que eu possa adicioná-lo à lista e tente 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 ele desclassificou com êxito os pacotes, QED.
Também tive que desfazer uma atualização de pacote hoje em alguns servidores Debian. Reverti com êxito os pacotes para a última versão usando o aptitute, enquanto o seguinte comando awk foi muito útil.
( No comando abaixo, substitua a sequência de datas 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 esses 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 isso também economize tempo útil para outros.
Eu não acredito que, além de tomar um backup completo dos sistemas de arquivos relevantes (aqueles que contêm /
, /bin
, /lib
, /sbin
, /usr
, /var
, /etc
e /boot
(que podem ser todos em no sistema de arquivos) e seu registro de inicialização), assim você pode rolar a máquina de volta depois.
/var
) e quaisquer arquivos de configuração relevantes armazenados. Você pode tentar forçar uma reversão dizendo explicitamente dpkg
para instalar essas versões. Você pode ter algum trabalho a fazer depois quando quiser que as atualizações normais aconteçam, por isso não é algo que eu recomendo.
Eu executo meus servidores Linux em um ambiente virtualizado e executo uma imagem antes de uma atualização do apt-get ou de qualquer atualização / atualização importante de terceiros.
Então, se algo der errado, eu simplesmente reverto e a vida continua até que eu possa descobrir mais informações.
Isso veio com muita facilidade quando eu atualizei minha caixa do Ubuntu para 12.04, e de alguma forma o MySQL ficou completamente inoperante após a atualização. Revirei, encontrei a resposta mais tarde, refiz a atualização, consertei o MySQL e a vida foi boa.
Você poderia tentar checkinstall
Depois de ./configure; faça seu programa, o CheckInstall executará make install (ou o que você pedir para executar) e acompanhará todos os arquivos modificados por esta instalação, usando o excelente installwatch ...
Portanto, talvez você possa dizer para executar o aptitude safe-upgrade e acompanhar todas as modificações feitas pelo upgrade.
Existe um projeto chamado Nexenta que combina o kernel do OpenSolaris com o espaço de usuário do Ubuntu. Ele fornece uma ferramenta para integrar o ZFS do Solaris e o apt do Debian, a fim de fornecer um botão de desfazer para atualizações. Veja aqui: http://www.nexenta.org/os/TransactionalZFSUpgrades
Em geral, o que você precisa é de um sistema de arquivos com controle de versão. O Btrfs para Linux está em desenvolvimento.
Usar o Apt-Undo é uma opção possível, mas só pode funcionar se você estiver usando-o para instalar e desinstalar pacotes. Não ajudará se você já desinstalou o software da maneira normal.
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a -simple-way-of-desfazer-apt-ações /
Fiz isso com sucesso algumas vezes, mas não o recomendo. Foi o que fiz (se bem me lembro):
1) Remova qualquer software não oficial que não esteja incluído nos repositórios ubuntu padrão (isso pode não ser necessário, mas eu sugiro que eles possam interferir no seu caminho).
2) Altere seu /etc/apt/sources.list (e sources.list.d / *) para a versão anterior (comente todos os repositórios não oficiais).
3) apt-get update / aptitude update
4) Usando o aptitude, faça o downgrade dos pacotes principais (como X11, bibliotecas, etc.). Ele 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 é acessando o painel de descrição e instalando a versão (pressionando +) na parte inferior.
5) Repita o item 4 até todo o software pertencer à sua versão de destino (verifique a coluna da versão no aptitude).
É por isso que eu não recomendo este método:
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 de desespero.
Se você instalou seu sistema operacional em um sistema de arquivos ZFS (por exemplo, ZFS no Linux ), poderá configurar apt-get
para executar zfs snapshot
antes de instalar ou atualizar qualquer coisa, o que fará o backup instantâneo do sistema de arquivos. Pode funcionar com mecanismos de backup que não sejam os instantâneos do ZFS, mas deixarei esse teste para outras pessoas.
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')";};
onde rpool/ROOT/debian
deve ser substituído pelo nome do sistema de arquivos ZFS no qual seu sistema operacional está montado. Você deu esse nome ao instalar o sistema operacional pela primeira vez e pode ser encontrado em atributo NAME
com o comando
# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...
É melhor tirar uma foto instantânea antes de seguir os conselhos 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á. Em error: fn_borked
breve, você poderá retornar seu sistema ao seu estado atual feliz com
# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test
Agora experimente instalando dois jogos minúsculos que provavelmente estão disponíveis no 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 da instalação dos dois jogos.
# 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 a captura de vários instantâneos, você pode reverter para qualquer um anterior adicionando o -r
sinalizador. No nosso caso, por exemplo, tente
# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test
Entretanto, esteja avisado de 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 tirado, mas também excluirá irremediavelmente todos os instantâneos posteriores. Se você seguisse junto com esta postagem, o instantâneo rpool/ROOT/debian@apt-get_2018-08-02-033614
desapareceria.
Eu testei 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 install
comando, outro para o upgrade
comando.
Advertência : Testei isso pela primeira vez hoje e sei muito pouco sobre o funcionamento interno do apt. Se isso quebrar algo para você ou acarretar riscos que minha mente afetada não considerou, por favor, comente sobre isso abaixo.