Skip to main content

Package Management

Distribution-Specific Package Managers

Debian/Ubuntu (APT)

# Package database management
sudo apt update # Update package list
sudo apt upgrade # Upgrade installed packages
sudo apt full-upgrade # Upgrade with dependency resolution
sudo apt dist-upgrade # Distribution upgrade

# Package installation
sudo apt install package # Install package
sudo apt install package=version # Install specific version
sudo apt install -y package # Install without prompts
sudo apt install --no-install-recommends package # Minimal install
sudo apt install ./package.deb # Install local .deb file

# Package removal
sudo apt remove package # Remove package (keep config)
sudo apt purge package # Remove package and config
sudo apt autoremove # Remove unused dependencies
sudo apt autoclean # Clean package cache

# Package information
apt search pattern # Search for packages
apt show package # Show package details
apt list --installed # List installed packages
apt list --upgradable # List upgradable packages
dpkg -l # List all installed packages
dpkg -L package # List files in package
dpkg -S /path/to/file # Find package owning file

Red Hat/CentOS/Fedora (YUM/DNF)

# Package database management
sudo yum update # Update all packages (RHEL/CentOS)
sudo dnf update # Update all packages (Fedora)
sudo yum check-update # Check for updates
sudo dnf upgrade # Upgrade packages (Fedora)

# Package installation
sudo yum install package # Install package
sudo dnf install package # Install package (Fedora)
sudo yum install -y package # Install without prompts
sudo yum localinstall package.rpm # Install local RPM
sudo dnf install ./package.rpm # Install local RPM (Fedora)

# Package removal
sudo yum remove package # Remove package
sudo dnf remove package # Remove package (Fedora)
sudo yum autoremove # Remove unused dependencies
sudo dnf autoremove # Remove unused dependencies (Fedora)

# Package information
yum search pattern # Search for packages
dnf search pattern # Search for packages (Fedora)
yum info package # Show package details
dnf info package # Show package details (Fedora)
yum list installed # List installed packages
dnf list installed # List installed packages (Fedora)
rpm -qa # List all installed packages
rpm -ql package # List files in package
rpm -qf /path/to/file # Find package owning file

Arch Linux (Pacman)

# Package database management
sudo pacman -Sy # Update package database
sudo pacman -Syu # Full system upgrade
sudo pacman -Syyu # Force refresh and upgrade

# Package installation
sudo pacman -S package # Install package
sudo pacman -S --needed package # Install if not already installed
sudo pacman -U package.pkg.tar.xz # Install local package

# Package removal
sudo pacman -R package # Remove package
sudo pacman -Rs package # Remove package and dependencies
sudo pacman -Rns package # Remove package, deps, and config
sudo pacman -Rdd package # Force remove (dangerous)

# Package information
pacman -Ss pattern # Search for packages
pacman -Si package # Show package info
pacman -Q # List installed packages
pacman -Ql package # List files in package
pacman -Qo /path/to/file # Find package owning file
pacman -Qdt # List orphaned packages

# Cache management
sudo pacman -Sc # Clean package cache
sudo pacman -Scc # Clean all cache

openSUSE (Zypper)

# Package database management
sudo zypper refresh # Refresh repositories
sudo zypper update # Update installed packages
sudo zypper dup # Distribution upgrade

# Package installation
sudo zypper install package # Install package
sudo zypper in package # Install package (short form)
sudo zypper install -y package # Install without prompts

# Package removal
sudo zypper remove package # Remove package
sudo zypper rm package # Remove package (short form)

# Package information
zypper search pattern # Search for packages
zypper info package # Show package details
zypper pa --installed-only # List installed packages
rpm -ql package # List files in package

Alpine Linux (APK)

# Package database management
apk update # Update package index
apk upgrade # Upgrade installed packages

# Package installation
apk add package # Install package
apk add --no-cache package # Install without caching
apk add package=version # Install specific version

# Package removal
apk del package # Remove package

# Package information
apk search pattern # Search for packages
apk info package # Show package details
apk list -I # List installed packages
apk info -L package # List files in package

Repository Management

APT Repository Management

# Repository configuration
sudo add-apt-repository ppa:user/ppa # Add PPA
sudo add-apt-repository -r ppa:user/ppa # Remove PPA
sudo apt-key add key.asc # Add GPG key
sudo apt-key list # List GPG keys

# Manual repository addition
echo "deb http://repo.example.com/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/example.list

# Repository information
apt-cache policy # Show repository priorities
apt-cache madison package # Show available versions

YUM/DNF Repository Management

# Repository management
sudo yum-config-manager --add-repo http://repo.example.com/repo.repo
sudo dnf config-manager --add-repo http://repo.example.com/repo.repo
sudo yum-config-manager --enable repo-name
sudo yum-config-manager --disable repo-name

# Repository information
yum repolist # List enabled repositories
dnf repolist # List enabled repositories (Fedora)
yum repoinfo repo-name # Show repository info

Pacman Repository Management

# Repository configuration (edit /etc/pacman.conf)
sudo vim /etc/pacman.conf

# Add repository
[repository-name]
Server = https://repo.example.com/$arch

# Refresh after adding repository
sudo pacman -Sy

Software Compilation from Source

Make/Autotools

# Traditional autotools build
./configure # Configure build
./configure --prefix=/usr/local # Custom install prefix
make # Compile
make -j$(nproc) # Parallel compilation
sudo make install # Install
sudo make uninstall # Uninstall (if supported)

# Common configure options
./configure --help # Show configure options
./configure --disable-feature # Disable feature
./configure --enable-feature # Enable feature

CMake

# CMake build process
mkdir build && cd build # Create build directory
cmake .. # Configure build
cmake -DCMAKE_BUILD_TYPE=Release .. # Release build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. # Custom prefix
make # Compile
make -j$(nproc) # Parallel compilation
sudo make install # Install

# CMake options
cmake -DCMAKE_BUILD_TYPE=Debug .. # Debug build
cmake -DBUILD_SHARED_LIBS=ON .. # Build shared libraries

Ninja Build System

# Using Ninja with CMake
cmake -GNinja .. # Generate Ninja build files
ninja # Build with Ninja
ninja install # Install

Building Dependencies

# Install build dependencies (Debian/Ubuntu)
sudo apt install build-essential
sudo apt build-dep package-name

# Install build dependencies (RHEL/CentOS)
sudo yum groupinstall "Development Tools"
sudo yum-builddep package-name

# Install build dependencies (Fedora)
sudo dnf install @development-tools
sudo dnf builddep package-name

Dependency Management

Dependency Resolution

# APT dependency management
apt-cache depends package # Show package dependencies
apt-cache rdepends package # Show reverse dependencies
apt-mark hold package # Hold package version
apt-mark unhold package # Unhold package

# YUM/DNF dependency management
yum deplist package # Show dependencies
dnf repoquery --requires package # Show requirements
yum history # Show transaction history
dnf history # Show transaction history (Fedora)

# Pacman dependency management
pactree package # Show dependency tree
pactree -r package # Show reverse dependencies

Broken Dependencies

# Fix broken dependencies (APT)
sudo apt --fix-broken install
sudo apt install -f
sudo dpkg --configure -a

# Fix broken dependencies (YUM/DNF)
sudo yum check
sudo yum clean all && sudo yum update
sudo dnf check
sudo dnf clean all && sudo dnf update

Third-Party Package Managers

Snap Packages

# Snap management
sudo snap install package # Install snap package
sudo snap install --classic package # Install with classic confinement
sudo snap remove package # Remove snap package
sudo snap refresh # Update all snaps
sudo snap refresh package # Update specific snap

# Snap information
snap find pattern # Search for snaps
snap info package # Show snap details
snap list # List installed snaps
snap services # List snap services

Flatpak

# Flatpak management
flatpak install flathub app.id # Install from Flathub
flatpak install app.flatpak # Install local flatpak
flatpak uninstall app.id # Uninstall application
flatpak update # Update all flatpaks
flatpak update app.id # Update specific app

# Flatpak information
flatpak search pattern # Search for flatpaks
flatpak info app.id # Show app details
flatpak list # List installed flatpaks
flatpak remote-ls flathub # List remote repository apps

# Repository management
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak remote-list # List repositories

AppImage

# AppImage usage
chmod +x application.AppImage # Make executable
./application.AppImage # Run AppImage

# AppImage management tools
# Install AppImageLauncher for system integration
sudo apt install appimagelauncher

# Extract AppImage contents
./application.AppImage --appimage-extract

Package Signing and Verification

GPG Key Management

# APT key management
sudo apt-key add key.asc # Add GPG key
sudo apt-key list # List GPG keys
sudo apt-key del KEYID # Remove GPG key

# Manual key verification
gpg --keyserver keyserver.ubuntu.com --recv-keys KEYID
gpg --export --armor KEYID | sudo apt-key add -

Package Verification

# Verify APT packages
apt-cache policy package # Check package authenticity
debsums -s # Verify installed packages

# Verify RPM packages
rpm -Va # Verify all packages
rpm -V package # Verify specific package
rpm --checksig package.rpm # Check RPM signature

# Verify Pacman packages
pacman -Qk # Check all packages
pacman -Qk package # Check specific package

Package Troubleshooting

Common Issues and Solutions

# APT lock issues
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*
sudo dpkg --configure -a

# Corrupted package database
sudo apt clean
sudo apt autoclean
sudo apt update

# Package conflicts
sudo apt install -f # Fix broken packages
sudo dpkg --configure -a # Configure pending packages

Package State Recovery

# Reset package state (APT)
sudo apt clean all
sudo apt update
sudo apt upgrade

# Reset package state (YUM/DNF)
sudo yum clean all
sudo yum makecache
sudo yum update

# Reset package state (Pacman)
sudo pacman -Sc
sudo pacman -Sy

Version Management

Version Pinning

# APT version pinning
sudo apt-mark hold package # Hold current version
sudo apt-mark unhold package # Unhold version
apt-cache policy package # Check version policy

# Create apt preferences
sudo vim /etc/apt/preferences.d/package-pin
# Content:
Package: package-name
Pin: version 1.2.3
Pin-Priority: 1001

# YUM version locking
sudo yum install yum-plugin-versionlock
sudo yum versionlock add package
sudo yum versionlock list
sudo yum versionlock delete package

Downgrading Packages

# Downgrade APT package
sudo apt install package=version

# Downgrade YUM package
sudo yum downgrade package

# Downgrade Pacman package
sudo pacman -U /var/cache/pacman/pkg/package-version.pkg.tar.xz

Package Cleanup and Maintenance

Cache Management

# APT cache cleanup
sudo apt autoclean # Remove partial packages
sudo apt clean # Remove all cached packages
sudo apt autoremove # Remove unused dependencies

# YUM/DNF cache cleanup
sudo yum clean all # Clean all cache
sudo dnf clean all # Clean all cache (Fedora)
sudo yum autoremove # Remove unused packages

# Pacman cache cleanup
sudo pacman -Sc # Clean package cache
sudo pacman -Scc # Clean all cache
sudo pacman -Rns $(pacman -Qtdq) # Remove orphaned packages

System Maintenance

# Check for broken packages
sudo apt check # Check for broken packages
sudo yum check # Check for problems
sudo pacman -Qk # Check package integrity

# Update package databases
sudo apt update && sudo apt upgrade
sudo yum update
sudo dnf update
sudo pacman -Syu

# Clean up package files
sudo apt autoremove && sudo apt autoclean
sudo yum autoremove && sudo yum clean all
sudo pacman -Rns $(pacman -Qtdq) && sudo pacman -Sc

Package Creation and Maintenance

Creating DEB Packages

# Basic DEB package structure
mkdir -p package/DEBIAN
mkdir -p package/usr/bin

# Create control file
cat > package/DEBIAN/control << EOF
Package: mypackage
Version: 1.0
Section: utils
Priority: optional
Architecture: all
Maintainer: Your Name <your.email@example.com>
Description: My custom package
EOF

# Build package
dpkg-deb --build package mypackage_1.0_all.deb

Creating RPM Packages

# Install RPM build tools
sudo yum install rpm-build rpmdevtools

# Create RPM build environment
rpmdev-setuptree

# Create spec file
rpmdev-newspec mypackage

# Build RPM
rpmbuild -ba ~/rpmbuild/SPECS/mypackage.spec

Creating Pacman Packages

# Create PKGBUILD file
cat > PKGBUILD << EOF
pkgname=mypackage
pkgver=1.0
pkgrel=1
pkgdesc="My custom package"
arch=('any')
url="https://example.com"
license=('GPL')
source=("mypackage.tar.gz")
md5sums=('checksum')

package() {
cd "$pkgname-$pkgver"
make DESTDIR="$pkgdir/" install
}
EOF

# Build package
makepkg -s

Advanced Package Operations

Package Queries and Analysis

# Advanced package queries
dpkg-query -W -f='${Installed-Size;10}\t${Package}\n' | sort -k1,1n # Sort by size
rpm -qa --qf '%{SIZE} %{NAME}\n' | sort -n # Sort RPM packages by size
pacman -Qi | grep 'Installed Size' | sort -h # Sort Pacman packages by size

# Find configuration files
dpkg -L package | grep /etc/
rpm -qc package
pacman -Ql package | grep /etc/

# Package file conflicts
dpkg -S /path/to/file # Find package owning file
rpm -qf /path/to/file # Find package owning file
pacman -Qo /path/to/file # Find package owning file

Batch Operations

# Bulk package operations
apt list --installed | awk -F/ '{print $1}' | xargs sudo apt remove # Remove all
yum list installed | awk '{print $1}' | xargs sudo yum remove # Remove all
pacman -Qe | awk '{print $1}' | xargs sudo pacman -Rs # Remove explicitly installed

# Export/import package lists
dpkg --get-selections > package-list.txt
dpkg --set-selections < package-list.txt
sudo apt dselect-upgrade