5分でできる:ppa-purge のクイックスタート
Ubuntu に PPA を追加していて、それに関連するすべてのパッケージごと削除したい場合、最も手っ取り早い方法はこちらです:
# ステップ 1:ppa-purge をインストール
sudo apt install ppa-purge
# ステップ 2:PPA を削除してパッケージを Ubuntu 公式バージョンへダウングレード
sudo ppa-purge ppa:作者名/ppa名
# 実例:ondrej の Nginx mainline PPA を削除
sudo ppa-purge ppa:ondrej/nginx
それだけです。ppa-purge は自動的に PPA を sources.list から削除し、その PPA からインストールされたすべてのパッケージを Ubuntu の公式バージョンへダウングレードします — 手動での追加作業は一切不要です。
なぜ ppa-purge が必要なのか?手動削除の何が問題なのか?
私は20台以上の VPS に Ubuntu Server 22.04 をインストールしてきましたが、PPA を整理する際には必ずこの手順を最初に使います — add-apt-repository --remove で手動削除するのではなく。
add-apt-repository --remove は仕事の半分しかこなしていません:
- PPA を sources.list から削除しても、インストール済みのパッケージが自動的にダウングレードされるわけではない
- PPA のパッケージは通常バージョンが高く、PPA を削除してもマシン上にそのまま残り続ける
- 後で Ubuntu をアップグレードする際、公式リポジトリとバージョンが合わず dependency の競合が発生する
- どの PPA からどのパッケージをインストールしたか覚えておくのが難しく、特に数ヶ月後には
具体的な例でイメージしやすく
PHP 8.2 をインストールするために ondrej/php の PPA を追加し、その後 Ubuntu 22.04 のデフォルト(8.1)に戻したいとします。PPA を削除するだけで ppa-purge を使わないと、PHP 8.2 はそのままシステムに残ります。Ubuntu は自動的にダウングレードせず、後の apt upgrade で broken packages のエラーが出ることがあります。
ppa-purge の内部動作:自動で行われる 3 つのステップ
実は ppa-purge はそれほど複雑ではありません — 順番に 3 つのことをするだけです:
- PPA の無効化:sources.list.d の PPA 行をコメントアウト(復元しやすいようにファイル自体は削除しない)
- PPA 由来のパッケージを特定:インストール済みのバージョンと Ubuntu 公式リポジトリのバージョンを比較
- 自動ダウングレード:関連する各パッケージに対して Ubuntu リポジトリのバージョンで
apt installを実行
実行後、sources.list.d 内の .list ファイルを確認すると、内容がコメントアウトされているのがわかります:
# ppa-purge 実行後の結果を確認
cat /etc/apt/sources.list.d/ondrej-ubuntu-nginx-jammy.list
# 出力:
# deb https://ppa.launchpadcontent.net/ondrej/nginx/ubuntu/ jammy main
# deb-src https://ppa.launchpadcontent.net/ondrej/nginx/ubuntu/ jammy main
よくある実際のシナリオ
シナリオ 1:PHP の PPA を削除する
# 現在の PPA を確認
ls /etc/apt/sources.list.d/
# ondrej/php の PPA を削除して PHP を Ubuntu バージョンへダウングレード
sudo ppa-purge ppa:ondrej/php
シナリオ 2:PPA の正確な名前を覚えていない場合
PPA の名前を覚えていない場合は、次のコマンドで調べられます:
# マシン上のすべての PPA を一覧表示
grep -r "^deb " /etc/apt/sources.list.d/ | grep ppa.launchpad
# またはパッケージのインストール元を確認
apt-cache policy nginx | grep -i ppa
シナリオ 3:ppa-purge が「no alternative」エラーを報告する場合
Ubuntu の公式リポジトリにそのパッケージのバージョンがない場合、ppa-purge はパッケージを完全に削除するか尋ねます。対処法は 2 つあります:
# 方法 1:不要なパッケージをそのまま削除 — 確認メッセージに承認
sudo ppa-purge ppa:作者名/ppa名
# 方法 2:apt-mark hold で現在のバージョンを保持
sudo apt-mark hold パッケージ名
sudo ppa-purge ppa:作者名/ppa名
# hold されたパッケージはダウングレードも削除もされない
# 必要に応じて完了後に hold を解除
sudo apt-mark unhold パッケージ名
応用編:サーバー上の PPA を完全に管理する
どのパッケージが PPA 由来かを確認する
# パッケージの出所を確認するために apt-show-versions をインストール
sudo apt install apt-show-versions
# Ubuntu 公式以外のパッケージを確認
apt-show-versions | grep -v "Ubuntu"
# 特定のパッケージのバージョンを確認
apt-show-versions nginx
実行前にシミュレーションする
ppa-purge は -s フラグをサポートしており、実際にダウングレードせずに影響を受けるパッケージの一覧を事前確認できます:
# ダウングレードされるパッケージを事前確認
sudo ppa-purge -s ppa:作者名/ppa名
purge 後に完全クリーンアップする
デフォルトでは ppa-purge は PPA ファイルをコメントアウトするだけで削除しません。完全にクリーンにしたい場合:
# ppa-purge 後、残った PPA ファイルを削除
sudo rm /etc/apt/sources.list.d/ondrej-ubuntu-nginx-jammy.list
sudo rm -f /etc/apt/sources.list.d/ondrej-ubuntu-nginx-jammy.list.save
sudo apt update
経験から学んだ実践的な Tips
以前、バックアップなしで本番環境の MariaDB PPA を削除したことがあります — 10.11 から 10.6 へのダウングレードで一部のデータファイルが互換性を失い、リストアが必要になりました。午後が丸々潰れました。教訓:データベースエンジンや Web サーバーのような重要なものを提供している PPA を扱う場合は、コマンドを実行する前に必ず VM のスナップショットを取りましょう。
ppa-purge が完了したら、そこで止まらずに後片付けも済ませましょう:
sudo apt update
sudo apt upgrade
sudo apt autoremove
sudo apt autoclean
ダウングレード後にサービスがまだ動いているか?推測せず、すぐ確認しましょう:
# ダウングレード後のバージョンを確認
dpkg -l | grep -E "nginx|php|mariadb"
# サービスがまだ動作しているか確認
sudo systemctl status nginx
sudo systemctl status php8.1-fpm
デスクトップアプリや開発ツールは気軽に直接テストできます。しかしサーバーソフトウェアは話が違います — 本番環境でのダウングレードを一度誤ると、リカバリーに数時間かかることもあります。容赦なくステージング環境で先にテストしてください。
デバッグ時間を大幅に節約する小さな習慣:新しい PPA を追加する前に、理由と依存するパッケージをメモしておきましょう。シンプルな /root/notes/ppa-list.txt ファイルで十分です — 3 ヶ月後に自分自身に感謝することを保証します。
ppa-purge はひとつのことをきちんとこなします:PPA を削除した後、パッケージをディストリビューションの正しいバージョンへ戻すことです。add-apt-repository --remove のように宙に浮いたバージョンを残しません。開発環境やステージングでは気軽に使えます — 本番環境ではバックアップを先に取りましょう。

