Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

README.md

Package Management Guide

A comprehensive guide to Linux package management, covering major package managers and solving the most common installation, update, and dependency issues.


Table of Contents


Overview of Package Managers

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 (Ubuntu/Debian)

APT (Advanced Package Tool) is the most widely used package manager for Debian-based distributions.

Basic APT Commands

# 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

Advanced APT Usage

# 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-name

Common APT Issues and Solutions

1. "Package not found"

Error:

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"

2. "Broken packages"

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-name

3. "Hash Sum mismatch"

Error:

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 update

4. "Lock file" errors

Error:

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 -a

YUM/DNF (RedHat/Fedora)

YUM (Yellowdog Updater Modified) and its successor DNF are used in RedHat-based distributions.

Basic YUM/DNF Commands

# 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

Advanced YUM/DNF Usage

# 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 history

Common YUM/DNF Issues

1. "No package available"

Solutions:

# 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 keyword

2. "Dependency errors"

Solutions:

# 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 --rebuilddb

Pacman (Arch Linux)

Pacman is the package manager for Arch Linux and its derivatives.

Basic Pacman Commands

# 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

AUR (Arch User Repository)

# 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 repos

Common Pacman Issues

1. "Package not found"

Solutions:

# Update package database first
sudo pacman -Sy

# Search AUR
yay -Ss package-name

# Check if package name changed
pacman -Ss partial-name

2. "Conflicting files"

Solutions:

# Force overwrite (be careful)
sudo pacman -S --overwrite='*' package-name

# Remove conflicting package first
sudo pacman -R conflicting-package
sudo pacman -S package-name

Snap Packages

Snap packages are universal packages that work across different Linux distributions.

Basic Snap Commands

# 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

Snap Troubleshooting

# 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

Flatpak is another universal package format focusing on sandboxed applications.

Basic Flatpak Commands

# 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.name

Common Package Issues

1. Dependency Hell

Problem: 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-name

2. Repository Issues

Problem: 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 enabled

3. Signature/GPG Key Errors

Problem: 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-name

4. Disk Space Issues

Problem: 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

Dependency Hell Solutions

Understanding Dependencies

# 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

Resolving Conflicts

# 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

Package Security

Verifying Package Integrity

# 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

Security Best Practices

# 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)

Best Practices

Regular Maintenance

# 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

Safe Package Installation

# 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

Version Pinning

# 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

Troubleshooting Checklist

Step-by-Step Diagnosis

# 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

Emergency Package Fixes

# 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-keyring

Quick Reference

Essential Commands by Distribution

Ubuntu/Debian (APT)

sudo 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 packages

CentOS/RHEL/Fedora (YUM/DNF)

sudo 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 cache

Arch Linux (Pacman)

sudo 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

Common Error Quick Fixes

# 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

Advanced Topics

Creating Custom Repositories

APT Repository

# 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

YUM Repository

# 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

Package Building

DEB Package Building

# Install build tools
sudo apt install build-essential devscripts debhelper

# Create package structure
dh_make --createorig
debuild -us -uc

RPM Package Building

# Install build tools
sudo yum install rpm-build rpmdevtools

# Create build environment
rpmdev-setuptree

# Build package
rpmbuild -ba package.spec

Getting Help

  • 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.