Eu só agora tinha que descobrir uma resposta para isso, porque o último apt-get upgrade
em um servidor Debian tornou impossível inicializar o kernel mais recente além de um busybox, deixando de montar a partição zfs root. Pelo menos um kernel antigo ainda pode ser inicializado, mas era incompatível com outro software. Assim, a necessidade de uma reversão.
A resposta curta - você pode usar o seguinte comando:
$ apt-get -s install $(apt-history rollback | tr '\n' ' ')
se ele fizer o que você deseja, remova o -s
e execute-o novamente. Aqui estão os passos que dei para que isso funcionasse corretamente:
-
Eu temporariamente reduzi meu
/var/log/dpkg.log
para deixar apenas a atualização de hoje -
Eu instalei o pequeno script
apt-history
de aqui em ~ / .bashrc e correu$ apt-history rollback > rollback.txt ... libzfs2:amd64=0.6.4-4~wheezy zfsutils:amd64=0.6.4-4~wheezy zfs-initramfs:amd64=0.6.4-4~wheezy ...
-
Isso fornece uma lista bem formatada de pacotes versionados para serem revertidos, alimentando-os em
apt-get install
. Apare essa lista conforme necessário em um editor de texto e execute (com-s
para o dry-run primeiro):$ apt-get -s install $(cat rollback.txt | tr '\n' ' ') $ apt-get install $(cat rollback.txt | tr '\n' ' ')
Apt avisa sobre os downgrades esperados. Para evitar que essa reversão seja sobregravada 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 ...
function apt-history(){
case "$1" in
install)
cat /var/log/dpkg.log | grep 'install '
;;
upgrade|remove)
cat /var/log/dpkg.log | grep $1
;;
rollback)
cat /var/log/dpkg.log | grep upgrade | \
grep "$2" -A10000000 | \
grep "$3" -B10000000 | \
awk '{print $4"="$5}'
;;
*)
cat /var/log/dpkg.log
;;
esac
}