Mục Tiêu Chương 10
RPM Package Format
Hiểu cấu trúc RPM file, dùng rpm -i/-e/-q/-V/-qa để cài, gỡ, query và verify packages trực tiếp.
DNF Package Manager
Dùng dnf install, remove, update, search, info, list, history để quản lý packages và dependencies tự động.
DNF Groups
Cài nhóm packages liên quan (Development Tools, Server với GUI) bằng dnf group install. Quản lý software environments.
Repositories
Cấu hình repo files trong /etc/yum.repos.d/. Thêm EPEL, RPM Fusion và custom repos. Manage repo priorities.
DNF History & Rollback
Xem lịch sử cài đặt với dnf history. Undo/redo giao dịch. Rollback về trạng thái package trước đó.
Snap & Flatpak
Cài ứng dụng qua Snap (Canonical) và Flatpak (cross-distro). Hiểu sandboxed packaging và khi nào dùng thay RPM.
Lý Thuyết: RPM và DNF
1. RPM – Red Hat Package Manager
RPM là format package cơ bản của RHEL/Fedora. File RPM có dạng: name-version-release.architecture.rpm. RPM database lưu tại /var/lib/rpm/.
$ sudo rpm -i package.rpm
# Cài package từ file RPM local
$ sudo rpm -ivh package.rpm
# -v verbose, -h progress bar (hash marks)
$ sudo rpm -e package-name
# Gỡ package
$ rpm -q vim-enhanced
vim-enhanced-9.1.014-1.fc41.x86_64
$ rpm -qa | grep ssh
openssh-9.6p1-1.fc41.x86_64
openssh-server-9.6p1-1.fc41.x86_64
$ rpm -ql openssh-server
# List files installed by package
$ rpm -qf /usr/bin/vim
vim-enhanced-9.1.014-1.fc41.x86_64
# Tìm package cung cấp file cụ thể
$ rpm -V openssh-server
# Verify: kiểm tra file integrity (không có output = OK)
$ rpm -qi vim-enhanced
# Thông tin chi tiết về package đã cài
2. DNF – Dandified YUM
DNF là package manager mặc định cho Fedora/RHEL 8+. Tự động giải quyết dependencies, hỗ trợ plugins, parallel downloads, và history/rollback.
$ sudo dnf install vim -y
# Cài package (và dependencies tự động)
$ sudo dnf remove vim -y
# Gỡ package
$ sudo dnf update -y
# Update toàn bộ hệ thống
$ sudo dnf upgrade --security -y
# Chỉ update security patches
$ dnf search "web server"
============== Name Matched: web server ==============
httpd.x86_64 : Apache HTTP Server
nginx.x86_64 : A high performance web server
$ dnf info httpd
Name : httpd
Version : 2.4.62
Summary : Apache HTTP Server
$ dnf list installed | grep python
# Tìm packages Python đã cài
$ dnf list available | grep nodejs
# Tìm packages có sẵn trong repo
$ sudo dnf autoremove
# Gỡ packages orphan (không còn cần thiết)
3. DNF Groups
$ dnf group list
Available Environment Groups:
Minimal Install
Server with GUI
Installed Groups:
Development Tools
$ dnf group info "Development Tools"
Group: Development Tools
Mandatory Packages: binutils, gcc, make, gdb...
$ sudo dnf group install "Development Tools" -y
# Cài cả nhóm (gcc, make, gdb, git, ...)
$ sudo dnf group remove "Development Tools"
# Gỡ cả nhóm
Repositories, History và Modern Packaging
4. Cấu hình Repositories
Repository files được lưu tại /etc/yum.repos.d/*.repo. Mỗi repo cần: name, baseurl (hoặc metalink), enabled, gpgcheck.
$ dnf repolist
repo id repo name
fedora Fedora 41 - x86_64
updates Fedora 41 - x86_64 - Updates
$ dnf repolist all
# Hiển thị cả enabled và disabled repos
# Thêm EPEL repo (Extra Packages for Enterprise Linux):
$ sudo dnf install epel-release -y
# Thêm repo thủ công (ví dụ VS Code):
$ sudo cat > /etc/yum.repos.d/vscode.repo << 'EOF'
[code]
name=Visual Studio Code
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc
EOF
$ sudo dnf install code -y
# Tạm thời disable repo:
$ sudo dnf --disablerepo=epel install package
# Enable repo chỉ cho 1 lần:
$ sudo dnf --enablerepo=rpmfusion-free install package
5. DNF History và Rollback
$ dnf history
ID | Command line | Date and time | Action | Altered
5 | install httpd | 2025-06-13 08:00 | Install | 1
4 | update -y | 2025-06-12 18:00 | I, U | 47
3 | install vim | 2025-06-12 10:00 | Install | 1
$ dnf history info 5
# Chi tiết về transaction #5
$ sudo dnf history undo 5
# Undo transaction #5 (gỡ httpd)
$ sudo dnf history redo 3
# Redo transaction #3
$ sudo dnf history rollback 2
# Rollback về trạng thái tại transaction #2
6. Snap và Flatpak – Modern Universal Packages
$ sudo dnf install snapd -y
$ sudo ln -s /var/lib/snapd/snap /snap
$ snap search vscode
$ sudo snap install code --classic
$ snap list
$ sudo snap refresh code
$ sudo snap remove code
$ sudo dnf install flatpak -y
$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
$ flatpak search gimp
$ flatpak install flathub org.gimp.GIMP
$ flatpak list
$ flatpak update
$ flatpak uninstall org.gimp.GIMP
| Tính năng | RPM/DNF | Snap | Flatpak |
|---|---|---|---|
| Hệ thống hỗ trợ | RHEL/Fedora | Ubuntu + nhiều distro | Cross-distro (mọi Linux) |
| Sandbox | Không | Có (confinement) | Có (portal-based) |
| Dependencies | Shared (system) | Bundled | Shared runtimes |
| Dung lượng | Nhỏ nhất | Lớn hơn | Lớn hơn |
| Use case | Server, system packages | Desktop apps (Canonical eco) | Desktop apps (GNOME/KDE) |
Lab Thực Hành – Chapter 10
Khám phá RPM Database
$ rpm -qa | wc -l
1423
$ rpm -qa --queryformat "%{NAME}-%{VERSION}\n" | sort | head -10
$ rpm -qf $(which bash)
bash-5.2.26-3.fc41.x86_64
$ rpm -qi bash | grep -E "Name|Version|Size|Summary"
Name : bash
Version : 5.2.26
Summary : The GNU Bourne Again shell
Cài và Quản lý Packages với DNF
$ dnf search "text editor" | grep -i vim
$ dnf info vim-enhanced
$ sudo dnf install vim-enhanced -y
Installing: vim-enhanced x86_64 9.1.014 fedora 1.9M
Total download size: 1.9 M
Installed size: 5.1 M
$ rpm -ql vim-enhanced | head -10
$ dnf list installed | grep vim
vim-enhanced.x86_64 9.1.014-1.fc41 @fedora
Cài nhóm Development Tools
$ dnf group list --available | grep -i dev
$ dnf group info "Development Tools"
Group: Development Tools
Mandatory Packages: binutils gcc glibc-devel make
Default Packages: autoconf automake git gdb
$ sudo dnf group install "Development Tools" -y
$ gcc --version && make --version && git --version
gcc (GCC) 14.2.1
GNU Make 4.4.1
git version 2.47.1
Thêm EPEL Repository
$ sudo dnf install epel-release -y
$ dnf repolist | grep epel
epel Extra Packages for Enterprise Linux 9
$ cat /etc/yum.repos.d/epel.repo | head -20
$ sudo dnf install htop -y
# htop: interactive process viewer (từ EPEL)
$ htop --version
htop 3.3.0
Sử dụng DNF History
$ sudo dnf install wget curl jq -y
$ dnf history
ID | Command line | Date | Action | Altered
8 | install wget curl jq | 2025-06-13 10:00 | Install | 3
$ dnf history info 8
$ sudo dnf history undo 8 -y
# Undo: gỡ wget, curl, jq
$ rpm -q wget
package wget is not installed
Cài ứng dụng qua Flatpak
$ sudo dnf install flatpak -y
$ flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
$ flatpak remote-list
Name Options
flathub system,oci
$ flatpak search vlc
$ flatpak install flathub org.videolan.VLC -y
$ flatpak list --app
Name Application ID Version Branch Installation
VLC org.videolan.VLC 3.0.21 stable system
Câu Hỏi Ôn Tập – Chapter 10
Sự khác biệt giữa rpm và dnf khi cài phần mềm?
Lệnh nào tìm package cung cấp file /usr/bin/vim?
rpm -qf /usr/bin/vim nếu package đã cài. dnf provides /usr/bin/vim hoặc dnf provides "*/bin/vim" để tìm trong repositories (kể cả chưa cài). Hữu ích khi gặp lỗi "command not found" và muốn biết cần cài package nào.Tại sao cần EPEL repository? Cài như thế nào?
sudo dnf install epel-release -y. Packages EPEL có chất lượng tốt nhưng không được Red Hat chính thức hỗ trợ. Trên RHEL cần enable extras/crb repo trước.dnf history undo và dnf history rollback khác nhau như thế nào?
Cấu trúc tên file RPM có dạng như thế nào? Giải thích từng phần.
name-version-release.arch.rpm. Ví dụ: vim-enhanced-9.1.014-1.fc41.x86_64.rpm. name=vim-enhanced (tên package), version=9.1.014 (upstream version), release=1.fc41 (build number + distro tag), arch=x86_64 (kiến trúc). noarch: không phụ thuộc architecture (Python scripts, data files).Lệnh dnf autoremove làm gì? Khi nào cần chạy?
dnf autoremove gỡ các packages "orphaned" – được cài tự động như dependency của package khác, nhưng package chính đã bị gỡ nên không còn cần thiết. Chạy sau khi gỡ nhiều packages lớn để dọn dẹp. Tương tự apt autoremove trên Debian/Ubuntu. Kiểm tra trước khi xác nhận để tránh gỡ nhầm.Khi nào nên dùng Flatpak thay vì RPM/DNF?
Liệt kê tất cả packages đã cài với size từ lớn đến nhỏ.
rpm -qa --queryformat "%{SIZE}\t%{NAME}-%{VERSION}\n" | sort -rn | head -20. Hoặc với dnf: dnf list installed không có size. Tốt hơn: rpm -qa --queryformat "%-10{SIZE} %{NAME}\n" | sort -rn | head -20. Hữu ích khi cần dọn dẹp dung lượng ổ đĩa.File repo có những trường bắt buộc nào? Ví dụ về repo file?
rpm -V package làm gì? Output có nghĩa gì?
rpm -V verify package: so sánh files hiện tại với thông tin trong RPM database. Không có output = tất cả OK. Nếu có thay đổi hiển thị mã như: S (file size), M (permissions), 5 (MD5 checksum), T (mtime), U (user), G (group). Ví dụ: S.5....T. c /etc/ssh/sshd_config = file cấu hình bị sửa (bình thường, không đáng lo).