本教程完全适配openEuler-24.03-LTS-SP1-x86_64-dvd版本,保留原核心流程,针对 openEuler 的GPG 密钥、默认系统配置、仓库文件做专属适配,全程 root 权限操作(sudo -i切换),涵盖本地 DNF 仓库搭建(基于 openEuler 原生 ISO)、NFS 服务端配置、客户端 NFS 挂载、局域网 NFS-DNF 共享仓库全套流程,解决 openEuler 特有的 GPG 校验、repo 配置等问题,零基础可直接上手。
openEuler-24.03-LTS-SP1 核心适配点:
前置准备
1. 环境要求(openEuler 专属)
| NFS/DNF 服务端 | openEuler-24.03-LTS-SP1-x86_64 | 192.168.1.100 | 挂载 openEuler 原生 ISO、装 NFS/DNF 相关包 |
| NFS/DNF 客户端 | openEuler-24.03-LTS-SP1-x86_64 | 192.168.1.101 | 装 NFS 客户端、挂载 NFS、配置 DNF 源 |
- 服务端 + 客户端需局域网互通,提前下载好openEuler-24.03-LTS-SP1-x86_64-dvd.iso镜像(服务端用);
- 无需额外配置系统依赖,openEuler 原生支持 DNF 和 NFS,无兼容性问题。
2. 基础环境配置(所有 openEuler 节点)
(1)SELinux 配置(openEuler 专属,无需关闭)
openEuler-24.03-LTS-SP1 默认 SELinux 为 Permissive 模式(宽松模式,不限制操作),无需修改/etc/selinux/config,直接验证即可:
# 验证SELinux状态,输出Permissive即正常
getenforce
# 若需临时改为Enforcing(生产环境),执行:setenforce 1
(2)防火墙配置(测试 / 生产按需选择)
- 测试环境:直接关闭 firewalld(便捷,无端口限制) systemctl stop firewalld && systemctl disable firewalld
- 生产环境:仅开放 NFS 相关端口(不关闭防火墙,安全) # 开放NFS核心端口+服务,永久生效
firewall-cmd –add-port=111/tcp –add-port=111/udp –permanent
firewall-cmd –add-port=2049/tcp –add-port=2049/udp –permanent
firewall-cmd –add-service=nfs –add-service=rpc-bind –add-service=mountd –permanent
# 重新加载防火墙规则
firewall-cmd –reload
# 验证开放结果
firewall-cmd –list-all
(3)主机名 + 本地解析(可选,方便识别)
# 服务端设置主机名
hostnamectl set-hostname openEuler-NFS-DNF-Server
# 客户端设置主机名
hostnamectl set-hostname openEuler-NFS-DNF-Client
# 所有节点添加本地解析(避免DNS问题)
echo "192.168.1.100 openEuler-NFS-DNF-Server" >> /etc/hosts
echo "192.168.1.101 openEuler-NFS-DNF-Client" >> /etc/hosts
(4)网络连通性验证
客户端 ping 服务端,确保无丢包:
ping 192.168.1.100 -c 4
第一部分:服务端搭建 openEuler 本地 DNF 仓库(基于原生 ISO)
openEuler-24.03 的 ISO 镜像内包含完整的 BaseOS(系统基础包)和 AppStream(应用包),与 RHEL 系目录结构一致,仅需替换 GPG 密钥即可实现本地仓库搭建,摆脱网络依赖。
步骤 1:上传并永久挂载 openEuler ISO 镜像
(1)上传 ISO 镜像
将openEuler-24.03-LTS-SP1-x86_64-dvd.iso上传到服务端/opt目录(推荐),可通过:
- XFTP/SCP 工具直接上传;
- rz 命令(需先装lrzsz:dnf install lrzsz -y,若当前无网络,后续本地仓库搭建后再装)。
(2)创建 ISO 挂载目录
# 固定挂载点,方便后续管理,避免路径混乱
mkdir -p /mnt/iso
(3)永久挂载 ISO 镜像(/etc/fstab,重启不失效)
临时挂载重启失效,openEuler 支持iso9660文件系统,直接配置 fstab:
# 编辑fstab文件
vim /etc/fstab
# 在文件末尾添加以下内容(ISO路径按实际上传位置修改)
/opt/openEuler-24.03-LTS-SP1-x86_64-dvd.iso /mnt/iso iso9660 defaults 0 0
# 保存退出后,执行挂载命令生效(无任何报错即成功)
mount -a
# 核心验证:查看挂载目录,必须有BaseOS和AppStream文件夹
ls /mnt/iso
✅ 关键验证结果:/mnt/iso下能看到BaseOS、AppStream、EFI、images等文件夹,说明 ISO 挂载成功。
步骤 2:配置 openEuler 专属本地 DNF 仓库(核心适配 GPG 密钥)
DNF 仓库配置文件存放在/etc/yum.repos.d/,后缀必须为.repo,需先禁用 openEuler 默认网络源,再新建本地源(重点替换 GPG 密钥为 openEuler 原生)。
(1)禁用 openEuler 默认网络源
openEuler 默认 repo 文件为openEuler.repo,直接重命名失效即可:
cd /etc/yum.repos.d/
# 重命名默认repo,加.bak后缀(避免干扰)
mv openEuler.repo openEuler.repo.bak
# 若有其他repo文件,一并重命名:mv *.repo *.repo.bak
(2)新建 openEuler 本地 DNF 仓库配置文件
创建local_openEuler.repo(文件名自定义,后缀.repo),核心适配 GPGKEY 路径和文件名:
vim /etc/yum.repos.d/local_openEuler.repo
添加以下内容(直接复制,无需修改,适配 openEuler-24.03):
# BaseOS仓库:openEuler系统基础包,必须与ISO内目录名一致
[BaseOS]
name=openEuler-24.03-Local-BaseOS
baseurl=file:///mnt/iso/BaseOS
enabled=1
gpgcheck=1
gpgkey=file:///mnt/iso/RPM-GPG-KEY-openEuler
# AppStream仓库:openEuler应用程序包,含大部分工具/服务
[AppStream]
name=openEuler-24.03-Local-AppStream
baseurl=file:///mnt/iso/AppStream
enabled=1
gpgcheck=1
gpgkey=file:///mnt/iso/RPM-GPG-KEY-openEuler
参数说明(openEuler 专属):
- gpgkey:必须指向 ISO 内的RPM-GPG-KEY-openEuler,这是 openEuler 原生校验密钥,替换 CentOS 的密钥可避免 GPG 校验失败;
- enabled=1:启用该仓库,0为禁用;
- gpgcheck=1:开启包完整性校验,生产环境建议保留,测试环境可改为0(跳过校验)。
(3)验证 openEuler 本地 DNF 仓库有效性
这一步是核心,无报错即说明本地仓库搭建成功,断网后也可正常使用:
# 清理原有DNF缓存(避免残留网络源缓存)
dnf clean all
# 生成本地仓库缓存(关键步骤,openEuler ISO包较多,耗时约1-2分钟)
dnf makecache
# 查看已启用的仓库,输出BaseOS和AppStream即成功
dnf repolist enabled
# 测试安装软件(无网络也能安装,验证仓库可用)
dnf install tree -y
# 验证安装结果
tree –version
✅ 成功标志:dnf repolist enabled输出如下(包数量略有差异正常):
repo id repo name status
AppStream openEuler-24.03-Local-AppStream 10000+
BaseOS openEuler-24.03-Local-BaseOS 2000+
若出现 GPG 校验错误,检查gpgkey路径是否正确,或直接将gpgcheck改为0(测试环境)。
第二部分:服务端部署 NFS 共享服务(openEuler 通用)
openEuler-24.03 原生支持 NFSv4,安装nfs-utils即可,无需额外依赖,配置与 RHEL 系完全一致,核心是将本地 DNF 仓库的挂载目录/mnt/iso共享给局域网客户端。
步骤 1:安装并启动 NFS 服务
# 安装NFS核心包(openEuler原生仓库,本地已搭建可直接装)
dnf install nfs-utils -y
# 设置NFS服务开机自启,并立即启动
systemctl enable –now nfs-server
# 验证NFS服务状态,输出active(running)即正常
systemctl status nfs-server
✅ 注意:安装nfs-utils时,openEuler 会自动安装并启动 rpcbind(NFS 端口映射依赖),无需单独操作。
步骤 2:配置 NFS 共享目录(核心,openEuler 通用)
NFS 共享配置文件为/etc/exports,格式:共享目录 客户端地址(权限参数),需共享本地 DNF 仓库的/mnt/iso,推荐设为只读(ro)(DNF 仓库仅需读取,提升安全性)。
(1)编辑 exports 配置文件
vim /etc/exports
添加以下内容(推荐方式 2,局域网全访问,按需选择):
# 方式1:仅允许指定客户端访问(示例IP:192.168.1.101)
/mnt/iso 192.168.1.101(ro,sync,no_root_squash,no_all_squash)
# 方式2:允许整个局域网访问(示例网段:192.168.1.0/24),推荐
/mnt/iso 192.168.1.0/24(ro,sync,no_root_squash,no_all_squash)
核心权限参数(openEuler 完全支持):
- ro:只读权限(DNF 仓库无需写入,必选,比 rw 更安全);
- sync:同步写入,保证数据完整性(生产环境推荐);
- no_root_squash:客户端 root 用户访问时保留 root 权限(避免挂载后权限不足);
- no_all_squash:客户端普通用户保留原权限。
(2)生效 NFS 共享配置(无需重启服务)
# 重新导出共享目录,-r=重新加载,-v=显示详细信息
exportfs -rv
# 验证共享结果,看到配置的目录和客户端即成功
exportfs
✅ 成功输出示例(方式 2):
/mnt/iso192.168.1.0/24
步骤 3:验证 openEuler NFS 服务端共享状态
# 查看本地NFS共享详细信息,127.0.0.1为本机
showmount -e 127.0.0.1
✅ 成功输出示例:
Export list for 127.0.0.1:
/mnt/iso 192.168.1.0/24
若执行showmount -e报错,执行systemctl restart rpcbind nfs-server重启服务即可(openEuler 偶发 rpcbind 端口映射问题)。
第三部分:客户端配置 NFS 挂载 + openEuler NFS-DNF 共享仓库
客户端核心操作:安装 NFS 客户端工具→挂载服务端 NFS 共享目录→配置 openEuler 专属 NFS-DNF 仓库,全程适配 openEuler-24.03,局域网内多个客户端可重复此步骤,共用同一个 NFS-DNF 仓库。
步骤 1:客户端安装 NFS 客户端工具
openEuler 客户端仅需安装nfs-utils,无需启动 nfs-server 服务:
dnf install nfs-utils -y
✅ 若客户端无任何网络源且未装 nfs-utils:将服务端/mnt/iso/Packages/n/下的nfs-utils相关 rpm 包拷贝到客户端,用rpm -ivh *.rpm本地安装即可。
步骤 2:客户端创建 NFS 挂载目录
# 新建挂载点,与服务端对应,方便识别
mkdir -p /mnt/nfs_iso
步骤 3:客户端永久挂载服务端 NFS 共享目录
(1)临时挂载(测试用,重启失效)
# 格式:mount -t nfs 服务端IP:共享目录 本地挂载点
mount -t nfs 192.168.1.100:/mnt/iso /mnt/nfs_iso
# 核心验证:查看挂载目录,必须有BaseOS和AppStream
ls /mnt/nfs_iso
(2)永久挂载(生产环境推荐,/etc/fstab,openEuler 专属参数)
openEuler 挂载 NFS 需添加_netdev参数(表示依赖网络,避免开机先挂载后加载网络导致失败):
# 编辑fstab文件
vim /etc/fstab
# 在文件末尾添加以下内容(直接复制,替换服务端IP即可)
192.168.1.100:/mnt/iso /mnt/nfs_iso nfs defaults,_netdev 0 0
(3)验证永久挂载(无报错即成功)
# 生效fstab配置
mount -a
# 查看所有挂载点,确认NFS挂载成功(能看到服务端IP路径)
df -h
✅ 成功输出示例(关键行):
192.168.1.100:/mnt/iso 10G 8.5G 1.5G 86% /mnt/nfs_iso
步骤 4:客户端配置 openEuler NFS-DNF 共享仓库(核心适配 GPG)
与服务端本地仓库配置一致,仅将baseurl改为客户端 NFS 挂载路径,重点保留 openEuler 原生 GPG 密钥配置。
(1)禁用客户端默认网络源
cd /etc/yum.repos.d/
# 重命名默认repo文件,失效
mv openEuler.repo openEuler.repo.bak
# 若有其他repo文件,一并重命名:mv *.repo *.repo.bak
(2)新建 openEuler NFS-DNF 仓库配置文件
vim /etc/yum.repos.d/nfs_openEuler.repo
添加以下内容(直接复制,适配 openEuler-24.03,无需修改):
[BaseOS]
name=openEuler-24.03-NFS-BaseOS
baseurl=file:///mnt/nfs_iso/BaseOS
enabled=1
gpgcheck=1
gpgkey=file:///mnt/nfs_iso/RPM-GPG-KEY-openEuler
[AppStream]
name=openEuler-24.03-NFS-AppStream
baseurl=file:///mnt/nfs_iso/AppStream
enabled=1
gpgcheck=1
gpgkey=file:///mnt/nfs_iso/RPM-GPG-KEY-openEuler
步骤 5:验证客户端 NFS-DNF 仓库有效性(最终验证)
这一步完成后,客户端即可断网使用局域网 NFS-DNF 仓库,与服务端共用同一个 ISO 源,实现批量节点软件安装:
# 清理原有缓存
dnf clean all
# 生成NFS仓库缓存(局域网速度快,约30秒)
dnf makecache
# 查看已启用的仓库,输出BaseOS和AppStream即成功
dnf repolist enabled
# 测试安装软件(断网后安装,验证核心功能)
dnf install wget lrzsz -y
# 验证安装结果
wget –version
✅ 最终成功标志:客户端断开外网(拔网线 / 禁用网卡),仍能通过dnf install安装软件,说明openEuler NFS 共享 + DNF 仓库部署完成!
第四部分:openEuler 专属 常用命令 + 故障排查
一、openEuler DNF 仓库常用命令(原生)
# 清理缓存
dnf clean all
# 生成缓存
dnf makecache
# 查看所有仓库(启用+禁用)
dnf repolist all
# 查看已启用仓库
dnf repolist enabled
# 测试仓库安装(小工具)
dnf install -y tree lrzsz net-tools
# 查看软件包所在仓库
dnf repoquery -i tree
# 临时禁用某个仓库安装软件
dnf –disablerepo=AppStream install nginx
# 查看DNF仓库详细信息
dnf repoinfo BaseOS
二、openEuler NFS 服务常用命令(服务端)
# 启动/重启/停止NFS服务
systemctl start/restart/stop nfs-server
# 设置/取消开机自启
systemctl enable/disable nfs-server
# 查看NFS服务状态(含最新日志)
systemctl status nfs-server -l
# 重新加载NFS共享配置
exportfs -rv
# 查看NFS共享列表
exportfs
# 查看本地NFS共享详情
showmount -e 127.0.0.1
# 查看哪些客户端挂载了本服务端的NFS目录
showmount -a 192.168.1.100
# 临时取消NFS共享
exportfs -u /mnt/iso
三、openEuler NFS 挂载常用命令(客户端)
# 临时挂载NFS
mount -t nfs 192.168.1.100:/mnt/iso /mnt/nfs_iso
# 永久挂载生效
mount -a
# 查看所有挂载点(过滤NFS挂载)
df -h | grep nfs
# 查看NFS挂载详细信息
mount | grep nfs
# 正常卸载NFS(确保无程序访问该目录)
umount /mnt/nfs_iso
# 强制卸载(无法正常卸载时用,谨慎)
umount -f /mnt/nfs_iso
# 验证服务端NFS共享是否可用
showmount -e 192.168.1.100
# 开机自动挂载验证(重启后执行)
df -h | grep nfs_iso
四、openEuler 专属故障排查(高频问题 + 解决方法)
故障 1:dnf makecache 报错「GPG check FAILED」(最常见)
原因:repo 配置中 gpgkey 路径错误,或用了 CentOS 的密钥,未用 openEuler 原生RPM-GPG-KEY-openEuler。解决:
故障 2:showmount -e 服务端 IP 报错「clnt_create: RPC: Port mapper failure – No route to host」
原因:服务端防火墙未关闭,且未开放 NFS 相关端口。解决:
- 测试环境:systemctl stop firewalld && systemctl disable firewalld;
- 生产环境:重新执行防火墙开放命令(前文第二部分 2.2)。
故障 3:客户端挂载 NFS 后,ls /mnt/nfs_iso 报「Permission denied」
原因:服务端 exports 配置未加no_root_squash,客户端 root 权限被压缩为匿名用户。解决:
故障 4:系统重启后,NFS 挂载失败(df -h 看不到 nfs_iso)
原因:fstab 配置中未加_netdev参数,openEuler 开机先挂载后加载网络,导致挂载失败。解决:
故障 5:ISO 挂载后,ls /mnt/iso 无 BaseOS 和 AppStream 文件夹
原因:ISO 镜像文件损坏,或不是 openEuler-24.03-LTS-SP1 的 dvd 版(netinst 版无完整包)。解决:
第五部分:openEuler 生产环境优化建议
crontab -e
添加:*/10 * * * * mount -a
priority=1
第六部分:openEuler-24.03-LTS-SP1 DNF+NFS 核心命令速查表
全程以root 权限执行(sudo -i切换),分服务端/客户端分类,命令可直接复制执行,适配 openEuler 原生环境,无冗余步骤。
服务端(192.168.1.100)核心命令
一、基础环境配置(防火墙 / SELinux)
# 验证SELinux状态(默认Permissive,无需修改)
getenforce
# 测试环境-关闭防火墙(一键)
systemctl stop firewalld && systemctl disable firewalld
# 生产环境-开放NFS端口(一键)
firewall-cmd –add-port=111/tcp –add-port=111/udp –add-port=2049/tcp –add-port=2049/udp –permanent && firewall-cmd –add-service=nfs –add-service=rpc-bind –add-service=mountd –permanent && firewall-cmd –reload
# 配置主机名(可选)
hostnamectl set-hostname openEuler-NFS-DNF-Server
# 添加本地解析(可选)
echo "192.168.1.100 openEuler-NFS-DNF-Server" >> /etc/hosts && echo "192.168.1.101 openEuler-NFS-DNF-Client" >> /etc/hosts
二、ISO 镜像永久挂载(本地 DNF 仓库基础)
# 新建挂载点
mkdir -p /mnt/iso
# 永久挂载ISO(写入fstab,替换ISO实际路径)
echo "/opt/openEuler-24.03-LTS-SP1-x86_64-dvd.iso /mnt/iso iso9660 defaults 0 0" >> /etc/fstab
# 生效挂载(无报错即成功)
mount -a
# 验证挂载(有BaseOS/AppStream即成功)
ls /mnt/iso
三、本地 DNF 仓库配置(openEuler 专属)
# 进入repo目录,禁用默认网络源
cd /etc/yum.repos.d/ && mv openEuler.repo openEuler.repo.bak
# 新建本地repo文件(一键生成,适配GPG密钥)
cat > local_openEuler.repo << EOF
[BaseOS]
name=openEuler-24.03-Local-BaseOS
baseurl=file:///mnt/iso/BaseOS
enabled=1
gpgcheck=1
gpgkey=file:///mnt/iso/RPM-GPG-KEY-openEuler
[AppStream]
name=openEuler-24.03-Local-AppStream
baseurl=file:///mnt/iso/AppStream
enabled=1
gpgcheck=1
gpgkey=file:///mnt/iso/RPM-GPG-KEY-openEuler
EOF
# 验证本地仓库(清理缓存+生成+查看)
dnf clean all && dnf makecache && dnf repolist enabled
# 测试仓库可用(安装tree)
dnf install tree -y
四、NFS 服务端配置(共享 DNF 仓库)
# 安装NFS服务
dnf install nfs-utils -y
# 启动并开机自启NFS
systemctl enable –now nfs-server
# 验证NFS服务状态(active/running即成功)
systemctl status nfs-server –no-pager
# 配置NFS共享(局域网192.168.1.0/24只读访问,一键写入exports)
echo "/mnt/iso 192.168.1.0/24(ro,sync,no_root_squash,no_all_squash)" >> /etc/exports
# 生效NFS配置(无需重启服务)
exportfs -rv
# 验证NFS共享(有/mnt/iso即成功)
showmount -e 127.0.0.1
五、服务端常用管理 / 验证命令
# 重启NFS服务
systemctl restart nfs-server
# 重新加载NFS共享配置
exportfs -rv
# 查看NFS共享列表
exportfs
# 查看哪些客户端挂载了本服务端
showmount -a 192.168.1.100
# 重新生成本地DNF缓存
dnf clean all && dnf makecache
# 查看DNF启用仓库
dnf repolist enabled
客户端(192.168.1.101)核心命令
一、基础环境配置(可选)
# 配置主机名
hostnamectl set-hostname openEuler-NFS-DNF-Client
# 添加本地解析
echo "192.168.1.100 openEuler-NFS-DNF-Server" >> /etc/hosts && echo "192.168.1.101 openEuler-NFS-DNF-Client" >> /etc/hosts
# 测试网络连通性(ping服务端)
ping 192.168.1.100 -c 4
二、NFS 客户端配置 + 永久挂载服务端共享目录
# 安装NFS客户端工具
dnf install nfs-utils -y
# 新建NFS挂载点
mkdir -p /mnt/nfs_iso
# 临时挂载(测试用,重启失效)
mount -t nfs 192.168.1.100:/mnt/iso /mnt/nfs_iso
# 永久挂载(写入fstab,加_netdev避免开机挂载失败)
echo "192.168.1.100:/mnt/iso /mnt/nfs_iso nfs defaults,_netdev 0 0" >> /etc/fstab
# 生效挂载(无报错即成功)
mount -a
# 验证NFS挂载(有BaseOS/AppStream即成功)
ls /mnt/nfs_iso
# 查看所有挂载点(过滤NFS)
df -h | grep nfs
三、NFS-DNF 共享仓库配置(openEuler 专属)
# 进入repo目录,禁用默认网络源
cd /etc/yum.repos.d/ && mv openEuler.repo openEuler.repo.bak
# 新建NFS-DNF repo文件(一键生成,适配挂载路径)
cat > nfs_openEuler.repo << EOF
[BaseOS]
name=openEuler-24.03-NFS-BaseOS
baseurl=file:///mnt/nfs_iso/BaseOS
enabled=1
gpgcheck=1
gpgkey=file:///mnt/nfs_iso/RPM-GPG-KEY-openEuler
[AppStream]
name=openEuler-24.03-NFS-AppStream
baseurl=file:///mnt/nfs_iso/AppStream
enabled=1
gpgcheck=1
gpgkey=file:///mnt/nfs_iso/RPM-GPG-KEY-openEuler
EOF
# 最终验证(清理缓存+生成+查看,断网测试也可执行)
dnf clean all && dnf makecache && dnf repolist enabled
# 测试NFS仓库可用(安装wget)
dnf install wget -y
四、客户端常用管理 / 应急命令
# 重新生效NFS永久挂载
mount -a
# 正常卸载NFS挂载(无程序访问时)
umount /mnt/nfs_iso
# 强制卸载NFS挂载(无法正常卸载时用)
umount -f /mnt/nfs_iso
# 验证服务端NFS共享是否可用
showmount -e 192.168.1.100
# 重新生成NFS-DNF缓存
dnf clean all && dnf makecache
# 查看NFS挂载详细信息
mount | grep nfs
通用应急故障排查命令(服务端 / 客户端)
# 服务端-重启NFS+rpcbind(解决showmount报错)
systemctl restart rpcbind nfs-server
# 客户端-重新挂载NFS(解决挂载失效)
umount -f /mnt/nfs_iso && mount -a
# 通用-跳过GPG校验(测试环境,修改repo文件)
sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/*.repo && dnf clean all && dnf makecache
# 通用-查看DNF仓库详细信息
dnf repoinfo BaseOS
# 通用-检查端口连通性(测试NFS 2049端口)
telnet 192.168.1.100 2049




