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


26

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


Não com muito trabalho, isso não valeria a pena. Você pode salvar sua / casa e começar de novo? Do que você não gostou?
User10547 9/09/09

Ainda não o fiz, mas este é um servidor de produção e preciso ter certeza de que não há incompatibilidades com nossa configuração personalizada do PHP / MySQL / Apache2, e voltar rapidamente, se houver. Gostaria de atualizar, pois acho que isso resolverá outro problema que estou tendo.
jjclarkson

A menos que você tenha feito o dist-upgrade, não vejo quais resultados não existem, pois essas são provavelmente as atualizações de segurança .
LiraNuna 9/09/09

Se você tiver uma instalação personalizada, é sua responsabilidade salvar as correções e aplicá-las à versão atual.
LiraNuna 9/09/09

2
Se for um servidor, tente um servidor dev antes de atualizar a produção
SolArc

Respostas:


5

aptitudedá acesso a todas as versões de um pacote, se disponível, de acordo com o gerenciamento de pacotes Debian .


2.7.3 pode ajudá-lo a fazer o downgrade para estável. 2.7.16 explica como salvar e restaurar o estado do dpkg. O dpkg-repack permite "compactar" um único pacote.
Joeytwiddle #

5

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.


1
Eu estou esperando que todos aqui saibam o básico sobre como procurar a última atualização ofensiva:
Manav Brar

2
Sobre o que era essa edição? Você tem outra pergunta? Você quer que jogemos um jogo de adivinhação?
slhck

5

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.


3

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.


2

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, /etce /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.


Eu poderia (e provavelmente vou) fazer um backup bare metal, mas queria uma opção de software que me permitisse desfazer a atualização em um período de tempo mais rápido. A restauração do backup bare metal pode levar várias horas.
jjclarkson

1
Você pode ter certeza de ter cópias de todos os pacotes que está prestes a atualizar nas versões anteriores (provavelmente ainda estão no seu cache apt em algum lugar /var) e quaisquer arquivos de configuração relevantes armazenados. Você pode tentar forçar uma reversão dizendo explicitamente dpkgpara 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.
David Spillett

Um backup feito com rsync (registro de data e hora ativado) pode ser restaurado rapidamente, em comparação com um backup feito com tar.
Joeytwiddle

2

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.


1

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.


1

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.



0

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:

  • 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 de desespero.


0

DPkg :: Pre-Install-Pkgs e ZFS nos snapshots do Linux

Se você instalou seu sistema operacional em um sistema de arquivos ZFS (por exemplo, ZFS no Linux ), poderá configurar apt-getpara executar zfs snapshotantes 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.

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')";};

onde rpool/ROOT/debiandeve 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 NAMEcom o comando

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

Mas isso funciona?

É 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_borkedbreve, 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 -rsinalizador. 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_testfoi 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-033614desapareceria.

Eu testei apt-get upgradeem 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 installcomando, outro para o upgradecomando.

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.