ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

纯离线环境依赖包制作终验手册:基于 Yum/Apt 本地离线镜像源的一键搭建

纯离线环境依赖包制作终验手册:基于 Yum/Apt 本地离线镜像源的一键搭建 在所有进入大型政企、军工或金融客户物理断网机房实施私有化交付的工程师心中最恐怖的梦魇绝不是容器镜像拉不下来而是系统在安装底层 Kubernetes、GPU 显卡驱动或安全组件时遭遇了令人崩溃的**“操作系统底层依赖地狱Dependency Hell”**。在有外网的环境下缺少依赖只需要敲一行yum install -y socat conntrack-tools libseccomp包管理器会自动从公共镜像源递归下载所有的关联依赖十秒钟搞定。然而在客户彻底物理断网的数据中心里当安装脚本报出“缺少libseccomp 2.4.1”时如果实施人员只在 U 盘里带了一个孤立的libseccomp.rpm噩梦便开始了执行rpm -ivh时系统提示它依赖glibc 2.28再去找glibc.rpm系统又提示依赖basesystem和另外 5 个基础库这 5 个基础库又相互循环依赖……几个小时过去工程师在终端前被层层嵌套的依赖包折磨得精疲力竭交付进度严重滞后。高确定性的离线交付绝不能靠人工去一个个肉眼排查 RPM 或 DEB 包。必须在出厂构建阶段利用自动化工具链递归抓取全量依赖树构建出一套自解压、自包含、插盘即用的“本地轻量化 Yum / Apt 离线镜像源”。一、为什么yumdownloader常常会漏掉关键依赖很多新手在离线打包时习惯使用yumdownloader --resolve package。然而在现场依然频繁翻车根源在于对包管理器解析机制的认知偏差构建机与现场宿主机的“环境基线差异”yumdownloader在解析依赖时是基于当前构建机当前已安装的软件包列表进行计算的如果构建机上原本就已经安装了glibc-common那么yumdownloader就会自作聪明地判定“该依赖已满足”从而跳过下载它然而现场客户提供的极简安装版操作系统Minimal OS可能精简得连最基础的底层运行库都没有。把这个残缺的包拿到现场立刻报错中断。底层元数据索引缺失Missing Repodata如果只拷贝了一堆.rpm文件到现场现场系统的yum根本无法识别各个包之间的版本拓扑关系依然需要一个个手动强制安装。必须使用真正的递归全量依赖抓取工具——repotrack针对 RHEL/CentOS/Kylin或全量离线归档针对 Ubuntu/Debian并配合createrepo重建完整的 XML 元数据索引。二、生产级出厂制作流程基于 Repotrack 的全量依赖打包实战在研发中心的联网构建机上执行以下出厂制作脚本递归抓取指定软件及其所有祖父级、父级依赖的完整闭环包#!/usr/bin/env bash set -euo pipefail INFO[PACK-BUILD $(date %H:%M:%S)] TARGET_DIR./dist/offline_repo/packages REPO_OUTPUT./dist/offline_repo # 明确列出 Kubernetes、容器运行时及运维工具所需的底层 OS 依赖清单 REQUIRED_PACKAGES( conntrack-tools socat ipvsadm ipset libseccomp pciutils ethtool chrony jq tar pigz fuse-overlayfs ) echo ${INFO} 1. 创建离线依赖包存放工作目录... mkdir -p ${TARGET_DIR} echo ${INFO} 2. 使用 repotrack 递归抓取全量依赖树 (无论本机是否已安装全部完整下载)... # repotrack 会忽略本机构建机的已有状态完全以零基础为基准递归下载整棵依赖树 repotrack -p ${TARGET_DIR} ${REQUIRED_PACKAGES[]} echo ${INFO} 3. 使用 createrepo 生成本地 Yum 仓库元数据索引 (repodata)... # 安装并执行 createrepo生成包含依赖拓扑关系的 sqlite/xml 索引 createrepo --database ${REPO_OUTPUT} echo ${INFO} 4. 打包为自包含压缩归档... tar -czvf yuejoy_os_deps_bundle.tar.gz -C ./dist offline_repo echo ${INFO} 离线依赖源介质制作圆满完成清单如下 ls -lh yuejoy_os_deps_bundle.tar.gz三、现场机房一键挂载本地离线源的配置规范到达客户彻底断网的物理机房后实施人员解压介质包只需两步即可将该目录伪装成本地最高优先级的 Yum 仓库源1. 现场一键初始化配置脚本setup_local_repo.sh#!/usr/bin/env bash set -euo pipefail INFO[LOCAL-REPO $(date %H:%M:%S)] BASE_DIR$(cd $(dirname ${BASH_SOURCE[0]}) pwd) REPO_PATH${BASE_DIR}/offline_repo echo ${INFO} 1. 备份客户现场原有的在线 Yum 配置文件 (防止联网超时报错)... mkdir -p /etc/yum.repos.d/backup_original mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup_original/ 2/dev/null || true echo ${INFO} 2. 写入本地文件系统独享源配置 (file:// 协议)... cat EOF /etc/yum.repos.d/yuejoy_local_offline.repo [yuejoy-local-offline] nameYueJoy Enterprise Local Offline Repository baseurlfile://${REPO_PATH} enabled1 gpgcheck0 priority1 EOF echo ${INFO} 3. 重建现场 Yum 缓存索引... yum clean all yum makecache echo ${INFO} 本地离线源挂载成功现场已恢复毫秒级 yum install 能力2. 验证与秒级自动化安装挂载完成后现场原本报错的复杂安装重新回归为一行最简单的命令# 所有的底层依赖、冲突与顺序完全由本地 Yum 引擎根据 repodata 自动秒级解析 yum install -y conntrack-tools socat ipvsadm libseccomp整个安装过程无需连接任何外部网络耗时不到 10 秒钟百分之百一次性成功。四、私有化交付中的三项避坑铁律跨大版本信创 OS 的依赖包绝对物理隔离千万不要以为 CentOS 7 的包能在统信 UOS 或麒麟 V10 上混用在出厂阶段必须针对客户现场明确的操作系统版本如Kylin-V10-SP3-aarch64在对应的同版本虚拟机上运行repotrack进行抓取并独立打上架构与 OS 标签如deps_kylin_v10_arm64.tar.gz。多节点集群的局域网微型 HTTP 源优化如果客户现场有 10 台以上物理节点不要在每台机器上都拷贝一份 2GB 的离线包。可以在 Master 节点启动一个仅占 5MB 内存的 Python/Nginx 微型 HTTP 服务python3 -m http.server 8888其余节点直接通过内网 IPhttp://10.20.30.40:8888挂载交付提效 10 倍。离开现场前自动恢复客户原始源交付封板后脚本必须提供一键还原功能将备份在backup_original的系统原始 repo 文件完整移回清理自建源保证客户宿主机操作系统配置的纯洁性。把所有的不确定性消灭在出厂前给现场留下最简单、最粗暴但绝不出错的傻瓜式工具。用工业级的严谨抹平物理断网机房的恶劣环境这就是顶级私有化交付团队的核心战斗力。
返回列表