Every Debian or Ubuntu user has wrestled with installing software that isn’t in the official apt repositories. PPAs, third-party apt repos, GitHub Releases, direct downloads — the .deb ecosystem fragments quickly, leaving you juggling multiple tools and manual steps. deb-get steps in as a shell script that extends apt-get, aiming to unify these various sources under one CLI with a curated package index.
What deb-get does and how it works
deb-get is a shell script-based tool designed to handle .deb package installation, updates, and removal from third-party sources that standard apt-get doesn’t cover. It supports packages from third-party apt repositories, PPAs, GitHub Releases, and direct downloads — all via a single CLI interface similar to apt-get.
Under the hood, deb-get maintains a curated index of supported packages. This index aggregates metadata about packages from various sources to present a unified view. The tool then handles the installation and update process depending on the package source:
- For apt-based packages (including PPAs), it leverages the existing apt infrastructure, so updates flow through regular apt commands.
- For packages sourced from GitHub Releases or direct downloads, deb-get implements its own update and upgrade commands, as these are outside the apt ecosystem.
This dual mechanism reflects the tool’s pragmatic approach: reuse apt where possible, and manage non-apt sources explicitly.
A notable operational constraint is the GitHub API rate limit. Unauthenticated requests are capped at 60 calls per hour per IP. deb-get supports using a GitHub Personal Access Token (PAT) to increase this to 5000 calls per hour per authenticated user, which is vital for smooth operation, especially when managing many GitHub-hosted packages.
Technical strengths and tradeoffs
deb-get’s main strength lies in addressing a real-world gap: the fragmented nature of Debian/Ubuntu third-party .deb packages. Instead of forcing users to remember different commands or manual download steps, it unifies workflows into apt-get-like commands.
The curated package index is key. It centralizes package metadata and source information, enabling deb-get to know how to install, update, and remove packages from diverse origins seamlessly. This approach is a tradeoff between simplicity and completeness — the index must be maintained and curated to avoid bloat and outdated entries.
The codebase is a shell script, which is a deliberate choice to minimize dependencies and keep the tool lightweight and portable. This means it can be deployed quickly on systems where adding new languages or runtimes would be an overhead. The tradeoff is that shell scripting can be less maintainable or harder to extend for complex logic, but here it fits the purpose well.
Handling GitHub Releases is more complex because these packages can’t integrate with apt’s native update system. deb-get’s own update and upgrade commands fill this gap but introduce a separate update mechanism users must understand. Additionally, the GitHub API rate limits impose operational constraints that can be frustrating without a PAT.
The tool’s design is influenced by Ubuntu MATE’s Software Boutique, which similarly curates third-party software and offers a curated install experience.
Install and get started with deb-get
Use deb-get to install deb-get itself. The README provides exact instructions:
sudo apt install curl lsb-release wget
curl -sL https://raw.githubusercontent.com/wimpysworld/deb-get/main/deb-get | sudo -E bash -s install deb-get
Alternatively, you can manually download the deb-get .deb package from the releases page and install it:
sudo apt-get install ./path/to/deb-get_<version>.deb
GitHub Personal Access Token (PAT)
To avoid hitting GitHub API rate limits, create a PAT and export it as an environment variable:
export DEBGET_TOKEN=github-personal-access-token
deb-get update
deb-get upgrade
Skipping this step leads to failures during update, upgrade, and install commands involving GitHub-hosted packages.
verdict: who benefits from deb-get
deb-get is a practical tool for users and sysadmins who frequently install and manage third-party .deb packages outside official Debian/Ubuntu repos. It simplifies workflows by consolidating diverse package sources into a single CLI experience.
Its strengths are a curated package index, minimal dependencies, and a pragmatic dual update mechanism. However, it requires managing a GitHub PAT to avoid rate limit issues, and users must understand that GitHub Release packages have a separate update path.
If you’re comfortable with shell scripts and want to reduce the friction of third-party package management, deb-get is worth trying. For environments relying heavily on PPAs and third-party repos, it streamlines updates while still leveraging apt’s native capabilities.
It’s not a universal replacement for apt-get or a full package manager, but rather a focused tool addressing a niche yet common pain point in the Debian ecosystem. Worth understanding even if you don’t adopt it fully.
Related Articles
- nh: a Rust-based unified CLI for the Nix ecosystem with enhanced search and ergonomics — nh is a Rust CLI tool consolidating Nix, NixOS, and Home Manager commands with improved ergonomics, speed, and Elasticse
- Inside the golang/go repository: The source of Go’s simplicity and efficiency — Explore the golang/go repo, the official source for the Go language, its architecture, design tradeoffs, and how to get
- Deep dive into laravel-debugbar: Laravel’s integrated debugging companion — laravel-debugbar integrates PHP Debug Bar with Laravel using service providers and custom collectors, providing rich deb
- Navigating NixOS and Flakes with a community-driven beginner’s guide — A practical look at the “NixOS & Flakes Book,” an unofficial, community-driven guide demystifying NixOS and its experime
- awesome-nix: a curated gateway to the Nix package manager and NixOS ecosystem — awesome-nix collects essential resources for mastering the Nix package manager and NixOS, highlighting reproducible buil
→ GitHub Repo: wimpysworld/deb-get ⭐ 1,675 · Shell