How To Install Deb On Linux

How To Install Deb On Linux

Reading time1 min
#Linux#OpenSource#Software#Debian#DebPackages#PackageManagement

Mastering .deb Installation on Linux: Reliable Methods for Direct Package Management

Occasionally, the package you need isn’t in the official repositories—or the version offered lags behind what upstream maintains. On Debian-based systems (Debian, Ubuntu 18.04+ LTS, Pop!_OS 21.10, etc.), direct .deb installation remains a pragmatic solution, but it isn’t bulletproof. Installing a .deb without care can introduce unmet dependencies, conflicting versions, or, in edge cases, a broken package state.


Real-World Scenario: Chrome Update on Ubuntu LTS

Say you’re deploying Google Chrome version 125 on Ubuntu 22.04 LTS. It isn’t shipped in official apt sources, nor do you want Snap overhead. The vendor provides a .deb—but there’s a risk: mismatches in system dependencies, or residual config after an upgrade. Let’s approach this as a systems engineer would.

Download the package from the official source

Never trust random mirrors. For Chrome:

curl -O https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

SHA256 checksums are typically linked on vendor pages—validate integrity before trusting the binary:

sha256sum google-chrome-stable_current_amd64.deb
# Match this output to the vendor’s published hash

Understanding the Mechanics: What is a .deb?

A .deb is an ar(1) archive. It contains binaries, install scripts (preinst, postinst, prerm, postrm), and dependency metadata. Critically, .deb files do not resolve dependencies themselves—that’s left to the environment and the package management tools.


Installation Methods

dpkg (low-level, no dependency resolution)

sudo dpkg -i google-chrome-stable_current_amd64.deb

If all dependencies exist, installation is silent. If not, expect output such as:

dpkg: dependency problems prevent configuration of google-chrome-stable:
 google-chrome-stable depends on libnss3 (>= 2:3.26); however:
  Package libnss3 is not installed.

At this stage, the system is in a semi-configured state; the package is listed as “unconfigured” in dpkg -l.

To repair:

sudo apt-get install -f

This triggers dependency resolution and reconfigures the problem package.

apt (preferred on Ubuntu 16.04+, resolves dependencies in one step)

sudo apt install ./google-chrome-stable_current_amd64.deb

The leading ./ is non-optional. Without it, apt expects package names, not files. This command handles all required dependencies automatically, minimizing the risk of a half-installed package.


Inspect Before You Trust

Security is not optional at system boundaries. Audit an untrusted .deb before execution:

dpkg-deb --info google-chrome-stable_current_amd64.deb
dpkg-deb --contents google-chrome-stable_current_amd64.deb | less

Look specifically for unexpected pre/post-install scripts—these are where package maintainers can introduce silent network calls, systemd service manipulation, or worse.


Cleanup and Uninstallation

When it’s time to remove, don’t reference the original filename: identify the canonical package name.

dpkg -l | grep chrome
sudo apt remove google-chrome-stable
# Deeper purge (also removes config in /etc, /var):
sudo apt purge google-chrome-stable

Manual deletion of files is rarely justified—leave the task to apt or risk orphaned libraries and broken symlinks.


Troubleshooting: Recurring Pitfalls

  • “Held broken packages” error

    sudo apt --fix-broken install
    dpkg --get-selections | grep hold
    sudo apt-mark unhold <package-name>
    
  • Stale package cache or dependency tree issues

    sudo apt update
    sudo apt upgrade
    sudo apt autoremove
    
  • Non-obvious tip: Some .debs (notably older printer drivers or niche vendor utilities) bundle deprecated dependencies no longer available in your current release. In such cases, try installing in a container or VM snapshot first, or use dpkg -x to extract files for manual inspection/deployment.


Cheat Sheet

OperationCommand
Install (low-level)sudo dpkg -i package.deb
Fix unresolved dependssudo apt-get install -f
Install (recommended)sudo apt install ./package.deb
List package contentdpkg-deb --contents package.deb
Show metadatadpkg-deb --info package.deb
Remove by namesudo apt remove package-name
Full purgesudo apt purge package-name

Additional Notes

  • On systems with mixed apt and snapd ecosystems, be aware that some generic commands like apt install chrome might pull the Snap version instead. Always specify the local file path (./) for the direct .deb route.
  • For mass deployment (CI pipelines, provisioning), check the return codes on every step. Silent errors from dpkg can accumulate and only reveal themselves at CI run integration time.
  • Known issue: Installing locally-built .deb files that depend on “virtual” metapackages (like libc6 or libstdc++6 virtual packages) may appear to succeed but leave binary incompatibility at runtime. Validate with ldd or equivalent tooling post-install.

Mastering manual .deb installations provides granular control, but demands diligence in validation, dependency management, and cleanup. In most cases, sudo apt install ./package.deb is sufficient and robust, yet layered verification remains your best safeguard.

No installer is perfect. Always be prepared to recover (system snapshots, backups) before modifying fundamental system packages.