Fixed: The Following Packages Have Been Kept Back

When running apt upgrade on Debian/Ubuntu systems, you may encounter the following error message:

The following packages have been kept back:
  package1 package2 package3

This confusing message indicates some packages are being “held back” from upgrading.

In this comprehensive guide, we’ll cover:

  • What causes packages to be kept back
  • How to interpret and resolve this message
  • Fixing held packages using apt tools
  • Troubleshooting tips for complex issues
  • Best practices for avoiding package hold backs

Understanding and properly fixing held packages is key to smooth systems administration on Linux. Let’s dive in!

Understanding the “Packages Have Been Kept Back” Error

The “kept back” error occurs because apt has determined that upgrading some packages would require uninstalling or breaking other packages dependencies.

To avoid potential issues, it conservatively keeps those packages at their current version.

Some common reasons packages may be kept back include:

  • Dependency conflicts or mismatches
  • Essential packages would be removed
  • Held packages have broken dependencies
  • Package pinning can hold back upgrades

Let’s explore these causes in more detail.

Why Packages Get Held Back From Upgrading

Packages are typically kept back for:

Dependency Conflicts

If Package A requires Version > 2.0 of Package B, but Package B is pinned at 1.5, Package A will be kept back to avoid breaking dependencies.

Essential Package Removals

Package A requires new deps that would force removing an essential Package B, so Package A is kept back.

Broken Dependencies

Package A’s deps are all upgraded in a new version, so installing it would break things.

Manual Pinning

Manually pinning Package A at a specific version prevents automatic upgrades.

Understanding the web of package dependencies helps clarify why apt “plays it safe” by keeping certain packages back.

Now let’s look at solutions to allow upgrading the held packages.

Using apt Commands to Fix and Upgrade Held Packages

apt provides several options to upgrade held packages once you understand the cause:

Run apt dist-upgrade

apt dist-upgrade smartly handles dependencies and will attempt to upgrade kept back packages.

sudo apt update
sudo apt dist-upgrade

This preserves dependencies while upgrading packages if possible.

Use apt install package=version

Installing an explicit package version can satisfy requirements:

# Install specific version of held package 
sudo apt install package=1.5.2

This bypasses dependency checks to force a new version.

Set APT preferences

Create an /etc/apt/preferences file to control package priorities and pinning.

Prioritize certain packages and versions over others.

Remove problematic packages

Identifying obsolete or problematic packages and removing them can resolve conflicts preventing upgrades.

# Remove package causing issues 
sudo apt remove package_name

# Remove configuration files too
sudo apt purge package_name

Pruning problematic packages can allow held packages to then upgrade.

Troubleshooting Persistent Held Package Issues

For recurring or tricky issues with held packages, try:

Identify blocking packages

Use apt-cache to see dependencies:

apt-cache depends blocking-package

This reveals lower-level requirements that could be root cause.

Inspect apt log files

Logs provide details on what is triggering the hold back:

less /var/log/apt/term.log

Look for clues on dependency conflicts.

Perform trial runs

Test upgrades without committing changes:

apt --dry-run dist-upgrade

The dry run outlines potential changes, useful for debugging.

Update incrementally

Upgrade in smaller batches vs all at once:

apt upgrade package1 package2

Incremental upgrades often avoid hitting large dependency issues.

Best Practices for Avoiding Held Back Packages

Here are some tips for proactively preventing packages being held back:

  • Frequently update packages – Don’t let packages lag multiple versions behind
  • Avoid manually pinning versions – Let apt manage dependencies
  • Clean up unused packages – Prune obsolete packages with autoremove
  • Check for configuration changes on upgrades – Adjust configs if needed
  • Review new dependencies – Understand needs of new package versions
  • Perform releases upgrades – Major version jumps can have new dependency requirements
  • Use a test environment – Test upgrades safely in a non-production setup first

Carefully managing packages and dependencies avoids surprise holds during upgrades.

Resolving “Held Packages” Errors – Recap

To summarize, you can resolve the “following packages have been kept back” error using:

  • apt dist-upgrade – Safely upgrade packages respecting dependencies
  • Explicit apt install package=version – Force a specific version
  • APT preferences – Control packages versions and pinning
  • Removing problematic packages – Delete obsolete packages causing issues
  • Checking logs and dependencies – Troubleshoot the root cause
  • Testing upgrades before deploying – Validate in staging environments

Combining these solutions will help you upgrade any held packages.

Conclusion

The “following packages have been kept back” error occurs when apt avoids upgrading packages that would break dependencies.

Using apt tools to safely upgrade packages, adjusting dependency priorities, and incrementally updating packages prevents issues.

Learning to interpret and resolve held packages will equip you to smoothly administer Linux systems and keep packages current. Now you have a guide to overcoming this common apt upgrade roadblock!

Leave a Comment