Làm ngay trong 5 phút: Quick Start với ppa-purge
Nếu bạn đã thêm PPA vào Ubuntu và muốn gỡ bỏ cùng tất cả package đi kèm, đây là cách nhanh nhất:
# Bước 1: Cài ppa-purge
sudo apt install ppa-purge
# Bước 2: Gỡ PPA và hạ cấp package về phiên bản Ubuntu gốc
sudo ppa-purge ppa:tên-tác-giả/tên-ppa
# Ví dụ thực tế: gỡ PPA Nginx mainline của ondrej
sudo ppa-purge ppa:ondrej/nginx
Chỉ vậy thôi. ppa-purge sẽ tự xóa PPA khỏi sources.list và downgrade toàn bộ package đã cài từ PPA đó về phiên bản Ubuntu chính thức — không cần can thiệp thủ công gì thêm.
Tại sao cần ppa-purge? Gỡ thủ công có vấn đề gì?
Mình đã cài Ubuntu Server 22.04 trên hơn 20 con VPS và quy trình này là cách mình luôn làm đầu tiên khi cần dọn dẹp PPA — thay vì xóa thủ công bằng add-apt-repository --remove.
Vấn đề là add-apt-repository --remove chỉ làm được một nửa công việc:
- Xóa PPA khỏi sources.list không đồng nghĩa các package đã cài sẽ tự hạ cấp
- Package từ PPA thường có version cao hơn, sau khi gỡ PPA vẫn giữ nguyên trên máy
- Khi upgrade Ubuntu sau này, dependency conflict xảy ra do version không khớp với repo chính thức
- Rất khó nhớ bạn đã cài package gì từ PPA nào, đặc biệt sau vài tháng
Ví dụ cụ thể dễ hình dung
Bạn thêm PPA ondrej/php để cài PHP 8.2, sau đó muốn quay lại PHP mặc định của Ubuntu 22.04 (là 8.1). Nếu chỉ xóa PPA mà không dùng ppa-purge, PHP 8.2 vẫn ở đó nguyên vẹn. Ubuntu sẽ không tự hạ xuống, và apt upgrade về sau có thể báo lỗi broken packages.
Bên trong ppa-purge: 3 bước nó tự làm cho bạn
Thực ra ppa-purge không phức tạp — nó làm 3 việc theo thứ tự:
- Disable PPA: Comment out các dòng PPA trong sources.list.d (không xóa hẳn file để dễ khôi phục)
- Xác định package từ PPA: So sánh version đang cài với version có trong Ubuntu official repo
- Downgrade tự động: Chạy
apt installvới phiên bản từ Ubuntu repository cho từng package liên quan
Sau khi chạy xong, kiểm tra file .list trong sources.list.d sẽ thấy nội dung bị comment lại:
# Xem kết quả sau khi ppa-purge
cat /etc/apt/sources.list.d/ondrej-ubuntu-nginx-jammy.list
# Output:
# deb https://ppa.launchpadcontent.net/ondrej/nginx/ubuntu/ jammy main
# deb-src https://ppa.launchpadcontent.net/ondrej/nginx/ubuntu/ jammy main
Các tình huống thực tế hay gặp
Tình huống 1: Gỡ PPA của PHP
# Kiểm tra PPA đang có trước
ls /etc/apt/sources.list.d/
# Gỡ PPA ondrej/php và hạ cấp PHP về phiên bản Ubuntu
sudo ppa-purge ppa:ondrej/php
Tình huống 2: Không nhớ tên PPA chính xác
Nếu không nhớ tên PPA, tra bằng lệnh này:
# Liệt kê tất cả PPA đang có trên máy
grep -r "^deb " /etc/apt/sources.list.d/ | grep ppa.launchpad
# Hoặc xem package đến từ nguồn nào
apt-cache policy nginx | grep -i ppa
Tình huống 3: ppa-purge báo lỗi “no alternative”
Khi Ubuntu official repo không có phiên bản nào của package đó, ppa-purge sẽ hỏi có muốn xóa hẳn package không. Hai hướng xử lý:
# Hướng 1: Xóa luôn package nếu không cần nữa — đồng ý khi được hỏi
sudo ppa-purge ppa:tên/ppa
# Hướng 2: Giữ package ở version hiện tại bằng apt-mark hold
sudo apt-mark hold tên-package
sudo ppa-purge ppa:tên/ppa
# Package bị hold sẽ không bị downgrade hay xóa
# Bỏ hold sau khi xong nếu cần
sudo apt-mark unhold tên-package
Nâng cao: Kiểm soát hoàn toàn PPA trên server
Xem package nào đang đến từ PPA
# Cài apt-show-versions để kiểm tra nguồn gốc package
sudo apt install apt-show-versions
# Xem package nào không phải từ Ubuntu official
apt-show-versions | grep -v "Ubuntu"
# Xem version cụ thể của một package
apt-show-versions nginx
Simulate trước khi thực sự chạy
ppa-purge hỗ trợ flag -s để xem trước danh sách package sẽ bị ảnh hưởng mà không thực sự downgrade:
# Xem trước package nào sẽ bị hạ cấp
sudo ppa-purge -s ppa:tên/ppa
Dọn sạch hoàn toàn sau khi purge
Mặc định ppa-purge chỉ comment out file PPA, không xóa. Nếu muốn dọn sạch hẳn:
# Sau khi ppa-purge, xóa file PPA còn lại
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 thực tế từ kinh nghiệm
Mình từng gỡ PPA MariaDB trên production mà không backup — downgrade từ 10.11 về 10.6 làm một số data file không tương thích và phải restore. Cả buổi chiều đi tong. Bài học rút ra: nếu PPA đang cung cấp thứ gì quan trọng như database engine hay web server, snapshot VM trước khi chạy bất kỳ lệnh nào.
Sau khi ppa-purge xong, đừng dừng lại ở đó — dọn dẹp nốt cho sạch:
sudo apt update
sudo apt upgrade
sudo apt autoremove
sudo apt autoclean
Service có còn sống sau downgrade không? Đừng đoán, kiểm tra luôn:
# Verify version sau khi downgrade
dpkg -l | grep -E "nginx|php|mariadb"
# Kiểm tra service còn hoạt động không
sudo systemctl status nginx
sudo systemctl status php8.1-fpm
Desktop app và dev tool thì thoải mái test trực tiếp. Server software thì khác — một lần downgrade sai trên production có thể mất vài tiếng để recover. Test trên staging trước, không thương tiếc.
Thói quen nhỏ tiết kiệm cả buổi debug: trước khi thêm PPA mới, ghi chú lại lý do và package phụ thuộc. Một file /root/notes/ppa-list.txt đơn giản là đủ — mình đảm bảo sau 3 tháng bạn sẽ cảm ơn bản thân.
ppa-purge làm đúng một thứ: đưa package về đúng phiên bản distro sau khi gỡ PPA, thay vì để lại đống version lơ lửng như add-apt-repository --remove hay làm. Dùng thoải mái trên dev và staging — production thì backup trước đã.

