How to Force Remove Linux Kernel Packages with apt-get Despite Unmet Dependencies


2 views

When your Ubuntu server's /boot partition hits 100% capacity (common on thin VPS deployments), you encounter a classic chicken-and-egg problem:

# Typical error scenario
$ sudo apt-get remove linux-image-3.13.0-86-generic
The following packages have unmet dependencies:
 linux-image-extra-3.13.0-88-generic : Depends: linux-image-3.13.0-88-generic
 linux-image-generic : Depends: linux-image-3.13.0-88-generic
E: Unmet dependencies

Here are three proven methods to resolve this:

Method 1: The Nuclear Option - dpkg Force Removal

When apt-get refuses to cooperate, dpkg provides lower-level control:

# List all installed kernel packages
$ dpkg -l | grep linux-image

# Force remove specific packages (replace with your package names)
$ sudo dpkg --force-all -r linux-image-3.13.0-86-generic
$ sudo dpkg --force-depends -r linux-image-extra-3.13.0-86-generic

Method 2: apt-get with --ignore-depends

The official way to bypass dependency checks:

# Syntax for ignoring dependencies
$ sudo apt-get remove --ignore-depends=linux-image-3.13.0-88-generic linux-image-extra-3.13.0-86-generic

# Follow up with autoremove after creating space
$ sudo apt-get autoremove

Method 3: Manual File Cleanup First

When even force removal fails due to disk space:

# Check current kernel (DO NOT remove this one)
$ uname -r

# Manually delete old kernel files
$ sudo rm /boot/*-3.13.0-{86,87}-*
$ sudo rm /lib/modules/3.13.0-{86,87}-*

# Then proceed with package removal
$ sudo apt-get remove -f linux-image-extra-3.13.0-86-generic
# Set up automatic kernel cleanup
$ sudo apt-get install byobu
$ sudo byobu-ctrl-a screen -t "Kernel Cleanup" bash -c 'apt-get autoremove --purge'

For Ubuntu 14.04 specifically, consider modifying your update configuration:

# Edit the auto-update config
$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
# Set "Unattended-Upgrade::Remove-Unused-Dependencies" to "true"

Every Ubuntu server admin has faced this scenario: your /boot partition fills up with old kernel images, but attempts to remove them get blocked by dependency issues. Here's a real-world example from a production server:

$ sudo apt-get remove linux-image-3.13.0-86-generic
Reading package lists... Done
Building dependency tree... Done
The following packages have unmet dependencies:
 linux-image-extra-3.13.0-88-generic : Depends: linux-image-3.13.0-88-generic

When the standard apt-get remove fails, try these forceful methods:

# Method 1: Purge with dependency override
sudo dpkg --remove --force-remove-reinstreq linux-image-3.13.0-86-generic

# Method 2: Combined apt-get approach
sudo apt-get remove --ignore-missing linux-image-3.13.0-*

These dpkg force flags can help:

  • --force-remove-reinstreq: Override package reinstallation requirement
  • --force-depends: Ignore dependency problems
  • --force-all

Here's my tested cleanup sequence:

# First list all kernel packages
dpkg --list | grep linux-image

# Then remove specific versions (example)
sudo dpkg --purge --force-depends \
    linux-image-3.13.0-86-generic \
    linux-image-extra-3.13.0-86-generic

# Finally clean up dependencies
sudo apt-get -f install

Add these to your maintenance routine:

# Auto-remove old kernels
sudo apt-get install byobu
sudo purge-old-kernels

# Configure automatic cleanup
sudo apt-get install linux-image-extra-virtual
sudo apt-mark auto linux-image-extra-.*-generic

When all else fails, manually remove files:

# Check current kernel version
uname -r

# Navigate to /boot and remove old files
cd /boot
sudo rm vmlinuz-3.13.0-86-generic
sudo rm initrd.img-3.13.0-86-generic