[baseos]
name=CentOS Stream $releasever - BaseOS
baseurl=https://mirrors.aliyun.com/centos-stream/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
# metadata_expire=6h # 元數據緩存過期時間
[appstream]
name=CentOS Stream $releasever - AppStream
baseurl=https://mirrors.aliyun.com/centos-stream/$releasever/AppStream/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[epel]
name=EPEL $releasever
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
關鍵指令:yum repolist all (列出所有倉庫)、yum makecache (預下載元數據)、yum clean all (清理緩存)。
| 任務 | 命令 (DNF/YUM 通用) | 說明 |
|---|---|---|
| 安裝套件 | dnf install nginx | 自動解決依賴 |
| 安裝本地 RPM | dnf install ./package.rpm | 自動解決本地包依賴 |
| 移除套件 | dnf remove nginx | 移除包及無用依賴 (autoremove 邏輯) |
| 徹底清除含配置 | dnf erase nginx / dnf remove --setopt=clean_requirements_on_remove=1 nginx | |
| 升級全系統 | dnf upgrade / dnf update | 同義,升級所有 |
| 升級指定包 | dnf upgrade kernel | |
| 降級包 | dnf downgrade package-1.0 | 回滾版本 |
| 搜尋包 | dnf search keyword | 名稱/摘要搜尋 |
| 查看包詳情 | dnf info nginx | |
| 列出已安裝 | dnf list installed | |
| 列出可升級 | dnf list updates | |
| 查詢檔案歸屬 | dnf provides /usr/bin/nginx | 反向查找 |
| 查看依賴樹 | dnf repoquery --requires --resolve nginx | 遞歸依賴 |
| 查看反向依賴 | dnf repoquery --whatrequires nginx | 誰依賴它 |
| 清理緩存 | dnf clean all | packages, metadata, expire-cache |
| 查看事務歷史 | dnf history | 含回滾 ID |
| 回滾事務 | dnf history undo | 撤銷指定事務 |
| 重新安裝 | dnf reinstall nginx | 修復損壞檔案 |
| 下載不安裝 | dnf download nginx | 獲取 RPM 檔案 |
RHEL 8+/CentOS Stream/Fedora 引入 AppStream 倉庫,以模組形式提供多版本軟體 (如 Node.js, Python, PostgreSQL, Maven, PHP)。
# 列出可用模組
dnf module list nodejs
# 輸出: nodejs 10, 12, 14, 16, 18 [d][e] ... (d=default, e=enabled)
# 安裝特定版本串流 (配置檔自動處理依賴)
dnf module install nodejs:18/common
dnf module install php:8.1
dnf module install postgresql:15/server
# 切換串流 (先重置)
dnf module reset nodejs
dnf module install nodejs:20
# 查看模組內容
dnf module info nodejs:18
# 掛載 ISO 或同步遠程倉庫
reposync --repoid=baseos --repoid=appstream --repoid=epel -p /var/www/html/repos --download-metadata --newest-only
createrepo_c /var/www/html/repos/baseos
createrepo_c /var/www/html/repos/appstream
# 客戶端 repo 檔指向 baseurl=https://local-mirror/repos/baseos
# 下載 nginx 及所有遞歸依賴到 ./offline_pkgs
dnf download --resolve --destdir=./offline_pkgs nginx
# 目標機離線安裝
dnf install ./offline_pkgs/*.rpm
dnf install rpm-build rpmdevtools
rpmdev-setuptree
# 獲取源碼 RPM (SRPM)
dnf download --source nginx
rpm -ivh nginx-*.src.rpm
# 編輯 ~/rpmbuild/SPECS/nginx.spec
rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec
# 產出: ~/rpmbuild/RPMS/x86_64/nginx-*.rpm
dnf clean all && dnf makecacherpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-* 或臨時 --nogpgcheck。dnf install --allowerasing pkg (允許移除衝突包)、dnf install --skip-broken (跳過有問題包)。dnf versionlock add nginx (需 dnf-plugins-core),配置文件 /etc/dnf/plugins/versionlock.list。dnf upgrade --exclude=kernel* 或 exclude=kernel* in /etc/dnf/dnf.conf。DNF/YUM 是 RPM 系系統的生命線。掌握倉庫配置優化 (換源)、模組化串流選版、事務歷史回滾、離線部署技巧、依賴關係查詢,能將軟體管理從「被動修補」轉為「主動可控」。