A comprehensive guide to Linux package management, covering major package managers and solving the most common installation, update, and dependency issues.
- Overview of Package Managers
- APT (Ubuntu/Debian)
- YUM/DNF (RedHat/Fedora)
- Pacman (Arch Linux)
- Snap Packages
- Flatpak
- Common Package Issues
- Dependency Hell Solutions
- Package Security
- Best Practices
- Troubleshooting Checklist
Different Linux distributions use different package management systems:
| Distribution | Package Manager | Package Format | Command |
|---|---|---|---|
| Ubuntu/Debian | APT | .deb | apt, apt-get |
| RedHat/Fedora | YUM/DNF | .rpm | yum, dnf |
| Arch Linux | Pacman | .pkg.tar.xz | pacman |
| openSUSE | Zypper | .rpm | zypper |
| Universal | Snap | .snap | snap |
| Universal | Flatpak | .flatpak | flatpak |
APT (Advanced Package Tool) is the most widely used package manager for Debian-based distributions.
# Update package list
sudo apt update
# Upgrade all packages
sudo apt upgrade
# Upgrade distribution (more aggressive)
sudo apt dist-upgrade
# Install a package
sudo apt install package-name
# Install multiple packages
sudo apt install package1 package2 package3
# Install specific version
sudo apt install package-name=version
# Remove package (keep config files)
sudo apt remove package-name
# Remove package and config files
sudo apt purge package-name
# Remove unused dependencies
sudo apt autoremove
# Clean package cache
sudo apt autoclean
sudo apt clean
# Search for packages
apt search keyword
apt list --installed | grep package
# Show package information
apt show package-name
apt policy package-name# Fix broken packages
sudo apt --fix-broken install
sudo dpkg --configure -a
# Force package installation
sudo apt install --force-yes package-name
# Download package without installing
apt download package-name
# Simulate installation (dry run)
apt install --dry-run package-name
# Install from .deb file
sudo dpkg -i package.deb
sudo apt install -f # Fix dependencies after dpkg
# List all repositories
grep -r "^deb" /etc/apt/sources.list*
# Add repository
sudo add-apt-repository ppa:repository-name
sudo add-apt-repository "deb http://repository-url distribution component"
# Remove repository
sudo add-apt-repository --remove ppa:repository-nameError:
E: Unable to locate package package-name
Solutions:
# Update package list first
sudo apt update
# Check if package name is correct
apt search partial-name
# Check if universe/multiverse repos are enabled
sudo add-apt-repository universe
sudo add-apt-repository multiverse
sudo apt update
# For older Ubuntu versions, try backports
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc)-backports main restricted universe multiverse"Error:
E: Broken packages
E: Unable to correct problems, you have held broken packages
Solutions:
# Fix broken packages
sudo apt --fix-broken install
# Configure any unconfigured packages
sudo dpkg --configure -a
# Force remove problematic package
sudo dpkg --remove --force-remove-reinstreq package-name
# Clean cache and try again
sudo apt clean
sudo apt update
sudo apt upgrade
# Reset package to installable state
sudo apt-mark unhold package-nameError:
E: Failed to fetch ... Hash Sum mismatch
Solutions:
# Clean cache and update
sudo apt clean
sudo apt update
# Change download server
sudo apt-get -o Acquire::ForceIPv4=true update
# Manually clean specific package
sudo rm -rf /var/lib/apt/lists/*
sudo apt updateError:
E: Could not get lock /var/lib/dpkg/lock-frontend
Solutions:
# Wait for automatic updates to finish, or:
# Check what's using the lock
sudo lsof /var/lib/dpkg/lock-frontend
# Kill blocking processes (be careful!)
sudo killall apt apt-get
# Remove lock files (use as last resort)
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*
# Reconfigure dpkg
sudo dpkg --configure -aYUM (Yellowdog Updater Modified) and its successor DNF are used in RedHat-based distributions.
# Update package database
sudo yum update # CentOS/RHEL
sudo dnf update # Fedora
# Install package
sudo yum install package-name
sudo dnf install package-name
# Remove package
sudo yum remove package-name
sudo dnf remove package-name
# Search packages
yum search keyword
dnf search keyword
# List installed packages
yum list installed
dnf list installed
# Show package info
yum info package-name
dnf info package-name
# Clean cache
yum clean all
dnf clean all
# List available updates
yum check-update
dnf check-update
# Update specific package
sudo yum update package-name
sudo dnf update package-name# Install from URL
sudo yum install http://url/to/package.rpm
sudo dnf install http://url/to/package.rpm
# Install local RPM
sudo yum localinstall package.rpm
sudo dnf install package.rpm
# Download only
yumdownloader package-name
dnf download package-name
# Show dependencies
yum deplist package-name
dnf repoquery --requires package-name
# Enable/disable repositories
sudo yum-config-manager --enable repo-name
sudo dnf config-manager --enable repo-name
# Add repository
sudo yum-config-manager --add-repo=http://repo-url
sudo dnf config-manager --add-repo http://repo-url
# History
yum history
dnf historySolutions:
# Enable EPEL repository (CentOS/RHEL)
sudo yum install epel-release
# For Fedora, enable RPM Fusion
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
# Update package database
sudo yum update
sudo dnf update
# Search in all repositories
yum search all keyword
dnf search all keywordSolutions:
# Skip broken dependencies
sudo yum install --skip-broken package-name
# Force install (dangerous)
sudo rpm -ivh --force --nodeps package.rpm
# Clean metadata
sudo yum clean metadata
sudo dnf clean metadata
# Rebuild RPM database
sudo rpm --rebuilddbPacman is the package manager for Arch Linux and its derivatives.
# Update package database
sudo pacman -Sy
# Upgrade all packages
sudo pacman -Syu
# Install package
sudo pacman -S package-name
# Remove package
sudo pacman -R package-name
# Remove package and dependencies
sudo pacman -Rs package-name
# Remove package, dependencies, and config files
sudo pacman -Rns package-name
# Search packages
pacman -Ss keyword
# Search installed packages
pacman -Qs keyword
# Show package info
pacman -Si package-name # Repository info
pacman -Qi package-name # Installed info
# List installed packages
pacman -Q
# Clean cache
sudo pacman -Sc # Remove uninstalled packages
sudo pacman -Scc # Remove all cache
# Download only
sudo pacman -Sw package-name# Install AUR helper (yay)
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
# Use AUR helper
yay -S package-name
yay -Syu # Update system and AUR packages
yay -Ss keyword # Search AUR and reposSolutions:
# Update package database first
sudo pacman -Sy
# Search AUR
yay -Ss package-name
# Check if package name changed
pacman -Ss partial-nameSolutions:
# Force overwrite (be careful)
sudo pacman -S --overwrite='*' package-name
# Remove conflicting package first
sudo pacman -R conflicting-package
sudo pacman -S package-nameSnap packages are universal packages that work across different Linux distributions.
# Install snapd
sudo apt install snapd # Ubuntu/Debian
sudo yum install snapd # CentOS/RHEL
sudo pacman -S snapd # Arch
# Install snap package
sudo snap install package-name
# Install from specific channel
sudo snap install package-name --channel=stable/beta/edge
# List installed snaps
snap list
# Update all snaps
sudo snap refresh
# Update specific snap
sudo snap refresh package-name
# Remove snap
sudo snap remove package-name
# Search snaps
snap find keyword
# Show snap info
snap info package-name
# Connect interfaces (permissions)
sudo snap connect package-name:interface# Check snap services
systemctl status snapd
# Enable snap service
sudo systemctl enable --now snapd
# Mount snap directory
sudo mount -t squashfs /var/lib/snapd/snaps/core_*.snap /mnt
# Fix snap permissions
sudo snap refresh core
sudo snap refresh snapd
# Clear snap cache
sudo rm -rf /var/lib/snapd/cache/*Flatpak is another universal package format focusing on sandboxed applications.
# Install Flatpak
sudo apt install flatpak # Ubuntu/Debian
sudo yum install flatpak # CentOS/RHEL
sudo pacman -S flatpak # Arch
# Add Flathub repository
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Install application
flatpak install flathub app.name
# Run application
flatpak run app.name
# List installed apps
flatpak list
# Update all apps
flatpak update
# Remove app
flatpak uninstall app.name
# Search apps
flatpak search keyword
# Show app info
flatpak info app.nameProblem: Circular dependencies or conflicting package versions.
Solutions:
# APT
sudo apt autoremove
sudo apt autoclean
sudo apt --fix-broken install
# YUM/DNF
sudo yum remove conflicting-package
sudo yum clean all
sudo yum update
# Pacman
sudo pacman -Rns problematic-package
sudo pacman -Syu
# Use alternative packages
apt search alternative-nameProblem: Repository not accessible or corrupted.
Solutions:
# Check internet connection
ping google.com
# Try different mirror
sudo apt edit-sources # Edit /etc/apt/sources.list
# Reset repositories to default
sudo rm /etc/apt/sources.list
sudo apt-add-repository main
sudo apt update
# For YUM/DNF
yum repolist
dnf repolist enabledProblem: Package verification fails.
Solutions:
# APT - add missing key
wget -qO - https://repo.example.com/key.gpg | sudo apt-key add -
# YUM/DNF - import key
sudo rpm --import https://repo.example.com/RPM-GPG-KEY
# Skip signature check (not recommended)
sudo apt install --allow-unauthenticated package-name
sudo yum install --nogpgcheck package-nameProblem: Not enough space for package installation.
Solutions:
# Check disk space
df -h
# Clean package cache
sudo apt clean
sudo yum clean all
sudo pacman -Scc
# Remove old kernels
sudo apt autoremove
# Find large packages
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n | tail -20# Show package dependencies
apt-cache depends package-name # APT
yum deplist package-name # YUM
pacman -Si package-name # Pacman
# Show reverse dependencies (what depends on this package)
apt-cache rdepends package-name
yum whatrequires package-name
pacman -Qi package-name
# Show why package is installed
apt-mark showmanual
yum history info package-name
pacman -Qi package-name# APT conflict resolution
sudo apt install package-name --fix-missing
sudo apt-get -f install
# YUM conflict resolution
sudo yum shell
> remove conflicting-package
> install desired-package
> run
# Manual dependency resolution
# 1. Identify conflicting packages
# 2. Remove least important one
# 3. Install desired package
# 4. Try to reinstall removed package if needed# APT - verify installed packages
debsums -c
# YUM/DNF - verify package
rpm -V package-name
# Check package signatures
apt-key list
rpm -qa gpg-pubkey*
# Verify downloaded package
dpkg-sig --verify package.deb
rpm --checksig package.rpm# Only use official repositories
sudo apt update
sudo apt list --upgradable
# Verify repository keys
apt-key list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEYID
# Keep system updated
sudo apt upgrade
sudo yum update
sudo pacman -Syu
# Remove unnecessary packages
sudo apt autoremove
sudo yum autoremove
sudo pacman -Rns $(pacman -Qtdq)# Weekly maintenance script
#!/bin/bash
# Update package lists
sudo apt update
# Upgrade packages
sudo apt upgrade -y
# Remove unnecessary packages
sudo apt autoremove -y
# Clean package cache
sudo apt autoclean
# Check for broken packages
sudo apt --fix-broken install# Always update before installing
sudo apt update && sudo apt install package-name
# Use simulation mode first
apt install --dry-run package-name
# Read package descriptions
apt show package-name
# Check dependencies
apt-cache depends package-name
# Install from official sources first
apt policy package-name# Hold package at current version
sudo apt-mark hold package-name
# Show held packages
apt-mark showhold
# Unhold package
sudo apt-mark unhold package-name
# Pin specific version (APT)
echo "Package: package-name
Pin: version 1.2.3
Pin-Priority: 1001" | sudo tee /etc/apt/preferences.d/package-name
# Lock package version (YUM)
yum versionlock package-name# 1. Check network connectivity
ping 8.8.8.8
curl -I https://google.com
# 2. Update package database
sudo apt update
sudo yum check-update
sudo pacman -Sy
# 3. Check disk space
df -h
du -sh /var/cache/apt/
du -sh /var/cache/yum/
# 4. Check for lock files
sudo lsof /var/lib/dpkg/lock-frontend
sudo lsof /var/run/yum.pid
# 5. Verify repository configuration
cat /etc/apt/sources.list
yum repolist
cat /etc/pacman.conf
# 6. Check system logs
sudo journalctl -u apt-daily
sudo tail -f /var/log/yum.log
sudo journalctl -u package-manager# Complete APT reset
sudo rm -rf /var/lib/apt/lists/*
sudo apt clean
sudo apt update
# Force package reconfiguration
sudo dpkg --configure -a
sudo apt --fix-broken install
# RPM database rebuild
sudo rpm --rebuilddb
sudo yum clean all
# Pacman keyring reset
sudo pacman-key --init
sudo pacman-key --populate archlinux
sudo pacman -Sy archlinux-keyringsudo apt update && sudo apt upgrade # Update system
sudo apt install package-name # Install package
sudo apt remove package-name # Remove package
sudo apt search keyword # Search packages
sudo apt --fix-broken install # Fix broken packagessudo yum update # Update system
sudo yum install package-name # Install package
sudo yum remove package-name # Remove package
yum search keyword # Search packages
sudo yum clean all # Clean cachesudo pacman -Syu # Update system
sudo pacman -S package-name # Install package
sudo pacman -R package-name # Remove package
pacman -Ss keyword # Search packages
sudo pacman -Sc # Clean cache# Package not found
sudo apt update # Update package list first
# Broken packages
sudo apt --fix-broken install # Fix dependencies
# Lock file error
sudo killall apt && sudo rm /var/lib/dpkg/lock*
# Dependency issues
sudo apt autoremove # Remove unused dependencies
# Repository errors
sudo apt-get update --fix-missing # Skip problematic repos# Create directory structure
mkdir -p myrepo/{dists/stable/main/binary-amd64,pool/main}
# Generate Packages file
cd myrepo
dpkg-scanpackages pool/main /dev/null | gzip -9c > dists/stable/main/binary-amd64/Packages.gz
# Generate Release file
cd dists/stable
apt-ftparchive release . > Release
# Sign repository
gpg --clearsign -o InRelease Release# Install createrepo
sudo yum install createrepo
# Create repository
mkdir myrepo
cp *.rpm myrepo/
createrepo myrepo/
# Add to yum config
echo "[myrepo]
name=My Repository
baseurl=file:///path/to/myrepo
enabled=1
gpgcheck=0" | sudo tee /etc/yum.repos.d/myrepo.repo# Install build tools
sudo apt install build-essential devscripts debhelper
# Create package structure
dh_make --createorig
debuild -us -uc# Install build tools
sudo yum install rpm-build rpmdevtools
# Create build environment
rpmdev-setuptree
# Build package
rpmbuild -ba package.spec- Manual pages:
man apt,man yum,man pacman - Package manager documentation: Official distribution docs
- Community forums: Ask Ubuntu, Fedora Forums, Arch Wiki
- Package search websites: packages.ubuntu.com, rpmfind.net, archlinux.org/packages
This guide covers the essential package management scenarios across major Linux distributions. Proper package management is crucial for system stability and security.