Existe uma maneira, antes de iniciar um aptitude upgrade
ou apt-get upgrade
, de configurar algo para que você possa "facilmente" reverter seu sistema para o estado "apt" que estava antes da atualização real, se algo der errado?
Por exemplo, reinstale a versão antiga dos pacotes que foram atualizados durante o processo.
(EDIT) Algumas dicas : Eu sei que, etckeeper
por exemplo, usa algum gancho apt
para que seja notificado sempre que apt
instalar ou desinstalar um pacote. Suponho que possa haver algum tipo de script que possa salvar a lista de pacotes recém-instalados e o número da versão anterior para poder reinstalá-los a partir do apt
cache ( /var/cache/apt/archives
). Há também o checkinstall
que pode acompanhar as modificações do arquivo ...
Algum detalhe sobre como conseguir isso corretamente?
Respostas:
Eu só agora tinha que descobrir uma resposta para isso, porque a última
apt-get upgrade
em um servidor Debian tornou impossível inicializar o kernel mais recente além de um busybox, falhando ao montar a partição raiz zfs. Pelo menos um kernel mais antigo ainda podia inicializar, mas era incompatível com outro software. Daí a necessidade de uma reversão.A resposta curta - você pode usar o seguinte comando:
se fizer o que você deseja, remova
-s
e execute-o novamente. Aqui estão as etapas que eu tomei para fazer isso funcionar corretamente:Eu aparei temporariamente o meu
/var/log/dpkg.log
para deixar apenas a atualização de hojeEu instalei o pequeno roteiro
apt-history
de aqui em~/.bashrc
e correuIsso fornece uma lista bem formatada de pacotes com versão para reverter, alimentando-a
apt-get install
. Apare esta lista conforme necessário em um editor de texto e, em seguida, execute (com a-s
execução a seco primeiro):O Apt alertará sobre os downgrades esperados. Para evitar que essa reversão seja substituída pela próxima atualização, os pacotes precisarão ser fixados até que o problema original seja resolvido. Por exemplo, com:
apt-mark hold zfsutils libzfs2 ...
fonte
apt-history rollback
comando pode ser substituído por algo parecidoawk '$3 ~ /upgrade/ {print $4"="$5}' dpkg.log
.awk '$1 == "2018-09-07" && $3 == "upgrade" {print $4"="$5}' /var/log/dpkg.log
E: Version '5.24.1-3+deb9u3' for 'libperl5.24' was not found
. Estou usando o Debian Stretch for Raspian.Os arquivos de log
/var/log/apt/history.log
e/var/log/apt/term.log
são as coisas mais próximas disponíveis para sua descrição:history.log
fornece uma lista resumida de todas as açõesapt
executadas no seguinte formato:Em particular, fornece uma lista de pacotes recém-instalados ou de pacotes removidos. Além disso,
term.log
mostra o que realmente apareceu no terminal durante a ação, para mostrar as versões antiga e nova dos pacotes. Uma amostra aleatória do meuhistory.log
:apt
Não é recomendável tentar reverter automaticamente, mas se você usar os logs, deverá ser possível fazê-lo manualmente, a menos que a ação com falha tenha quebrado algo que interfiraapt
nas ações da empresa, por exemplo, um banco de dados inconsistente do dpkg. Nesse caso, você precisará corrigir o problema antes de continuar.fonte
Não, o apt não facilita as coisas.
A melhor opção é algum tipo de instantâneo. Instantâneos do sistema de arquivos através de lvm / zfs / btrfs ou instantâneos de instância, se você estiver usando algum tipo de VM.
A única outra opção é fazer um inventário dos pacotes instalados (dpkg -l) antes e depois. Se você quiser "reverter", precisará instalar explicitamente a versão anterior.
fonte
apt install openssl=1.0.2g-1ubuntu4.12
resulta emE: Version '1.0.2g-1ubuntu4.12' for 'openssl' was not found
. Acabo de atualizar para1.0.2g-1ubuntu4.13
e eu estou querendo saber se isso é fazendo com que alguns CORS / problemas CSP agora