Quản Lý Gói Cài Đặt Trên Ubuntu

Cẩm nang toàn diện và thực chiến về quản lý gói trên Ubuntu: Phân biệt APT, DPKG, Snap, cấu trúc Repositories (Main, Universe...), PPA chuẩn bảo mật và kinh nghiệm SRE.

Ubuntu Logo

Hệ Sinh Thái Gói Phần Mềm Ubuntu

APT (High-level) • DPKG (Low-level) • SNAP (Sandbox) • DEB822 Sources

Trên hệ điều hành Ubuntu, việc quản lý gói phần mềm được tổ chức theo kiến trúc đa tầng: từ công cụ giao tiếp người dùng (APT), trình xử lý file nhị phân cấp thấp (DPKG), cho đến các định dạng đóng gói hiện đại chạy trong môi trường cách ly (Snap).


1. Cấu Trúc Kho Lưu Trữ (Ubuntu Repositories)

Mọi phần mềm bạn cài qua lệnh apt đều được tải về từ các máy chủ lưu trữ (Mirrors) được phân thành 4 khu vực bản quyền & hỗ trợ:

Khu vực RepoTên gọiBản chất bản quyềnĐơn vị hỗ trợ & vá lỗi
mainPhần mềm cốt lõiMã nguồn mở (FOSS), đạt tiêu chuẩn UbuntuCanonical hỗ trợ chính thức 5–10 năm (LTS)
restrictedTrình điều khiển đóngĐộc quyền (Driver Nvidia, firmware card mạng Wi-Fi)Canonical hỗ trợ phần cứng
universeĐóng góp cộng đồngMã nguồn mở (hàng chục nghìn gói: Nginx, Nodejs...)Cộng đồng Ubuntu duy trì và đóng gói
multiverseHạn chế pháp lýPhần mềm có bản quyền/bằng sáng chế (Codecs, fonts)Không hỗ trợ chính thức, người dùng tự chịu rủi ro

📂 Vị Trí Cấu Hình Kho Lưu Trữ

  • Ubuntu 22.04 LTS trở về trước: Cấu hình trong file /etc/apt/sources.list dạng một dòng (One-line style):
    deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
    
  • Ubuntu 24.04 LTS trở lên: Chuyển sang định dạng hiện đại deb822 tại /etc/apt/sources.list.d/ubuntu.sources:
    Types: deb
    URIs: http://archive.ubuntu.com/ubuntu/
    Suites: noble noble-updates noble-security
    Components: main restricted universe multiverse
    Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
    

2. Trình Quản Lý Gói Cấp Cao: APT (Advanced Package Tool)

apt là công cụ tương tác chính của quản trị viên, tự động phân giải cây phụ thuộc (dependencies) và tải gói từ internet.

[!NOTE] 💡 Phân biệt apt vs apt-get:

  • apt: Thiết kế cho người dùng trực tiếp trên terminal (có thanh tiến trình phần trăm %, màu sắc trực quan, tự động dọn dẹp).
  • apt-get: Thiết kế cho kịch bản tự động hóa (Bash script, CI/CD, Dockerfile) vì tính ổn định cú pháp và khả năng tương thích ngược dài hạn.

⚡ Bảng Tra Cứu Lệnh APT Thông Dụng

# 1. Cập nhật danh mục gói từ máy chủ mirrors (Chỉ tải metadata, CHƯA nâng cấp gói)
sudo apt update

# 2. Nâng cấp an toàn tất cả các gói đã cài đặt lên bản mới nhất
sudo apt upgrade -y

# 3. Nâng cấp toàn diện (Cho phép xóa gói cũ nếu bản mới yêu cầu thay đổi dependencies)
sudo apt full-upgrade -y

# 4. Cài đặt một hoặc nhiều gói phần mềm
sudo apt install -y nginx curl git

# 5. Gỡ bỏ gói (GIỮ LẠI các file cấu hình trong /etc)
sudo apt remove nginx

# 6. Gỡ bỏ sạch sẽ hoàn toàn (XÓA CẢ file cấu hình và dữ liệu liên quan)
sudo apt purge nginx

# 7. Tự động dọn dẹp các thư viện dependencies mồ côi (không còn gói nào dùng tới)
sudo apt autoremove -y

# 8. Dọn dẹp sạch các file cài đặt .deb đã tải về trong /var/cache/apt/archives/
sudo apt clean

# 9. Tìm kiếm gói phần mềm trong kho
apt search redis

# 10. Xem thông tin chi tiết, phiên bản và dependencies của gói
apt show redis-server

3. Trình Quản Lý Gói Cấp Thấp: DPKG

dpkg là nền móng nằm bên dưới apt. Nó chỉ làm việc với các file gói .deb có sẵn trên ổ đĩa nội bộ và hoàn toàn không thể tự tải dependencies từ internet.

# Cài đặt file .deb đã tải về ổ cứng
sudo dpkg -i google-chrome-stable_current_amd64.deb

# ⚠️ Xử lý sự cố: Nếu dpkg báo lỗi thiếu dependencies, chạy lệnh sau để APT tự sửa:
sudo apt install -f -y

# Liệt kê tất cả các file do gói đó cài vào hệ thống (Xem file binary, config ở đâu)
dpkg -L nginx

# Tìm xem một file cụ thể trên đĩa thuộc về gói nào quản lý
dpkg -S /usr/sbin/nginx
# Kết quả trả về: nginx-core: /usr/sbin/nginx

# Xem trạng thái cài đặt của gói
dpkg -l | grep nginx

4. Thêm Kho Gói Bên Ngoài & PPA Chuẩn Bảo Mật

Khi cần cài phần mềm phiên bản mới nhất từ chính nhà phát triển (như Docker CE, Kubernetes, HashiCorp Terraform):

[!WARNING] ❌ Cảnh báo bảo mật: Lệnh apt-key add đã bị DEPRECATED vì lý do bảo mật (khóa GPG bị tin cậy trên toàn hệ thống). ✅ Chuẩn mực mới: Lưu khóa GPG vào thư mục /etc/apt/keyrings/ và chỉ định rõ quyền trong khai báo signed-by.

Ví dụ Thực Tế: Thêm Kho Lưu Trữ Docker Chuẩn Production

# Bước 1: Tạo thư mục lưu khóa an toàn
sudo install -m 0755 -d /etc/apt/keyrings

# Bước 2: Tải khóa GPG chính thức của Docker
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Bước 3: Thêm repo Docker vào apt sources với cờ signed-by
echo   "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu   $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Bước 4: Cập nhật index và cài đặt
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

5. Định Dạng Đóng Gói Snap Trên Ubuntu

Snap là công nghệ đóng gói ứng dụng độc lập (Containerized packages) do chính Canonical phát triển. Mỗi ứng dụng Snap chứa toàn bộ runtime và thư viện bên trong, chạy cách ly thông qua AppArmor.

# Xem danh sách các gói Snap đang có trên hệ thống
snap list

# Cài đặt ứng dụng qua Snap (Ví dụ certbot cho SSL Let's Encrypt)
sudo snap install --classic certbot

# Nâng cấp toàn bộ các gói snap
sudo snap refresh

# Gỡ bỏ một gói snap
sudo snap remove certbot

⚖️ Khi Nào Dùng APT vs Snap Trên Server Production?

  • Ưu tiên dùng APT: Cho các dịch vụ mạng, daemon nền tảng (Nginx, PostgreSQL, Redis, Docker). Khởi động nhanh, tốn ít RAM, không sinh ra các mount point ảo loop trên hệ thống file.
  • Dùng Snap: Cho các công cụ tiện ích đòi hỏi phiên bản mới nhất mà kho APT của bản Ubuntu LTS không kịp cập nhật (ví dụ certbot, microk8s, kubectl).

Bài tiếp theo đề xuất: Cấu Trúc Thư Mục Trong Linux – Khám phá tiêu chuẩn phân cấp thư mục FHS (/etc, /var, /proc, /sys) và ý nghĩa từng vị trí lưu trữ trên máy chủ.