在现代 Linux 运维体系中,软件包管理与分布式存储共享是保障系统高效运行的两大核心支柱。DNF(Dandified YUM)作为新一代 RPM 包管理工具,凭借自动依赖解析、灵活仓库配置等特性,极大简化了软件的安装、升级与维护流程。而网络文件系统(NFS)则为跨服务器数据共享提供了无缝解决方案,是构建负载均衡集群、实现数据集中备份的关键技术。本文将基于 openEuler 系统,从理论到实践,全面讲解 DNF 仓库的部署配置、软件包管理技巧以及 NFS 共享服务的搭建与访问方法,助力运维人员打造高效、稳定的系统服务架构。

一、DNF 软件仓库的部署与配置

DNF 是 RPM 包管理系统的升级版本,与 YUM 完全兼容,同时提供了更优的性能和扩展能力。部署 DNF 仓库的核心在于配置文件的优化与软件源的管理,无论是本地私有仓库还是远程公共镜像源,合理的配置都能显著提升软件管理效率。

1.1 DNF 配置文件解析

DNF 的配置体系由主配置文件和软件源配置文件两部分组成,两者协同工作,共同定义 DNF 的运行规则和软件包获取来源。

1.1.1 主配置文件 /etc/dnf/dnf.conf

主配置文件 /etc/dnf/dnf.conf 包含两个核心部分:main 全局设置和 repository 软件源设置。

  • main 部分:负责定义 DNF 的全局运行参数,如 GPG 签名检查、内核版本保留数量、依赖清理规则等,这些参数会作用于所有软件源。
  • repository 部分:用于直接定义软件源信息,支持配置多个不同的软件仓库,但仓库名称不可重复,否则会引发冲突。

一个标准的 main 部分配置示例如下:

[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False

各参数的功能说明:

参数 功能
gpgcheck=1 启用 GPG 签名检查,验证软件包完整性和来源合法性,1 为开启,0 为关闭
installonly_limit=3 限制内核等 “仅安装” 类型软件包的保留数量,避免占用过多磁盘空间
clean_requirements_on_remove=True 卸载软件时自动清理不再被依赖的依赖包,减少孤儿包
best=True 优先选择与系统兼容性最佳的软件包版本,通常为最新稳定版
skip_if_unavailable=False 软件源不可用时直接终止操作,设为 True 则跳过不可用源
1.1.2 软件源配置文件目录 /etc/yum.repos.d

除了在 /etc/dnf/dnf.conf 中直接配置 repository 部分,更推荐的方式是在 /etc/yum.repos.d 目录下创建独立的 .repo 文件。这种方式便于对不同软件源进行分类管理,尤其适合同时配置多个仓库的场景。

openEuler 系统的官方软件源配置示例(openEuler.repo):

[os]
name=openEuler-$releasever - OS
baseurl=https://repo.openeuler.org/openEuler-$releasever/OS/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://repo.openeuler.org/openEuler-$releasever/OS/$basearch/RPM-GPG-KEY-openEuler

其中关键参数说明:

  • name:软件仓库的描述名称,便于识别。
  • baseurl:软件源的地址,支持本地路径(file://)、FTP(ftp://)和 HTTP(https://)协议。
  • enabled=1:启用该软件源,设为 0 则禁用。
  • gpgkey:指定 GPG 公钥文件地址,用于验证软件包签名。

1.2 DNF 运行效率优化

在网络带宽有限或服务器性能不足的场景下,对 DNF 进行参数优化能够显著提升软件包下载和安装速度。优化的核心是调整主配置文件 /etc/dnf/dnf.conf 中的参数,具体步骤如下:

  1. 安装优化所需的工具包
    dnf install dnf-plugins-core deltarpm -y
    
  2. 编辑 /etc/dnf/dnf.conf,添加或修改以下参数
    [main]
    gpgcheck=0
    fastestmirror=True
    deltarpm=True
    max_parallel_downloads=10
    metadata_expire=-1
    
  3. 关闭自动缓存更新定时器,清理旧缓存
    systemctl disable --now dnf-makecache.timer
    dnf clean all --refresh
    

各优化参数的作用:

  • fastestmirror=True:启用最快镜像检测功能,自动选择响应速度最优的软件源镜像。
  • deltarpm=True:开启增量 RPM 包更新,仅下载软件包的差异部分,节省带宽和时间。
  • max_parallel_downloads=10:设置最大并行下载数为 10,同时下载多个软件包提升效率。
  • metadata_expire=-1:设置软件源元数据永不过期,避免频繁下载索引信息,适合离线环境。

注意:将 gpgcheck 设为 0 会关闭软件包签名验证,存在安全风险,仅建议在临时调试时使用,生产环境需保持 gpgcheck=1

1.3 私有软件源仓库的搭建

在企业内网环境中,搭建私有 DNF 仓库能够有效降低对公网的依赖,同时实现对软件包的安全管控和版本统一。私有仓库的搭建分为本地仓库创建仓库配置发布两个步骤。

1.3.1 创建本地软件仓库
  1. 安装仓库创建工具 createrepo
    dnf install createrepo -y
    
  2. 创建本地仓库目录,同步所需软件包
    mkdir -p /opt/myrepo
    cd /opt/myrepo
    reposync # 同步公网软件源包到本地,可通过参数指定同步的仓库
    
  3. 生成仓库元数据,完成本地仓库创建
    createrepo /opt/myrepo/
    
1.3.2 配置并发布私有仓库
  1. /etc/yum.repos.d 目录下创建私有仓库配置文件 myrepo.repo
    [myrepo]
    name=My Private DNF Repository
    baseurl=file:///opt/myrepo
    gpgcheck=0
    enabled=1
    
  2. 验证私有仓库是否生效
    dnf repolist # 查看已启用的软件源列表,若包含myrepo则配置成功
    

如果需要将私有仓库共享给内网其他服务器使用,可以将 baseurl 设置为 FTP 或 HTTP 地址,例如 baseurl=ftp://192.168.2.149/repo-Euler2403/OS

1.4 软件源的启用与禁用管理

在日常运维中,经常需要根据需求启用或禁用特定的软件源。DNF 提供了 dnf config-manager 命令,实现对软件源的灵活管理。

  1. 查看当前系统的软件源列表及状态
    dnf repolist all
    
  2. 启用指定软件源(以 os 仓库为例)
    dnf config-manager --set-enable os
    
  3. 禁用指定软件源
    dnf config-manager --set-disable os
    
  4. 批量启用或禁用匹配的软件源(支持正则表达式)
    dnf config-manager --set-enable update* # 启用所有名称以update开头的仓库
    

二、使用 DNF 工具管理软件包

DNF 提供了一套简洁高效的命令集,覆盖软件包的搜索、安装、卸载、更新等全生命周期管理。所有命令均需要在 root 权限下执行。

2.1 软件包的查询与搜索

  1. 搜索指定软件包(以 httpd 为例)
    dnf search httpd
    
  2. 列出系统中所有已安装和可用的软件包
    dnf list all
    
  3. 查看指定软件包的详细信息
    dnf info httpd zip
    

2.2 软件包的安装与下载

  1. 安装单个软件包及其依赖
    dnf install httpd -y
    
  2. 同时安装多个软件包
    dnf install httpd nginx mysql --setopt=strict=0 -y
    
  3. 下载软件包到本地(不安装)
    dnf download httpd # 仅下载软件包
    dnf download --resolve httpd # 下载软件包及未安装的依赖
    

2.3 软件包的卸载

卸载软件包时,DNF 会自动清理其依赖的、无其他软件引用的包,保持系统精简。

dnf remove httpd -y

2.4 软件包组的批量管理

软件包组是为实现特定功能而打包的一组软件集合,例如 “开发工具集”“桌面环境” 等。通过软件包组管理,可以一次性完成多个相关软件的安装或卸载。

  1. 查看系统中的软件包组列表
    dnf group list
    
  2. 查看指定软件包组的详细信息(以 Development Tools 为例)
    dnf group info "Development Tools"
    
  3. 安装软件包组
    dnf group install "Development Tools" -y
    
  4. 卸载软件包组
    dnf group remove "Development Tools" -y
    

2.5 系统软件包的更新

保持系统软件包最新是提升系统安全性和稳定性的关键,DNF 提供了完善的更新管理功能。

  1. 检查系统中可更新的软件包
    dnf check-update
    
  2. 升级指定软件包
    dnf update httpd -y
    
  3. 升级指定软件包组
    dnf group update "Development Tools" -y
    
  4. 升级系统中所有软件包
    dnf update -y
    

三、NFS 共享存储服务的部署与访问

网络文件系统(NFS)是一种基于 TCP/IP 协议的分布式文件共享协议,允许客户端像访问本地文件一样访问服务器端的共享目录。NFS 广泛应用于负载均衡集群、数据备份等场景,是实现跨主机数据共享的核心技术。

3.1 NFS 服务的依赖与原理

NFS 服务的运行依赖于 RPC(远端过程调用)机制,RPC 负责将客户端的请求映射到服务器端的具体服务进程。在 openEuler 系统中,需要安装两个关键软件包:

  • nfs-utils:提供 NFS 共享发布和访问的核心功能。
  • rpcbind:提供 RPC 协议支持,实现端口映射。

NFS 服务的启动顺序有严格要求:必须先启动 rpcbind 服务,再启动 nfs 服务,否则 NFS 服务无法正常注册 RPC 端口。

3.2 NFS 服务器端配置

3.2.1 安装并启动服务
  1. 关闭防火墙和 SELinux(生产环境建议配置规则而非直接关闭)
    setenforce 0
    systemctl stop firewalld
    
  2. 安装软件包
    dnf install nfs-utils rpcbind -y
    
  3. 设置服务自启动并启动服务
    systemctl enable rpcbind nfs
    systemctl start rpcbind nfs
    
  4. 验证服务是否正常运行
    netstat -anpt | grep rpc # 查看RPC相关进程的监听端口
    
3.2.2 配置共享目录

NFS 的共享目录配置文件为 /etc/exports,文件格式为 共享目录 客户机地址(权限选项)

  1. 创建共享目录
    mkdir -p /opt/wwwroot
    
  2. 编辑 /etc/exports 文件,配置共享规则
    /opt/wwwroot 192.168.10.0/24(rw,sync,no_root_squash)
    /var/ftp/pub 192.168.10.101(ro) 192.168.10.102(rw)
    
  3. 关键权限选项说明
    • rw/rorw 表示读写权限,ro 表示只读权限。
    • sync:同步写入数据,确保数据写入磁盘后再返回结果,提升数据安全性。
    • no_root_squash:客户端以 root 身份访问时,赋予服务器端 root 权限,默认 root_squash 会将 root 用户映射为 nfsnobody
3.2.3 查看共享目录发布状态

配置完成后,可通过以下命令查看服务器端发布的 NFS 共享目录:

showmount -e

3.3 NFS 客户端配置与访问

客户端要访问 NFS 共享目录,需要安装相关工具并执行挂载操作,支持手动挂载和开机自动挂载两种方式。

3.3.1 客户端环境准备
  1. 安装客户端工具包
    dnf install nfs-utils rpcbind -y
    systemctl enable rpcbind && systemctl start rpcbind
    
  2. 查看服务器端共享目录
    showmount -e 192.168.10.101 # 替换为NFS服务器的IP地址
    
3.3.2 手动挂载 NFS 共享目录
  1. 创建本地挂载点
    mkdir -p /var/www/html
    
  2. 执行挂载命令,将服务器共享目录挂载到本地
    mount 192.168.10.101:/opt/wwwroot /var/www/html
    
  3. 验证挂载结果
    df -h # 查看挂载信息
    tail -1 /etc/mtab # 查看最新的挂载记录
    
3.3.3 配置开机自动挂载

手动挂载的目录在系统重启后会失效,通过配置 /etc/fstab 文件可以实现开机自动挂载。

  1. 编辑 /etc/fstab 文件,添加以下内容
    192.168.10.101:/opt/wwwroot /var/www/html nfs defaults,netdev 0 0
    
    参数说明:
    • netdev:表示该挂载需要网络支持,避免系统启动时网络未就绪导致挂载失败。
    • defaults:使用默认挂载参数,包含 rwsuiddev 等。
  2. 验证自动挂载配置
    mount -a # 重新加载/etc/fstab配置,无需重启系统即可生效
    

3.4 NFS 共享目录的强制卸载

当 NFS 服务器端服务异常中断,或客户端与服务器端网络断开时,直接执行 umount 命令可能会出现 “设备忙” 的报错。此时需要使用强制卸载参数:

umount -lf /var/www/html

参数说明:

  • -l:解除繁忙状态的文件系统挂载。
  • -f:强制卸载。

四、总结与运维建议

本文详细讲解了 DNF 软件仓库和 NFS 共享服务的全流程部署与管理方法。DNF 作为新一代 RPM 包管理工具,通过合理配置私有仓库和优化运行参数,能够实现软件包的高效、安全管理;NFS 则通过简单的配置,即可完成跨主机的文件共享,支撑分布式系统的构建。

在实际运维工作中,建议遵循以下原则:

  1. 安全性优先:生产环境中保持 DNF 的 gpgcheck=1,验证软件包签名;NFS 共享权限遵循最小权限原则,避免过度授权。
  2. 稳定性保障:NFS 服务建议部署在稳定的网络环境中,客户端配置 netdev 参数确保开机挂载成功;DNF 仓库定期同步更新,保证软件包版本最新。
  3. 效率优化:根据网络带宽调整 DNF 的并行下载数和增量更新参数;NFS 共享目录尽量使用 sync 参数,兼顾性能与数据安全。

通过掌握上述技术,运维人员能够高效完成 Linux 系统的软件管理和存储共享配置,为构建高可用、易维护的 IT 基础设施提供坚实支撑。

五、扩展与延伸

  1. DNF 插件扩展:DNF 支持丰富的插件,例如 dnf-plugin-versionlock 可以锁定软件包版本,避免误升级;dnf-plugin-changelog 可以查看软件包更新日志。
  2. NFS 高可用部署:结合 Pacemaker 和 DRBD 技术,可以实现 NFS 服务的高可用集群,避免单点故障。
  3. 私有仓库的远程同步:使用 rsync 工具可以实现多个私有仓库之间的增量同步,保证仓库数据的一致性。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐