Quản lý phần mềm: dnf, repository và Flatpak
Thực hiện trên server của bạn, rồi kiểm tra từng tiêu chí.
Vì sao cần học
Cài phần mềm bằng cách tải file về rồi chép tay thì không cập nhật được, không biết file nào thuộc về đâu và không gỡ sạch được. Package manager giữ danh sách file, phụ thuộc, phiên bản và chữ ký. Trong doanh nghiệp, server thường chỉ được dùng repository nội bộ đã kiểm duyệt. RHCSA trên RHEL 10 yêu cầu cả repository lẫn Flatpak.
Mục tiêu
- Tìm, cài, nâng cấp, gỡ package và xem lịch sử giao dịch bằng
dnf. - Tra cứu package sở hữu một file, file thuộc một package bằng
rpm. - Tạo và cấu hình một repository local có kiểm tra chữ ký.
- Thêm remote Flatpak, cài và gỡ ứng dụng Flatpak.
Điều kiện tiên quyết
- Bài Shell, biến môi trường và script đầu tiên.
Mental model
RPM là định dạng gói và cơ sở dữ liệu các package đã cài. dnf đứng trên RPM: đọc metadata từ các repository, giải quyết phụ thuộc, tải và kiểm tra chữ ký GPG trước khi cài. Mỗi repository được khai báo bằng một file .repo trong /etc/yum.repos.d/.
Flatpak cài ứng dụng (thường là ứng dụng desktop) kèm runtime riêng, tách khỏi thư viện hệ thống. Nó không thay thế dnf cho phần mềm hệ thống, nhưng cho phép cài phiên bản ứng dụng mới mà không ảnh hưởng hệ điều hành.
| Việc | dnf / rpm | Flatpak |
|---|---|---|
| Nguồn | Repository .repo | Remote (flatpak remote-add) |
| Cài | dnf install | flatpak install |
| Danh sách | dnf list --installed, rpm -qa | flatpak list |
| Gỡ | dnf remove | flatpak uninstall |
Thực hành (Guided Lab)
1. Tra cứu và cài đặt
dnf search jq
dnf info jq
sudo dnf install -y jq
rpm -qi jq | head -5
rpm -ql jq | head
rpm -qf /usr/bin/jq
dnf history | head -5
Giải thích lệnh và tham số
| Lệnh / tùy chọn | Ý nghĩa |
|---|---|
dnf search jq, dnf info jq | Tìm package và xem mô tả trước khi cài. |
rpm -qi jq | -q truy vấn package đã cài, -i xem thông tin. |
rpm -ql jq | -l liệt kê file do package đã cài cung cấp. |
rpm -qf /usr/bin/jq | -f truy vấn package sở hữu đường dẫn này. |
dnf history | Xem lịch sử giao dịch cài, cập nhật, gỡ package. |
head | Mặc định chỉ in 10 dòng đầu; head -5 lấy 5 dòng. |
dnf list --installed liệt kê package đã cài; rpm -qa truy vấn tất cả (-a) package trong cơ sở dữ liệu RPM. Đây là lệnh RPM trên VM RHEL-family, không chạy trực tiếp trên macOS.
rpm -qf trả lời câu hỏi "file này đến từ package nào?". Lệnh này rất hữu ích khi điều tra một file lạ trên server.
2. Repository local
Tải một package vào thư mục, tạo metadata, rồi khai báo repository:
sudo dnf install -y createrepo_c dnf-plugins-core
sudo install -d /srv/kdc-repo
sudo dnf download --destdir /srv/kdc-repo tree
sudo createrepo_c /srv/kdc-repo
sudo tee /etc/yum.repos.d/kdc-local.repo <<'EOF'
[kdc-local]
name=KDC local lab repository
baseurl=file:///srv/kdc-repo
enabled=1
gpgcheck=1
EOF
dnf repolist
sudo dnf install -y --disablerepo='*' --enablerepo=kdc-local tree
dnf info tree | grep -i '^From repo'
Giải thích lệnh và tham số
dnf download --destdir /srv/kdc-repo tree tải RPM của tree vào thư mục chỉ định, chưa cài nó. createrepo_c sinh metadata để thư mục trở thành repository. dnf repolist liệt kê repository đang bật. --disablerepo='*' tắt mọi repo trong lần gọi này, --enablerepo=kdc-local chỉ bật repo lab; nháy đơn giữ * khỏi bị shell mở rộng thành tên file. grep -i tìm không phân biệt chữ hoa/thường.
Trong file .repo, baseurl=file:///srv/kdc-repo là địa chỉ repo local, enabled=1 bật repo, gpgcheck=1 yêu cầu kiểm tra chữ ký package. Đây là cấu hình, không phải các lệnh shell. Khi bổ sung RPM, dùng createrepo_c --update /srv/kdc-repo để cập nhật metadata; dnf clean metadata xóa cache metadata để DNF tải lại.
gpgcheck=1 buộc dnf kiểm tra chữ ký của package bằng các khóa đã có trong hệ thống. Package tree được ký bởi bản phân phối nên vẫn cài được. Đừng tắt gpgcheck để "cho nhanh".
3. Flatpak
sudo dnf install -y flatpak
sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak remotes --system
flatpak search calculator
sudo flatpak install -y --system flathub org.gnome.Calculator
flatpak list --app
flatpak info org.gnome.Calculator | head
Giải thích lệnh và tham số
flatpak remote-add thêm nguồn ứng dụng; --if-not-exists bỏ qua nếu remote đã có. --system chọn cài đặt cấp toàn hệ thống (khác cài riêng user). flatpak search tìm ứng dụng, install -y cài và tự xác nhận, list --app chỉ liệt kê ứng dụng, info xem metadata. flathub là tên remote; org.gnome.Calculator là ID ứng dụng, không phải đường dẫn file.
Lần cài đầu tải cả runtime org.gnome.Platform: khoảng 420 MB tải về, 1,2 GB sau khi cài (đo tháng 10/2026), nên mất vài phút. Ứng dụng có giao diện đồ họa; trên server không có màn hình, bạn chỉ cần cài và kiểm tra được.
Tự kiểm tra (Verification)
rpm -q jq tree
cat /etc/yum.repos.d/kdc-local.repo
flatpak remotes --system
flatpak list --app
Giải thích lệnh và tham số
rpm -q jq tree truy vấn (-q) hai package đã cài. flatpak remotes --system xem remote ở phạm vi toàn hệ thống; flatpak list --app chỉ liệt kê ứng dụng, bỏ runtime. cat đọc cấu hình repo.
Chọn server và bấm Kiểm tra kết quả.
Lỗi thường gặp
dnf downloadbáo không có lệnh: thiếudnf-plugins-core.- Quên
createrepo_choặc thêm package mà không chạy lại: dnf không thấy package mới. Chạycreaterepo_c --updaterồidnf clean metadata. baseurl=/srv/kdc-repothiếufile://: dnf không hiểu đó là đường dẫn local.flatpak installkhông có--systemkhi chạy bằng user thường: ứng dụng được cài vào tài khoản của bạn, không phải toàn hệ thống.
Ghi chú production
- Server production thường dùng repository nội bộ (mirror có kiểm duyệt). Quy trình là: thử bản cập nhật trên staging, rồi mới đồng bộ vào repository production.
dnf history undo <ID>hoàn tác một giao dịch, rất hữu ích khi một bản cập nhật làm hỏng dịch vụ.- Vá bảo mật định kỳ:
dnf updateinfo list --securitycho biết bản vá nào đang chờ.
Ghi chú Ubuntu
Dùng apt và dpkg: apt install, dpkg -S /usr/bin/jq (tương đương rpm -qf), dpkg -L jq. Repository khai báo trong /etc/apt/sources.list.d/. Phần repository local và tiêu chí kdc-local.repo chỉ áp dụng cho RHEL-family.
Dọn dẹp
sudo flatpak uninstall -y --system org.gnome.Calculator
sudo flatpak uninstall -y --unused
sudo dnf remove -y tree
sudo rm -f /etc/yum.repos.d/kdc-local.repo
sudo rm -rf /srv/kdc-repo
Giải thích lệnh và tham số
flatpak uninstall gỡ ứng dụng; --unused gỡ runtime không còn ứng dụng nào cần. dnf remove -y tree gỡ package RPM và tự xác nhận. Đọc danh sách package/runtime sẽ bị gỡ trước khi áp dụng các lệnh này ngoài bài lab.