hoatranlab.io.vn Zalo: 0917516878 Hotline: 0917516878 [email protected]
HoaTranLab Logo HoaTranLab
Linux Bible 11th Edition • Chapter 10

Getting and Managing Software

Quản lý phần mềm Linux với RPM, DNF, repositories, và các package manager hiện đại: snap, flatpak. Cài, cập nhật, gỡ, tìm kiếm packages.

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/.

Terminal – RPM commands

$ 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.

Terminal – DNF operations

$ 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

Terminal – 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.

Terminal – Repository Management

$ 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

Terminal – DNF History

$ 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

Snap (Canonical/Snapcraft)

$ 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

Flatpak (FreeDesktop)

$ 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ăngRPM/DNFSnapFlatpak
Hệ thống hỗ trợRHEL/FedoraUbuntu + nhiều distroCross-distro (mọi Linux)
SandboxKhôngCó (confinement)Có (portal-based)
DependenciesShared (system)BundledShared runtimes
Dung lượngNhỏ nhấtLớn hơnLớn hơn
Use caseServer, system packagesDesktop apps (Canonical eco)Desktop apps (GNOME/KDE)

Lab Thực Hành – Chapter 10

1

Khám phá RPM Database

Terminal

$ 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

2

Cài và Quản lý Packages với DNF

Terminal

$ 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

3

Cài nhóm Development Tools

Terminal

$ 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

4

Thêm EPEL Repository

Terminal

$ 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

5

Sử dụng DNF History

Terminal

$ 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

6

Cài ứng dụng qua Flatpak

Terminal

$ 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

1

Sự khác biệt giữa rpm và dnf khi cài phần mềm?

rpm là low-level tool cài trực tiếp từ file .rpm, không tự resolve dependencies. dnf là high-level package manager kết nối đến repositories, tự động tải và cài dependencies. Dùng dnf cho production (tự động quản lý deps), dùng rpm khi cần cài file local hoặc query database. dnf cũng có history và rollback.
2

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.
3

Tại sao cần EPEL repository? Cài như thế nào?

EPEL (Extra Packages for Enterprise Linux) cung cấp hàng nghìn packages không có trong RHEL official repos (htop, python3-pip, screen, tmux, ...). Cài: 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.
4

dnf history undo và dnf history rollback khác nhau như thế nào?

undo reverses một transaction cụ thể (bất kể thứ tự). rollback quay về trạng thái hệ thống tại một transaction cụ thể, undo tất cả transactions sau nó. Ví dụ: undo 5 chỉ undo transaction 5. rollback 3 undo tất cả từ transaction hiện tại về transaction 3. Dùng rollback sau update bị lỗi.
5

Cấu trúc tên file RPM có dạng như thế nào? Giải thích từng phần.

Dạng: 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).
6

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.
7

Khi nào nên dùng Flatpak thay vì RPM/DNF?

Dùng Flatpak khi: cần phiên bản mới hơn của ứng dụng desktop mà repo chính không có, cần ứng dụng GUI mà không có trong repos, muốn sandbox để bảo mật (app không truy cập toàn bộ filesystem), cần chạy ứng dụng cross-distro. Không dùng Flatpak cho: server packages, system tools, headless services – tiếp tục dùng RPM/DNF.
8

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.
9

File repo có những trường bắt buộc nào? Ví dụ về repo file?

Trường bắt buộc: [repo-id] (section header), name (tên hiển thị), baseurl hoặc metalink (URL repo), enabled=1 (1=enable, 0=disable), gpgcheck=1 (verify GPG signature). Tùy chọn: gpgkey (URL GPG key), priority, exclude, includepkgs. Lưu tại /etc/yum.repos.d/myrepo.repo.
10

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).