PPAs & Third-Party Repos
PPAs and third-party repositories extend package availability beyond official repositories.
PPAs (Ubuntu Only)
What are PPAs?
-
Personal Package Archives hosted on Launchpad
-
Ubuntu-specific (not available on Debian)
-
Community-maintained - varying quality
-
Format:
ppa:user/repository
Add PPA
# Add PPA
sudo add-apt-repository ppa:user/repository
# Update and install
sudo apt update
sudo apt install package
Common Useful PPAs
# Graphics drivers
sudo add-apt-repository ppa:graphics-drivers/ppa
# Git latest
sudo add-apt-repository ppa:git-core/ppa
# LibreOffice latest
sudo add-apt-repository ppa:libreoffice/ppa
Third-Party Repositories
Modern Method (Signed Repositories)
# 1. Create keyrings directory
sudo install -m 0755 -d /etc/apt/keyrings
# 2. Download and convert GPG key
curl -fsSL https://example.com/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg
# 3. Add repository with signed-by
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/example.gpg] https://example.com/repo stable main" | \
sudo tee /etc/apt/sources.list.d/example.list
# 4. Update
sudo apt update
Common Third-Party Repos
Docker
# Add GPG key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Add repository (Debian)
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
# Add repository (Ubuntu)
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
# Install
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
VS Code
# Add GPG key
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/keyrings/microsoft.gpg
# Add repository
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | \
sudo tee /etc/apt/sources.list.d/vscode.list
# Install
sudo apt update
sudo apt install code
Node.js (NodeSource)
# Add repository (Node 20)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# Install
sudo apt install nodejs
PostgreSQL
# Add GPG key
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/keyrings/postgresql.gpg
# Add repository
echo "deb [signed-by=/etc/apt/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | \
sudo tee /etc/apt/sources.list.d/postgresql.list
# Install
sudo apt update
sudo apt install postgresql-16
Debian Backports
Flatpak
Snap (Ubuntu)
Basic Usage
# Search
snap find term
# Install
sudo snap install package
# Install classic (no confinement)
sudo snap install --classic package
# List installed
snap list
# Update all
sudo snap refresh
Remove Snap (Ubuntu)
# List snaps
snap list
# Remove each snap
sudo snap remove package
# Stop and disable snapd
sudo systemctl stop snapd
sudo systemctl disable snapd
# Remove snapd
sudo apt purge snapd
# Prevent reinstall
cat <<EOF | sudo tee /etc/apt/preferences.d/nosnap.pref
Package: snapd
Pin: release a=*
Pin-Priority: -10
EOF
Repository Best Practices
Security Considerations
# Always use signed-by for third-party repos
# Store keys in /etc/apt/keyrings/
# Verify GPG key fingerprints
gpg --show-keys /etc/apt/keyrings/example.gpg