apt-undo, reinstalar paquetes removidos por error
Te llega un ticket: “No me puedo loguear al server”, siendo hábiles operadores consultamos “hiciste algún cambio?” a lo que nos responden “solo desinstalé un paquete”.
El paquete desinstalado fue python3
en un server con Ubuntu 20.04 que está conectado a un Freeipa. La desintalación se llevó puestos todos los paquetes del servicio sssd y además netplan por lo que al reiniciar el server (acción cuestionable pero necesaria) también perdimos conectividad.
El comando en cuestión sudo apt autoremove python3
…
En el log se puede observar el efecto devastador:
Se puede hacer un ctrl-z a esto? Se puede deshacer un apt autoremove?
Si.
Las primeras búsquedas de Google apuntan a una herramienta apt-undo
en esta pregunta de StackOverflow. Pero el ppa no está más.
Sin embargo, buscando más a fondo aparece esta respuesta en Stackoverflow con un snippet de 4 lineas de bash salvador que dejamos a continuación.
Simple y elegante busca en history.log todo lo que fue removido y arma la linea para volver a instalarlo con apt-get.
echo '#!/bin/bash' > restore
echo sudo apt-get install `grep Remove /var/log/apt/history.log | tail -1 | sed -e 's|Remove: ||g' -e 's|([^)]*)||g' -e 's|:[^ ]* ||g' -e 's|,||g'` >> restore
chmod +x restore
./restore
Es una solución final? probablemente no, porque resta verificar si se removieron configuraciones u otros archivos locales, sin embargo al tener por lo menos los paquetes restaurados estamos más cerca del punto de llegada.
Y por si no quedó claro, desinstalar paquetes como python3
no es una buena idea.