部署DNF仓库及NFS共享服务

部署DNF仓库及NFS共享服务

一、DNF基础认知

1 核心定位

  • 本质:基于RPM的智能化包管理工具(Fedora/RHEL系发行版)

    • 解决传统YUM依赖解析慢的问题(SAT算法优化)
    • 支持模块化系统(RHEL8+的AppStream)
    • 提供事务回滚能力(dnf history undo

    DNF vs YUM

    特性DNFYUM
    依赖解析算法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.实例

  1. 安装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 用户保留权限。
  2. 启动服务

    [root@localhost ~]# systemctl start rpcbind
    [root@localhost ~]# systemctl start nfs-server
    
    

客户端配置

  1. 安装客户端工具

    [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
  1. 开机自动挂载/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. 常见问题排查

  1. 客户端无法挂载
    • 检查服务端防火墙是否放行 NFS(端口 2049)和 RPC(端口 111)。
    • 确认服务端 /etc/exports 配置正确。
    • 查看日志:tail -f /var/log/messages
  2. 权限拒绝(Permission Denied)
    • 确保共享目录权限和 /etc/exports 中的选项允许客户端操作。
    • 检查客户端用户 UID/GID 是否与服务端文件权限匹配。

6. 应用场景

  • 集群存储:多台服务器共享同一数据目录(如 Web 集群的静态资源)。
  • 数据备份:将备份文件存储到 NFS 共享目录。
  • 开发环境:团队共享代码或配置文件。

附:NFS vs Samba

特性NFSSamba
适用系统Linux/Unix 之间Linux 与 Windows 之间
协议效率高(二进制协议)较低(基于 SMB/CIFS)
配置复杂度简单较复杂(需配置用户认证)
跨平台支持
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值