Chuyển tới nội dung chính

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 listapt updatednf check-update
Upgrade tất cảapt upgradednf update
Cài packageapt install pkgdnf install pkg
Xoá packageapt remove pkgdnf remove pkg
Tìm packageapt search pkgdnf search pkg
Thông tinapt show pkgdnf info pkg
Danh sách đã càiapt list --installeddnf list installed
Lịch sửapt historydnf history
Fix broken depsapt install -fdnf 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 ManagerHệ điều hànhFile formatLock version
aptDebian/Ubuntu.debapt-mark hold
dnfRHEL/Rocky/Fedora.rpmdnf versionlock
snapUniversalsnapsnap refresh --hold
pipPython (all OS)wheel/tarrequirements.txt