Quản lý Package
Hệ sinh thái Package Manager
apt — Debian / Ubuntu
Luồng hoạt động apt
Lệnh apt thường dùng
# === Cập nhật database ===
sudo apt update # PHẢI chạy trước khi install
sudo apt upgrade # nâng cấp tất cả package đã cài
sudo apt full-upgrade # nâng cấp kể cả dependencies thay đổi
# === Cài đặt ===
sudo apt install nginx # cài nginx
sudo apt install nginx curl git -y # cài nhiều package, auto yes
sudo apt install -f # fix broken dependencies
# === Xoá ===
sudo apt remove nginx # xoá nginx (giữ config)
sudo apt purge nginx # xoá nginx VÀ config files
sudo apt autoremove # xoá package không còn cần thiết
# === Tìm kiếm & thông tin ===
apt search nginx # tìm package liên quan
apt show nginx # thông tin chi tiết package
apt list --installed # danh sách đã cài
apt list --upgradable # danh sách có thể upgrade
apt-cache depends nginx # xem dependencies của nginx
Quản lý repository
# Xem repo hiện tại
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/ # repo bổ sung
# Thêm repo
sudo add-apt-repository ppa:deadsnakes/ppa # PPA (Ubuntu)
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
# Import GPG key (xác thực nguồn)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
dnf / yum — RHEL / CentOS / Rocky / Fedora
# === Cập nhật ===
sudo dnf update # update tất cả
sudo dnf update nginx # update package cụ thể
sudo dnf check-update # xem package có update không
# === Cài đặt ===
sudo dnf install nginx # cài nginx
sudo dnf install nginx curl git -y # cài nhiều package
# === Xoá ===
sudo dnf remove nginx # xoá nginx
sudo dnf autoremove # xoá orphan packages
# === Tìm kiếm & thông tin ===
sudo dnf search nginx # tìm kiếm
sudo dnf info nginx # thông tin chi tiết
sudo dnf list installed # danh sách đã cài
sudo dnf history # lịch sử cài đặt
sudo dnf history undo <id> # rollback transaction
# === Quản lý repo ===
sudo dnf repolist # xem repo hiện tại
sudo dnf repolist all # bao gồm disabled repo
sudo dnf config-manager --enable epel # bật repo EPEL
sudo dnf config-manager --disable epel # tắt repo
sudo dnf install epel-release # cài EPEL (Extra Packages)
dpkg và rpm — Low-level
# === dpkg (Debian/Ubuntu) ===
sudo dpkg -i package.deb # cài từ file .deb
sudo dpkg -r nginx # xoá package
sudo dpkg -l # liệt kê tất cả package đã cài
sudo dpkg -l | grep nginx # tìm package
sudo dpkg -L nginx # liệt kê file của package nginx
sudo dpkg -S /usr/bin/nginx # file này thuộc package nào?
dpkg --get-selections # tất cả package + trạng thái
# === rpm (RHEL/CentOS) ===
sudo rpm -ivh package.rpm # install + verbose + hash progress
sudo rpm -Uvh package.rpm # upgrade
sudo rpm -e nginx # xoá package
rpm -qa # liệt kê tất cả package đã cài
rpm -qa | grep nginx # tìm package
rpm -ql nginx # liệt kê file của nginx
rpm -qf /usr/sbin/nginx # file này thuộc package nào?
rpm -qi nginx # thông tin package
Quản lý Package phổ biến trong DevOps
# === Cài Docker (Ubuntu) ===
sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io
# === Cài Python pip packages ===
pip3 install ansible
pip3 install awscli
pip3 install -r requirements.txt
# === Cài Node.js packages (npm) ===
npm install -g pm2
npm install -g yarn
# === Xem version sau khi cài ===
nginx -v
docker --version
python3 --version
ansible --version
Bảng so sánh apt vs dnf
| Tác vụ | apt (Debian/Ubuntu) | dnf (RHEL/Rocky) |
|---|---|---|
| Cập nhật list | apt update | dnf check-update |
| Upgrade tất cả | apt upgrade | dnf update |
| Cài package | apt install pkg | dnf install pkg |
| Xoá package | apt remove pkg | dnf remove pkg |
| Tìm package | apt search pkg | dnf search pkg |
| Thông tin | apt show pkg | dnf info pkg |
| Danh sách đã cài | apt list --installed | dnf list installed |
| Lịch sử | apt history | dnf history |
| Fix broken deps | apt install -f | dnf install --skip-broken |
Package Pinning — Giữ phiên bản cố định
Trong môi trường production, bạn thường cần lock version để tránh upgrade không mong muốn phá vỡ ứng dụng.
apt-mark hold (Ubuntu/Debian)
# Giữ cố định một package (không auto-upgrade)
sudo apt-mark hold nginx
sudo apt-mark hold kubernetes-cni kubelet kubeadm kubectl # lock K8s tools
# Bỏ hold
sudo apt-mark unhold nginx
# Xem danh sách các package đang bị hold
apt-mark showhold
# nginx
# kubelet
# Ví dụ thực tế: chỉ cài phiên bản cụ thể rồi hold
sudo apt install nginx=1.24.0-1ubuntu1
sudo apt-mark hold nginx
dpkg — Backup và Restore danh sách packages
# Backup toàn bộ danh sách packages đang cài (dùng để restore trên máy mới)
dpkg --get-selections > ~/backup-packages.txt
# Restore trên máy khác
sudo dpkg --set-selections < ~/backup-packages.txt
sudo apt-get dselect-upgrade
# Xem package nào đang bị hold
dpkg --get-selections | grep hold
# nginx hold
dnf versionlock (RHEL/Rocky)
# Cài plugin
sudo dnf install 'dnf-command(versionlock)'
# Lock version cụ thể
sudo dnf versionlock add nginx-1.24.0
sudo dnf versionlock add kubernetes-* # lock toàn bộ K8s packages
# Xem danh sách locked
sudo dnf versionlock list
# Bỏ lock
sudo dnf versionlock delete nginx
# Xoá tất cả locks
sudo dnf versionlock clear
Best practice cho production
Luôn pin version của: nginx, postgresql, redis, và đặc biệt là toàn bộ kubernetes toolchain (kubelet, kubeadm, kubectl). Không bao giờ để K8s tự upgrade không được kiểm soát.
Snap — Universal Package Manager
Snap (Canonical) là package format universal — chạy trên mọi distro Linux, tự chứa dependencies.
# Kiểm tra snapd đã cài chưa
snap version
# Cài snapd (Ubuntu đã có sẵn)
sudo apt install snapd # Debian/Ubuntu
sudo dnf install snapd && sudo systemctl enable --now snapd.socket # RHEL
# Tìm package
snap find "code"
snap search postgresql
# Cài package
sudo snap install code --classic # VS Code (--classic = full system access)
sudo snap install postman
sudo snap install kubectl --classic
# Liệt kê snaps đang cài
snap list
# Name Version Rev Tracking Publisher Notes
# code 1.89.0 158 latest/stable vscode✓ classic
# kubectl 1.30.0 5765 latest/stable canonical✓ classic
# Update tất cả snaps
sudo snap refresh
# Update một snap cụ thể
sudo snap refresh code
# Xoá snap
sudo snap remove postman
# Xem thông tin chi tiết
snap info kubectl
Snap vs apt
- Snap: chứa toàn bộ dependencies, sandbox, tự update, universal nhưng khởi động chậm hơn, tốn disk
- apt: tích hợp tốt với OS, nhẹ hơn, nhanh hơn nhưng đôi khi version cũ
- Nên dùng snap khi: cần phiên bản mới nhất (Node, Go tools, editors), không muốn thêm PPA
pip — Python Package Manager
pip là package manager cho Python. Trong DevOps, Python scripts dùng nhiều thư viện cần quản lý qua pip.
Cơ bản
# Kiểm tra pip
pip3 --version
python3 -m pip --version
# Cài package
pip3 install requests
pip3 install boto3 # AWS SDK
pip3 install ansible # Automation tool
# Cài phiên bản cụ thể
pip3 install requests==2.31.0
pip3 install "boto3>=1.28,<2.0" # range version
# Upgrade package
pip3 install --upgrade boto3
pip3 install -U pip # upgrade pip itself
# Xoá package
pip3 uninstall requests
# Liệt kê packages
pip3 list
pip3 list --outdated # xem packages có version mới
# Thông tin package
pip3 show boto3
requirements.txt — Quản lý dependencies
# Tạo file requirements.txt từ môi trường hiện tại
pip3 freeze > requirements.txt
cat requirements.txt
# boto3==1.28.57
# botocore==1.31.57
# requests==2.31.0
# ...
# Cài tất cả từ requirements.txt
pip3 install -r requirements.txt
# Cài từ requirements.txt trên deployment server
pip3 install -r requirements.txt --no-cache-dir
Virtual Environment — Cô lập môi trường Python
Không cài pip packages vào system Python
Cài global pip install vào system Python có thể gây xung đột giữa các project và phá vỡ system tools. Luôn dùng virtual environment.
venv — Built-in Virtual Environment
# Tạo virtual environment
python3 -m venv venv # tạo thư mục venv/
python3 -m venv .venv # convention: ẩn thư mục với dấu chấm
# Kích hoạt
source venv/bin/activate # Linux/macOS
# (venv) user@host:~/project$ ← prefix trong prompt
# Cài packages trong venv (không ảnh hưởng system)
pip install requests boto3 pyyaml
pip freeze > requirements.txt
# Deactivate
deactivate
# Recreate từ requirements.txt (trên server mới)
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Ví dụ workflow DevOps script hoàn chỉnh
# Cấu trúc project
my-deploy-tool/
├── venv/ # virtual env (thêm vào .gitignore)
├── requirements.txt
├── deploy.py
└── config.yaml
# Setup lần đầu
python3 -m venv venv
source venv/bin/activate
pip install boto3 pyyaml requests
pip freeze > requirements.txt
# Trên CI/CD hoặc server mới
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt --no-cache-dir # không dùng cache
python deploy.py
# Script shell wrapper — tự động activate venv
#!/bin/bash
# run.sh
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/venv/bin/activate"
python "$SCRIPT_DIR/deploy.py" "$@"
.gitignore cho Python projects
# .gitignore
venv/
.venv/
__pycache__/
*.pyc
*.pyo
.env
Tổng kết Package Managers
| Package Manager | Hệ điều hành | File format | Lock version |
|---|---|---|---|
| apt | Debian/Ubuntu | .deb | apt-mark hold |
| dnf | RHEL/Rocky/Fedora | .rpm | dnf versionlock |
| snap | Universal | snap | snap refresh --hold |
| pip | Python (all OS) | wheel/tar | requirements.txt |