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 Repo | Tên gọi | Bản chất bản quyền | Đơn vị hỗ trợ & vá lỗi |
|---|---|---|---|
main | Phần mềm cốt lõi | Mã nguồn mở (FOSS), đạt tiêu chuẩn Ubuntu | Canonical hỗ trợ chính thức 5–10 năm (LTS) |
restricted | Trì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 đồng | Mã nguồn mở (hàng chục nghìn gói: Nginx, Nodejs...) | Cộng đồng Ubuntu duy trì và đóng gói |
multiverse | Hạ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.listdạ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
aptvsapt-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áosigned-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 ảolooptrê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ủ.