I get this error after upgrade
Open terminal and execute these commands:
sudo apt-get autoremove
sudo apt-get --purge remove && sudo apt-get autoclean
sudo apt-get -f install
sudo dpkg-reconfigure -a
Last command would take some time depends upon packages installed in your system. So please be patient. If you don't have any broken/residual packages it would execute silently without any message.
sudo apt-get update
sudo apt-get upgrade && sudo apt-get dist-upgrade
sudo dpkg-reconfigure -a
sudo dpkg --configure -a
sudo update-initramfs -u
Then restart your system.
My one-liner to remove old kernels (this also frees up disk space):
dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge
Explanation (remember, |
uses the output of the previous command as the input to the next)
-
dpkg --list
lists all installed packages -
grep linux-image
looks for the installed linux images -
awk '{ print $2 }'
just outputs the 2nd column (which is the package name) -
sort -V
puts the items in order by version number -
sed -n '/'`uname -r`'/q;p'
prints the lines before the current kernel -
xargs sudo apt-get -y purge
purges the found kernels
Unwinding the sed
invocation:
-
-n
tellssed
to be quiet -
`uname -r`
outputs the current installed kernel release - we include it in backticks so that the output is includes as part of the command (you might also see this as$(uname -r)
-
/something/q
says stop when you match 'something' (in this case, something is output ofuname -r
) - the/
surround a regular expression -
p
is print - the
;
is the command separtor, so/something/q;p
says quit when you match something, else print
altogether, sed -n '/'`uname -r`'/q;p'
is print the lines until it matches with the current kernel name.
If you're paranoid (like me), you can make the last part xargs echo sudo apt-get -y purge
so that the command to purge the old kernels is printed, then you can check that nothing unexpected is included before you run it.
Modified version to remove headers:
dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
Note: the sed
invocation is modified. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"
extracts only the version (e.g. "3.2.0-44") , without "-generic" or similar from uname -r
All-in-one version to remove images and headers (combines the two versions above):
echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge