Apt-Restore, reinstallare automaticamente i pacchetti rimossi da apt-get autoremove

Stasera mi è capitata una cosa veramente brutta. Apt-get, in uno slancio di imbecillità, mi ha proposto un apt-get autoremove che mi ha allegramente disinstallato mezzo sistema operativo. Essì, colpa mia, avrei dovuto leggere quello che intendeva fare PRIMA di dare invio, ma tant'è: il danno è fatto. E ora? Bene, ho scoperto che le ultime operazioni di apt-get sono salvate nel file /var/log/apt/, ma in una maledettissima forma che impedisce di fare copia-incolla dopo aver scritto apt-get:

libmusicbrainz3-6:amd64 (3.0.2-2), gstreamer0.10-tools:amd64 (0.10.30-1), liferea-data:amd64 (1.6.4-1), geoclue-hostip:amd64 (0.12.0-1), gnome-office:amd64 (2.30+7), gnuchess:amd64 (5.07-7),

infatti sono inframezzate dal nomero di versione... grrrrrrrrrrr :@

Così mi sono dovuto scrivere uno scriptino che risolvesse il problema. Il mio primo script in bash. Che stranamente funziona. E fa qualcosa di utile O.O Questa cosa è shockante...

Comunque, eccolo quì:

#!/bin/bash

ciclo=1
pacchetto=null
echo "Please copy the last part of the log (/var/log/apt/history.log) into a file, copying only the part between \"Remove\" and \"End-Date\"."
echo "File name?"
read nomefile

echo -n "apt-get install "
while [ "$pacchetto" != "" ]
do
   pacchetto=$(cut -f"$ciclo" --delimiter=":" "$nomefile" | cut -f2 --delimiter=",")
   echo -n "$pacchetto "

   let "ciclo += 1"
done
echo
echo "Copy and paste to install packages."

Copiatelo in un file chiamato apt-restore, salvatelo e date chmod +x apt-restore per renderlo eseguibile, e poi ./apt-restore per eseguirlo. Dovete fornire allo script un file contenente la parte di log a cui siamo interessati. Quindi prima di tutto andiamo a prendere in /var/log/apt/history.log l'ultima parte, o quantomeno quella che c'interessa. Dobbiamo prendere solo la parte compresa tra "Remove" ed "End Date". Un esempio:

Start-Date: 2011-03-24  20:10:15
Commandline: apt-get autoremove
Remove: python-bugbuddy:amd64 (2.30.0-4), xdg-user-dirs-gtk:amd64 (0.8-1), usb-modeswitch:amd64 (1.1.4-2), geoclue:amd64 (0.12.0-1), gtk2-engines-smooth:amd64 (2.14.3+deb5), dnsmasq-base:amd64 (2.55-2), tomboy:amd64 (1.2.2-2), python-evolution:amd64 (2.30.0-4), ekiga:amd64 (3.2.7-2), libmono-security2.0-cil:amd64 (2.6.7-5), update-notifier-common:amd64 (0.99.3debian8), libgnome-bluetooth7:amd64 (2.30.0-2), libndesk-dbus1.0-cil:amd64 (0.6.0-4), libmono-addins-gui0.2-cil:amd64 (0.4-8), gcalctool:amd64 (5.30.2-2), libopal3.6.8:amd64 (3.6.8~dfsg-2), gnome-backgrounds:amd64 (2.32.0-1), telepathy-gabble:amd64 (0.9.15-1+squeeze1), gnome-search-tool:amd64 (2.30.0-2), libmono-system2.0-cil:amd64 (2.6.7-5), tcptraceroute:amd64 (1.5beta7+debian-4), update-notifier:amd64 (0.99.3debian8), baobab:amd64 (2.30.0-2), libfreerdp-plugins-standard:amd64 (0.7.4-1), python-mako:amd64 (0.3.4-5), hamster-applet:amd64 (2.30.2-3), network-manager-gnome:amd64 (0.8.1-2), libsrtp0:amd64 (1.4.4~dfsg-6), gnome-system-log:amd64 (2.30.0-2), gucharmap:amd64 (2.30.3-1)
End-Date: 2011-03-24  20:11:27

Come vedete bisogna prendere solo la parte in grassetto. Copiamola in un file e salviamolo con un nome a discrezione, tipo BruttoBastardo. Ora eseguiamo ./apt-restore e quando ce lo chiede inseriamo BruttoBastardo.txt. Premiamo invio e guardiamo l'output generato (apt-get install nomipacchetti). Se è tutto ok copiamo l'output generato ed incolliamolo in una shell, poi premiamo invio. Il sistema reinstalla tutti i nostri pacchetti persi, senza nessuna fatica.

Tutto è bene quel che finisce bene...