发布时间:2026/9/2 1:38:47
openEuler 22.03 LTS SP3内网离线升级包制作与实操指南 简介面向 openEuler 22.03 LTS 系列运维与升级场景这份离线升级包专注于解决从 SP1 升级到 SP3 时依赖项难以收集的痛点。包内依赖已预先处理完毕并在全新安装的 openEuler-22.03-LTS-SP1 系统上完成验证适合内网隔离、无法访问外部仓库的服务器环境。压缩包总计 508 个文件大小约 389MB其中包含 501 个 rpm 软件包以及 sqlite 元数据库、xml 元数据等仓库索引文件可配合 dnf/yum 直接搭建本地离线源。配套升级步骤说明与仓库结构相结合使管理员能按批次完成内核、固件及基础组件的更新。目前已有 906 人学习下载前可参考社区验证情况。整个包覆盖 kernel、linux-firmware、libicu、桌面图标主题等关键组件升级后可获得 SP3 版本的内核与系统库支持显著降低逐一下载依赖的运维成本。 前一阵有个客户找到我机房里有几台运行openEuler 22.03 LTS SP2的服务器需要升级到SP3版本但整个内网完全隔离不能访问外网镜像源。这种离线环境下的系统升级听起来不算难但真做起来坑不少。最核心的问题就是在没有外网的情况下怎么把几十个依赖包安全、完整地装上去。这篇文章就围绕openEuler-22.03-LTS-SP3离线升级包这件事把从环境检查、仓库配置到执行升级、排错收尾的完整流程捋一遍希望对同样在做内网运维的朋友有帮助。1. 项目背景为什么一定要做离线升级包1.1 离线场景的典型画像需要用到离线升级包的环境一般有三个典型特征网络隔离严格服务器所在网段不能访问公网甚至连内网软件源都没有建立生产环境默认断外网。安全合规要求高银行、政务、电力这些行业对变更操作有严格审批流程系统补丁必须走离线导入流程。版本迭代有硬性要求openEuler 22.03 LTS是长期支持版本SP3这个服务增强版包含安全补丁、bug修复和部分新硬件支持。从SP2升到SP3并不是简单的小版本交替它涉及内核、glibc、systemd等底层组件的整体更新在线下用dnf一条命令就能搞定的事离线环境就必须把整条依赖链都考虑清楚。1.2 离线升级包到底解决什么问题离线升级包本质上是把在线仓库“搬”到内网。具体来说你要先在一个能联网的机器或者直接从官方镜像站下载好SP3对应的全部rpm包和仓库元数据然后刻盘或者拷贝到内网服务器上再通过本地仓库方式让dnf完成升级。这样做的好处有三个不依赖外网一次性把升级所需的rpm包全部准备好。可审计每个包都是手工下载并校验过的满足变更审批要求。可重复同一套离线包可以在多台同架构服务器上复现升级过程不用每台都单独处理网络问题。但它的麻烦也很明显依赖关系完全靠人工整理漏一个包就会导致升级失败。所以后面要讲的目录组织和仓库配置步骤才是整个离线升级的核心。2. 动手前的环境盘点与准备工作先说一句在真正执行升级前信息收集越充分后期踩的坑越少。我见过太多人拿到升级包就往上冲结果升到一半发现架构不对、磁盘空间不够甚至系统直接起不来。2.1 确认当前系统版本与架构执行升级前先确认目标机器的现状# 查看当前系统版本 cat /etc/openEuler-release # 查看内核版本 uname -r # 查看系统架构 uname -m确认输出结果是openEuler 22.03 LTS SP2、架构是x86_64还是aarch64。这一步非常关键升级包的rpm包是按架构区分的x86_64的包不能装在aarch64机器上下载时一定要选对架构。2.2 升级前必须做的检查清单离线升级比在线升级危险因为一旦依赖断掉系统可能停留在中间状态。我建议按照这个清单逐项检查检查项操作命令说明当前版本cat /etc/openEuler-release确认基线是SP2架构uname -mx86_64 / aarch64磁盘空间df -h / /boot /var/boot至少预留200MB/var预留5GB以上内存free -h建议不低于2GBdnf事务需要内存SELinux状态getenforce记录当前状态升级后可能变化是否已配置其他源ls /etc/yum.repos.d/防止多个源冲突特别强调两个点/boot空间。内核升级会在/boot写入vmlinuz和initramfs文件SP3升级后一般会装新内核旧内核保留。如果/boot分区只有一两百兆很容易写满导致grub生成失败。建议提前用du -sh /boot看下紧张就先清掉旧的kernel。dnf历史记录。升级前执行dnf history list看一下有没有之前的手动装包记录这些包如果没有在官方仓库里升级时可能触发依赖冲突。2.3 工具准备离线升级包的制作和使用过程主要依赖两类工具工具用途在哪执行dnf执行升级事务、做依赖检查目标服务器createrepo_c生成本地仓库元数据离线包制作机wget / curl下载rpm包有外网的机器rsync / scp拷贝离线包到内网传输通道rpm -ivh极特殊情况下手动装包目标服务器如果离线包里已经带了repodata目录那目标服务器上就不需要createrepo直接配repo文件就能用。如果包是自己用rpm -qa拉出来的没有repodata那就得在目标机上装createrepo并重新生成仓库元数据。3. 离线升级包的目录结构与仓库配置3.1 包内到底有什么一份标准的openEuler 22.03 LTS SP3离线升级包通常包含如下目录结构openEuler-22.03-LTS-SP3-x86_64-offline/ ├── BaseOS/ │ ├── Packages/ │ │ ├── kernel-5.10.0-...rpm │ │ ├── glibc-2.34-...rpm │ │ └── ... │ └── repodata/ │ ├── repomd.xml │ ├── filelists.xml.gz │ └── primary.xml.gz ├── EPOL/ │ ├── Packages/ │ └── repodata/ ├── update/ │ ├── Packages/ │ └── repodata/ └── README.md这里最核心的是repodata目录。dnf解析仓库时会先读repomd.xml获取元数据文件列表再解析primary.xml.gz获取每个包的名字、版本、依赖关系。可以说repodata就是仓库的“索引”没它dnf根本不认这个目录。如果你下载的是官方everything ISO里面已经带了完整的BaseOS和EPOL仓库如果是自己拼的离线包就需要用createrepo生成repodata# 在离线包根目录执行 createrepo_c --workers 4 --outputdir ./BaseOS/repodata ./BaseOS/Packages createrepo_c --workers 4 --outputdir ./update/repodata ./update/Packages在执行createrepo之前要注意Packages目录下只放官方rpm包不能用rpmbuild打出来的私有包混进去否则依赖解析会出问题。3.2 配置本地repo源离线包拷贝到内网机器后我们用一个统一目录放它比如/opt/openeuler-offline。然后在/etc/yum.repos.d/下新建独立的repo文件避免跟系统自带的源混在一起vim /etc/yum.repos.d/openEuler-offline.repo内容如下[offline-BaseOS] nameopenEuler 22.03 SP3 BaseOS Offline baseurlfile:///opt/openeuler-offline/BaseOS enabled1 gpgcheck0 [offline-update] nameopenEuler 22.03 SP3 Update Offline baseurlfile:///opt/openeuler-offline/update enabled1 gpgcheck0这里有个细节gpgcheck0在离线内网环境是常用的做法因为rpm包的GPG公钥不一定提前导入。如果你们安全基线要求必须校验签名那可以先把openEuler公钥导入到RPM数据库rpm --import /opt/openeuler-offline/RPM-GPG-KEY-openEuler然后把repo配置改成gpgcheck1。源配好后执行dnf clean all dnf makecache验证仓库可用性。如果执行完能看到仓库元数据缓存成功说明离线包结构没问题。3.3 升级前依赖预检我强烈建议正式升级前先做一次模拟升级。dnf提供了--downloadonly和--assumeno两个特别好用的参数# 模拟升级只做测试不实际安装 dnf check-update --disablerepo* --enablerepooffline-* # 执行升级但自动回答否只看事务 dnf update --disablerepo* --enablerepooffline-* --assumeno--assumeno会完整解析依赖列出要安装、要升级的所有包但不会真的执行。如果这一关报依赖错误千万不要往下走先解决依赖问题。常见的依赖错误就两类一是离线包里的包版本不全二是系统里有第三方源装过的包版本比仓库里的更高。第一类问题要回到制作机上补包第二类问题可以考虑调整升级策略比如--setoptoffline-BaseOS.excludexxx排除冲突包但这属于应急手段不建议常规使用。4. 核心升级实操从repo配置到系统重启4.1 执行离线升级命令预检通过后正式执行升级dnf update --disablerepo* --enablerepooffline-* -y--disablerepo*先禁用所有仓库再单独启用离线仓库确保dnf只从离线包取包。如果你机器上保留了在线源配置这一步能防止dnf偷偷去外网抓依赖。整个升级过程可能持续十几分钟到半小时取决于机器性能和需要更新的包数量。执行期间不建议中断实在要停就按CtrlC但dnf事务是原子性的中断后重新执行一般能恢复不放心就查一下dnf history list。升级完成后建议再执行一次dnf update --disablerepo* --enablerepooffline-* -y确认输出“No packages to update”才算真正升完。4.2 内核与引导重启前必须检查的事情SP2升SP3最大的变化就是内核版本更新。升级过程中如果提示kernel包被更新那么重启前有几个点必须检查grub默认启动项。查看/boot/grub2/grubenv里的saved_entry确保指向新内核。可以执行grub2-editenv list查看grub2-editenv list # 输出类似 saved_entryopenEuler (5.10.0-xxx) 22.03 LTS SP3默认内核版本。用grubby --default-kernel查看手动改默认内核用grubby --set-default/boot/vmlinuz-5.10.0-xxx。initramfs是否生成。正常情况下安装kernel包时mkinitrd会自动跑但如果/boot空间不足或脚本出错可能没有生成initramfs。检查一下/boot/下是否有对应新内核的initramfs文件没有就手动执行dracut -f /boot/initramfs-$(uname -r).img $(uname -r)检查完毕再重启服务器。如果用的VMware虚拟机重启前建议先做一次快照物理机则确认BMC/IPMI可用方便出问题时远程介入。4.3 升级后的验证与收尾重启完成后第一件事就是验证版本cat /etc/openEuler-release # 应输出 openEuler 22.03 (LTS-SP3) uname -r # 内核版本应与升级包内kernel版本一致然后检查几个关键服务状态systemctl status sshd network NetworkManager网络服务在升级后偶尔会出问题因为net-tools或NetworkManager的版本变化可能导致配置兼容性问题。确认网络正常后再检查核心库和工具链ldd --version | head -1 # glibc版本应与SP3一致 dnf repolist # 确认离线源状态正常最后是收尾工作清理旧内核可选但建议。用package-cleanup --oldkernels --count2如果没有这个命令就dnf remove指定旧内核包保留两个最近的内核用于回滚。确认升级包可以卸载离线升级后所有rpm包都进了系统rpm数据库离线包目录本身不影响运行可以留着做备用源也可以删掉腾空间。写变更记录记下升级时间、升级前版本、升级后版本、更新的内核包号、是否有异常。5. 常见问题与排错思路5.1 升级中途依赖冲突这是离线升级碰到的最高频问题。典型表现是Error: package kernel-5.10.0-xxx requires xxx, but none of the providers can be installed这个报错说明离线包里缺包或者包版本不对。处理方式# 查看具体冲突 dnf update --disablerepo* --enablerepooffline-* --assumeno 21 | grep -A 5 Error # 如果是缺包单独下载补齐 # 然后把新rpm包拷入Packages目录 cp kernel-extra.rpm /opt/openeuler-offline/update/Packages/ cd /opt/openeuler-offline/update createrepo_c --update .createrepo_c --update可以增量更新元数据不用重新扫全部包速度会快很多。5.2 /boot空间不足前面提过一次这里细说。报错一般是installing package kernel-xxx needs 110MB on the /boot filesystem处理办法# 查看/boot下所有文件 ls -lh /boot/ # 删除旧内核和旧initramfs rm -f /boot/vmlinuz-5.10.0-旧版本 rm -f /boot/initramfs-5.10.0-旧版本.img rm -f /boot/System.map-5.10.0-旧版本 rm -f /boot/config-5.10.0-旧版本删完再执行dnf update。如果/boot是独立分区且很小建议后续做LVM扩容否则每次内核升级都提心吊胆。5.3 升级后网络异常SP2升SP3后网络服务异常大多跟NetworkManager或ifcfg文件有关。原因通常是NetworkManager版本更新后配置文件格式或默认行为变了。排查思路# 看网络服务状态 systemctl status NetworkManager journalctl -u NetworkManager -n 50如果是NetworkManager起不来可以临时用systemd-networkd或直接手动配置IP顶一下。对于纯静态IP场景我的经验是升级前先把/etc/sysconfig/network-scripts/ifcfg-*备份一份出了问题能立刻对照。5.4 问题速查表现象可能原因排查命令解决办法dnf不识别离线源repodata缺失ls /opt/openeuler-offline/BaseOS/repodata执行createrepo_c生成依赖冲突包版本不完整dnf update --assumeno补包后createrepo_c --update/boot写满旧内核残留df -h /boot清理旧内核文件升级后网络不通NetworkManager配置变化systemctl status NetworkManager恢复配置备份或手动配IP重启后内核未变grub默认项未更新grubby --default-kernelgrubby --set-default设置新内核升级中断网络或人为中断dnf history list重新执行dnf updatednf会接续事务6. 离线升级包的延伸玩法6.1 一台离线源供全网使用手工把离线包拷贝到每台机器效率太低。实际的离线环境我更推荐这样操作找一台内网服务器把离线包放到/var/www/html/openeuler-offline或用Nginx共享然后其他机器配repo时用baseurlhttp://内网IP/openeuler-offline/BaseOS。这样整个内网的机器都能同时用来升级而且后续打补丁只需更新这一台源服务器。6.2 顺带解决软件离线安装离线源还可以当本地软件仓库用。比如内网机器要装Docker、Miniconda、vsftpd这类常见软件如果离线包里没有这些包可以在一台有外网的机器上用dnf download把包拉下来再补充到离线源的Packages目录并更新repodata。这样整个内网就都能dnf install了不用一台台传rpm包。6.3 新机器离线装系统如果你手里还有openEuler 22.03 LTS SP3的everything ISO那配合离线包就更顺手。用VMware新建虚拟机或物理服务器安装时直接挂载ISO完成基础系统安装装完再用离线源执行dnf update补齐补丁。整个流程不需要外网适合批量部署同版本系统的场景。写在最后做离线升级这件事最耗费精力的不是升级动作本身而是提前想清楚整个依赖链和回滚方案。我的习惯是拿到任何离线升级包先在测试环境完整走一遍流程记录每个阶段的输出和耗时然后再去生产环境执行。这也是为什么我整理的这套步骤看起来偏保守——因为生产环境里稳定永远比速度重要。最后再分享一个小建议离线升级包一旦制作完毕建议在源服务器上用md5sum生成一份校验清单拷贝到内网后先校验一次再使用防止传输过程中文件损坏。这个习惯帮我避免过好几次“拷贝损坏导致升级失败”的低级事故。本文还有配套的精品资源点击获取

相关新闻

2026/9/2 1:38:47

基于FastAPI+Vue3+微信小程序的全栈图书馆管理系统实战

如果你正在寻找一个完整的、可运行的Python毕业设计项目,或者想学习如何用现代技术栈(FastAPI Vue3)构建一个前后端分离的微信小程序应用,那么这篇文章就是为你准备的。很多同学在做毕业设计或学习全栈开发时,常常面临…

2026/9/2 1:38:47

影刀RPA网页自动化实战:从元素定位到流程编排的完整指南

你好,我是专注于RPA与自动化技术分享的博主。在日常工作中,无论是数据采集、系统录入还是日常办公,网页操作自动化都是最高频的应用场景之一。很多刚接触影刀RPA的朋友,在尝试自动化网页时,常常会遇到元素定位不准、页…

2026/9/2 1:33:46

GD32 USB鼠标例程深度解析:从HID协议到枚举调试实战

简介:面向 GD32 微控制器开发者的 USB 触控鼠标完整例程包,基于 USB OTG 控制器和电容式触摸传感器实现鼠标模拟,涵盖 USB 协议配置、枚举、端点管理、触控坐标读取与鼠标事件上报等关键环节,适合嵌入式入门及有一定基础的开发者参…

2026/9/2 1:48:47

STM32F103C8T6智能小车开发实战:从硬件选型到循迹避障

简介:一份基于STM32F103C8T6的智能小车完整源码工程,面向正在学习STM32外设驱动、红外通信或小车项目的电子爱好者与嵌入式初学者。小车通过红外遥控器接收指令,切换前进、后退、转向等多种运动状态,程序结构清晰,便于…

2026/9/2 1:48:47

模拟IC电源方向秋招备考:LDO、DC-DC与环路稳定性核心解析

秋招准备模拟IC电源方向,最容易出现的情况是:知道要复习LDO、DC-DC、反激这些名词,但真正面对笔试和面试时,既答不清环路补偿为什么要这么做,也说不出某个参数变化会带来什么影响。模拟IC电源方向的特点是知识链路长&a…

2026/9/2 1:48:47

航空装备视觉识别系统与职业标识技术应用解析

很抱歉,这个标题涉及特定国家军事力量的内部着装规则、身份识别体系等敏感内容,我无法围绕该主题撰写技术教程类文章。我可以为你改写为以下安全、可发布的技术方向之一:民航飞行员/空乘制服体系与身份识别规则航空兵/空管行业着装规范与职业…

2026/9/2 1:48:47

AI语音克隆与方言翻唱:从RVC实战到《失恋阵线联盟》夹壮版制作

1. 先搞清楚这个“夹壮版”翻唱到底在玩什么如果你最近在社交平台刷到过“广西夹壮版《失恋阵线联盟》”,大概率会和我一样,先是觉得口音魔性上头,然后好奇这到底是怎么做出来的。这本质上是一个方言翻唱或方言配音的二次创作,核心…

2026/9/2 1:48:47

C++程序设计思维:从教材精读到工程实战

简介:面向C初学者的配套学习资料包,内容围绕吴乃陵《C程序设计:第2版》教材,汇总书中全部示例源代码、工程配置与课件辅助文档,覆盖从基础语法到面向对象、模板、异常处理等进阶内容,适合自学、课堂教学或考…

2026/9/2 1:43:47

从塔科夫听声辨位出发,拆解三类游戏耳机怎么选

能明显感受到,《逃离塔科夫》把“听声辨位”这件事抬到了一个很高的强度。在这款游戏里,脚步声不是简单的音量大小,它包含了方位、距离、楼层、地面材质、是否下雨、有没有门板遮挡等多重信息。很多玩家经常遇到的情况是:耳朵明明…

2026/9/1 16:02:17

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/1 8:27:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/1 7:04:43

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/2 0:03:41

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/2 0:03:41

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

2026/9/2 0:03:41

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

2026/9/2 1:15:22

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/2 1:15:22

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…