部署DNF仓库及NFS共享服务
一、DNF基础认知
1 核心定位
-
本质:基于RPM的智能化包管理工具(Fedora/RHEL系发行版)
- 解决传统YUM依赖解析慢的问题(SAT算法优化)
- 支持模块化系统(RHEL8+的AppStream)
- 提供事务回滚能力(
dnf history undo
)
DNF vs YUM
特性 DNF YUM 依赖解析算法 SAT求解器 递归算法 性能 更快 较慢 API支持 Python API 有限API 插件系统 更灵活 旧式插件 历史记录 完整事务记录 基础记录
2. 架构解析
组件 | 作用 |
---|---|
/etc/dnf/dnf.conf | 主配置文件(下载策略、缓存设置) |
/var/cache/dnf | 软件包缓存目录 |
/etc/yum.repos.d/ | 软件源配置文件存储位置 |
RPM数据库 | /var/lib/rpm 记录包安装状态 |
3. 软件生命周期管理
场景 | 命令示例 |
---|---|
精确安装 | dnf install httpd-2.4.6 |
本地RPM安装 | dnf install /path/to/*.rpm |
批量更新 | dnf upgrade --security |
强制降级 | dnf downgrade python3-3.6 |
卸载并清理依赖 | dnf autoremove httpd |
4.命令大全
4.1安装软件包
dnf install <包名> # 安装指定软件包
dnf install <包名1> <包名2> # 同时安装多个包
dnf install -y <包名> # 自动确认操作(无需交互)
4.2更新软件包
dnf update # 更新所有可升级的软件包
dnf update <包名> # 更新指定软件包
dnf upgrade # 与 `update` 等价(完全升级系统)
4.3卸载软件包
dnf remove <包名> # 卸载软件包(保留依赖)
dnf autoremove # 删除未使用的依赖
4.4查看软件包信息
dnf info <包名> # 显示软件包详细信息
dnf repoquery -l <包名> # 列出软件包包含的文件
4.5 仓库的管理
dnf repolist # 列出所有启用的仓库
dnf repolist --all # 列出所有仓库(包括禁用)
4.6 启用/禁用仓库
dnf config-manager --enable <仓库名> # 启用仓库
dnf config-manager --disable <仓库名> # 禁用仓库
4.7 添加/删除仓库
dnf config-manager --add-repo <仓库URL> # 通过URL添加仓库
rm -rf /etc/yum.repos.d/<仓库文件名>.repo # 删除仓库配置文件
4.8 缓存与元数据管理
dnf clean all # 清理所有缓存(元数据、软件包)
dnf makecache # 重建元数据缓存
dnf check-update # 检查可用更新(不执行安装)
4.9 搜索软件包
dnf search httpd (以httpd为例)
列出系统中特定的RPM包信息
dnf list httpd (http为例)
4.10.1
下载单个软件包
dnf download <包名>
- 示例:
dnf download nginx
- 文件默认保存到当前目录。
下载软件包及其所有依赖
dnf download --resolve <包名>
- 添加
--resolve
参数会自动下载所有依赖的 RPM 文件。 - 示例:
dnf download --resolve nginx
指定下载目录
dnf download --destdir=/path/to/dir <包名>
- 将 RPM 文件保存到指定路径(如
--destdir=~/rpms
)。
参数名称 | 说明 |
---|---|
cachedir | 缓存目录,该目录用于存储 RPM 包和数据库文件。 |
keepcache | 可选值是 1 和 0,表示是否要缓存已安装成功的那些 RPM 包及头文件,缺省值为 0,即不缓存。 |
debuglevel | 设置 dnf 生成的 debug 信息。取值范围:[0-10],数值越大会输出越详细的 debug 信息。缺省值为 2,设置为 0 表示不输出 debug 信息。 |
clean_requirements_on_remove | 删除在 dnf remove 期间不再使用的依赖项,如果软件包是通过 DNF 安装的,而不是通过显式用户请求安装的,则只能通过 clean_requirements_on_remove 删除软件包,即它是作为依赖项引入的。缺省值为 True。 |
best | 升级包时,总是尝试安装其最高版本,如果最高版本无法安装,则提示无法安装的原因并停止安装。缺省值为 True。 |
obsoletes | 可选值 1 和 0,设置是否允许更新陈旧的 RPM 包。缺省值为 1,表示允许更新。 |
gpgcheck | 可选值 1 和 0,设置是否进行 gpg 校验。缺省值为 1,表示需要进行校验。 |
plugins | 可选值 1 和 0,表示启用或禁用 dnf 插件。缺省值为 1,表示启用 dnf 插件。 |
installonly_limit | 设置可以同时安装 “installonlypkgs” 指令列出包的数量。缺省值为 3,不建议降低此值。 |
二、DNF高阶应用场景
1. 搭建本地仓库
安装 createrepo软件包
[root@localhost ~]# dnf -y install createrepo
dnf -y install createrepo
这是创建repo的工具必须需要安装
准备好本好rpm包
[root@localhost Packages]# ls | head -10
abattis-cantarell-fonts-0.303.1-3.oe2403sp1.noarch.rpm
abattis-cantarell-fonts-help-0.303.1-3.oe2403sp1.noarch.rpm
abseil-cpp-20230802.1-5.oe2403sp1.x86_64.rpm
abseil-cpp-devel-20230802.1-5.oe2403sp1.x86_64.rpm
accountsservice-23.13.9-2.oe2403sp1.x86_64.rpm
accountsservice-help-23.13.9-2.oe2403sp1.noarch.rpm
accountsservice-libs-23.13.9-2.oe2403sp1.x86_64.rpm
acl-2.3.1-3.oe2403sp1.x86_64.rpm
acl-help-2.3.1-3.oe2403sp1.noarch.rpm
acpid-2.0.34-3.oe2403sp1.x86_64.rpm
创建软件源
createrepo /位置
[root@localhost myrepo]# createrepo /myrepo/
Directory walk started
Directory walk done - 2546 packages
Temporary output repo path: /myrepo/.repodata/
Pool started (with 5 workers)
Pool finished
[root@localhost myrepo]# ls
Packages ###软件包 repodata ###元数据
添加软件源
[root@localhost yum.repos.d]# dnf config-manager --add-repo file:///myrepo
添加仓库自:file:///myrepo
[root@localhost yum.repos.d]# ls
myrepo.repo openEuler.repo
查看仓库
[root@localhost yum.repos.d]# ls
myrepo.repo openEuler.repo
[root@localhost yum.repos.d]# dnf repolist
repo id repo name
EPOL EPOL
OS OS
debuginfo debuginfo
everything everything
myrepo created by dnf config-manager from file:///myrepo
source source
update update
update-source update-source
证明
[root@localhost yum.repos.d]# mv openEuler.repo /aaa
[root@localhost yum.repos.d]# dnf repolist
repo id repo name
myrepo created by dnf config-manager from file:///myrepo
[root@localhost yum.repos.d]#
将原本的open源移除使用自己搭建的本地myrepo下载安装东西
dnf -y install
包名
[root@localhost yum.repos.d]# dnf -y install httpd
Last metadata expiration check: 0:03:39 ago on 2025年04月07日 星期一 15时44分18秒.
Dependencies resolved.
=================================================================================================================================================
Package Architecture Version Repository Size
=================================================================================================================================================
Installing:
httpd x86_64 2.4.58-7.oe2403sp1 myrepo 1.3 M
Installing dependencies:
apr x86_64 1.7.4-4.oe2403sp1 myrepo 110 k
apr-util x86_64 1.6.3-2.oe2403sp1 myrepo 109 k
httpd-filesystem noarch 2.4.58-7.oe2403sp1 myrepo 5.9 k
httpd-tools x86_64 2.4.58-7.oe2403sp1 myrepo 68 k
mailcap noarch 2.1.54-1.oe2403sp1 myrepo 31 k
mariadb-connector-c x86_64 3.3.8-2.oe2403sp1 myrepo 185 k
mod_http2 x86_64 2.0.25-3.oe2403sp1 myrepo 129 k
openEuler-logos-httpd noarch 1.0-9.oe2403sp1 myrepo 6.5 k
Transaction Summary
=================================================================================================================================================
Install 9 Packages
Total size: 1.9 M
####省略
2.软件包组的用法
dnf groups list
列出软件包组有哪些
[root@localhost yum.repos.d]# dnf groups list
Last metadata expiration check: 0:25:55 ago on 2025年04月07日 星期一 15时29分29秒.
Available Environment Groups:
服务器
虚拟化主机
Installed Environment Groups:
最小安装
Available Groups:
容器管理
开发工具
无图形终端系统管理工具
传统 UNIX 兼容性
网络服务器
科学记数法支持
安全性工具
系统工具
###列出软件包组都有那些
安装软件组
[root@localhost yum.repos.d]# dnf group install 安全性工具
Last metadata expiration check: 0:27:31 ago on 2025年04月07日 星期一 15时29分29秒.
Dependencies resolved.
=================================================================================================================================================
Package Architecture Version Repository Size
=================================================================================================================================================
Installing group/module packages:
scap-security-guide noarch 0.1.68-9.oe2403sp1 OS 48 M
Installing dependencies:
GConf2 x86_64 3.2.6-27.oe2403sp1 OS 994 k
babeltrace x86_64 1.5.11-1.oe2403sp1 OS 206 k
binutils x86_64 2.41-14.oe2403sp1 update 5.7 M
dbus-glib x86_64 0.112-3.oe2403sp1 OS 106 k
debugedit x86_64 5.0-9.oe2403sp1 OS 73 k
通过
dnf group install
组名
NFS共享服务
1. NFS 概述
- 作用:通过网络共享目录和文件,实现多台 Linux/Unix 系统间的文件访问。
- 特点:
- 基于客户端-服务器架构。
- 使用 RPC(Remote Procedure Call)协议通信。
- 支持透明访问(用户像操作本地文件一样操作远程文件)。
- 版本:
- NFSv3(广泛兼容)、NFSv4(性能优化、安全性增强)。
2.实例
-
安装nfs-utils ,rpcbind软件包
[root@localhost ~]# dnf install -y nfs-utils rpcbind [root@localhost ~]# systemctl enable nfs [root@localhost ~]# systemctl enable rpcbind
2.设置共享目录
[root@localhost ~]# vim /etc/exports /opt/wwwroot 192.168.10.0/24 (rw,sync,no_root_squash) ###位置+ ip地址或者ip段主机名 rw代表可读可写 sync同步写入 no_root_squash 当客户机以root身份访问时赋予本地root权限
- 常用权限选项:
rw
:读写权限。ro
:只读。sync
:数据同步写入磁盘。no_root_squash
:允许客户端 root 用户保留权限。
- 常用权限选项:
-
启动服务:
[root@localhost ~]# systemctl start rpcbind [root@localhost ~]# systemctl start nfs-server
客户端配置
-
安装客户端工具:
[root@localhost ~]# dnf -y install nfs-utils rpcbind [root@localhost ~]# systemctl enable rpcbind
2.编辑配置文件
[root@localhost ~]# vim /etc/exports
/opt/share 192.168.10.0/24(rw,sync,no_root_squash)
3.挂载 NFS 共享目录:
[root@localhost ~]# showmount -e 192.168.10.101
Export list for 192.168.10.101:
/opt/share 192.168.10.0/24
###客户机下查看能否找到101上的工项目
[root@localhost ~]# df -hT
文件系统 类型 大小 已用 可用 已用% 挂载点
/dev/mapper/openeuler-root ext4 191G 1.8G 180G 1% /
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 1.7G 0 1.7G 0% /dev/shm
tmpfs tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
tmpfs tmpfs 675M 11M 665M 2% /run
tmpfs tmpfs 1.7G 0 1.7G 0% /tmp
/dev/nvme0n1p2 ext4 974M 174M 733M 20% /boot
192.168.10.101:/opt/share nfs4 191G 1.8G 180G 1% /aaa
###df-hT 可以看到已经挂载上了
证明sync同步
[root@localhost ~]# cd /aaa
[root@localhost aaa]# ls
[root@localhost aaa]# ls
[root@localhost aaa]# touch test
[root@localhost aaa]# ls
test
###客户端
[root@localhost share]# ls
test
###服务端
mount -t nfs 服务端IP:/nfs_share /本地挂载点
- 示例:
mount -t nfs 192.168.1.100:/nfs_share /mnt/nfs
-
开机自动挂载(
/etc/fstab
):服务端IP:/nfs_share /本地挂载点 nfs defaults 0 0
3. 常用命令
命令 | 作用 |
---|---|
showmount -e <服务端IP> | 查看服务端共享的目录列表 |
exportfs -v | 显示服务端当前导出的共享目录 |
umount /挂载点 | 卸载已挂载的 NFS 目录 |
nfsstat | 查看 NFS 服务统计信息 |
给nfs可以通过防火墙的指令 firewall-cmd --permanent --add-service=nfs
5. 常见问题排查
- 客户端无法挂载:
- 检查服务端防火墙是否放行 NFS(端口 2049)和 RPC(端口 111)。
- 确认服务端
/etc/exports
配置正确。 - 查看日志:
tail -f /var/log/messages
。
- 权限拒绝(Permission Denied):
- 确保共享目录权限和
/etc/exports
中的选项允许客户端操作。 - 检查客户端用户 UID/GID 是否与服务端文件权限匹配。
- 确保共享目录权限和
6. 应用场景
- 集群存储:多台服务器共享同一数据目录(如 Web 集群的静态资源)。
- 数据备份:将备份文件存储到 NFS 共享目录。
- 开发环境:团队共享代码或配置文件。
附:NFS vs Samba
特性 | NFS | Samba |
---|---|---|
适用系统 | Linux/Unix 之间 | Linux 与 Windows 之间 |
协议效率 | 高(二进制协议) | 较低(基于 SMB/CIFS) |
配置复杂度 | 简单 | 较复杂(需配置用户认证) |
跨平台支持 | 弱 | 强 |