云计算百科
云计算领域专业知识百科平台

内网服务器的“求生之路”:手把手搭建企业级离线 YUM/APT 仓库(告别 U 盘拷包)

内网服务器的“求生之路”:手把手搭建企业级离线 YUM/APT 仓库(告别 U 盘拷包)

上一篇文章我们解决了 Docker 镜像在离线环境的同步问题,今天我们来解决更基础、也更让人头疼的问题——操作系统本身的软件源。

痛点:当服务器失去了互联网

对于身处金融、政企或者涉密单位的 IT 运维和开发者来说,“内网”是一个让人又爱又恨的词。安全是安全了,但便捷性几乎为零。

你是否经历过这种绝望场景:

  • 新拿到一台内网服务器,习惯性输入 yum install vim 或 apt install nginx,然后看着终端光标无限闪烁直到超时。
  • 为了安装一个软件,先在能上网的电脑上下好 .rpm 或 .deb 包,用 U 盘拷进内网。结果一安装,提示缺少依赖 A;拷来依赖 A,又提示缺少依赖 B 和 C……陷入了无尽的“依赖地狱”。

在纯内网环境中,没有可用的软件源,服务器就像一座孤岛。

本文将带你打破这座孤岛,用最正规、最企业级的方式,在内网搭建一套私有的 YUM (CentOS/RHEL) 和 APT (Ubuntu/Debian) 仓库,让内网机器也能享受丝般顺滑的 install 体验。


一、 核心原理:搬运工与大管家

我们不能直接把互联网接入内网,但我们可以做互联网的“搬运工”。

搭建离线仓库的本质分为三步:

  • 同步 (Sync): 找一台能通外网的机器(称为“同步机”),把阿里源、清华源等上游镜像站里的所有软件包和**元数据(Metadata)**统统拉取到本地硬盘。
  • 迁移 (Transfer): 通过合规的方式(如移动硬盘、光闸等)将这些数据导入到内网环境。
  • 服务 (Serve): 在内网找一台服务器(称为“仓库服务器”),利用 Nginx/Apache 将这些数据以 HTTP 的形式发布出去,供内网其他机器使用。
  • PixPin_2025-11-30_03-23-28

    为什么不能只拷软件包?

    新手最大的误区就是只下载 .rpm 文件。YUM 和 APT 之所以强大,是因为它们依赖元数据(Repodata/Packages.gz)。这些文件记录了包的版本、依赖关系、文件列表等信息。没有元数据,包管理工具就是个瞎子,无法自动解决依赖问题。

    我们要做的,是同步整个仓库生态。


    二、 准备工作

    • 同步机(互联网侧): 能够访问公网,磁盘空间要大!同步一个完整的 CentOS 7 版本大约需要 50G+,一个完整的 Ubuntu 版本可能需要 200G+。
    • 仓库服务器(内网侧): 安装好 Nginx 或 Apache,用于提供 HTTP 文件服务。
    • 目标系统: 本文以最常见的 CentOS 7 和 Ubuntu 20.04 LTS 为例。

    三、 实战:搭建离线 YUM 仓库 (CentOS 7为例)

    CentOS/RHEL 系的同步相对简单,主要依靠 yum-utils 包中的 reposync 工具。

    3.1 在同步机上拉取数据

    1. 安装必要工具:

    # 安装 reposync 和 createrepo
    yum install -y yum-utils createrepo nginx

    2. 配置你需要同步的源:

    假设我们需要同步最基础的 base, updates, extras 以及常用的 epel 源。确保你的 /etc/yum.repos.d/ 下已经配置好了这些源的国内镜像(如阿里云)。

    3. 开始同步:

    我们需要创建一个目录来存放这些数据,例如 /data/centos_repo。

    mkdir -p /data/centos_repo
    # 使用 reposync 同步指定的 repo id 到指定目录
    # -g: 同步 GPG Key,-l: 包含 yum plugin 支持,-d: 删除本地旧包,-n: 只下载最新包
    reposync -g -l -d -n –repoid=base –newest-only –download_path=/data/centos_repo/
    reposync -g -l -d -n –repoid=updates –newest-only –download_path=/data/centos_repo/
    reposync -g -l -d -n –repoid=extras –newest-only –download_path=/data/centos_repo/
    reposync -g -l -d -n –repoid=epel –newest-only –download_path=/data/centos_repo/

    PixPin_2025-11-30_02-43-02

    4. 生成元数据 (关键步骤):

    下载完成后,目录里只有 rpm 包,还不能叫仓库。我们需要用 createrepo 生成元数据目录(即那个著名的 repodata 目录)。

    # 对每个下载好的目录执行 createrepo
    createrepo /data/centos_repo/base/
    createrepo /data/centos_repo/updates/
    createrepo /data/centos_repo/extras/
    createrepo /data/centos_repo/epel/

    执行完毕后,你会发现每个目录下多了一个 repodata 文件夹。

    3.2 数据迁移与内网服务

    将 /data/centos_repo 整个打包拷贝到内网仓库服务器的相同位置。

    在内网服务器上配置 Nginx:

    server {
    listen 80;
    server_name yum.intra.example.com; # 内网域名或IP
    root /data/centos_repo; # 指向数据根目录

    location / {
    autoindex on; # 开启目录浏览功能
    autoindex_exact_size off; # 显示人性化的文件大小
    autoindex_localtime on; # 显示服务器时间
    }
    }

    启动 Nginx 后,在浏览器访问,应该能看到目录结构列表。

    PixPin_2025-11-30_03-17-31

    3.3 内网客户端配置

    在内网其他 CentOS 机器上,备份原有的 repo 文件,新建一个 internal.repo:

    # /etc/yum.repos.d/internal.repo
    [internal-base]
    name=Internal Base
    baseurl=http://yum.intra.example.com/base/
    gpgcheck=0
    enabled=1

    [internal-updates]
    name=Internal Updates
    baseurl=http://yum.intra.example.com/updates/
    gpgcheck=0
    enabled=1

    # extras 和 epel 依此类推…

    最后,清理缓存并测试:

    yum clean all
    yum makecache
    yum install vim # 享受内网极速下载吧!


    四、 实战:搭建离线 APT 仓库 (Ubuntu 20.04为例)

    Debian/Ubuntu 系的仓库结构比 YUM 复杂得多,通常使用 apt-mirror 工具来进行同步。

    注意:APT 仓库通常非常巨大,请准备充足的磁盘空间!

    4.1 在同步机上配置 apt-mirror

    1. 安装工具:

    apt update
    apt install -y apt-mirror nginx

    2. 修改配置文件:

    编辑 /etc/apt/mirror.list。这里定义了我们要镜像哪些源、哪些版本以及架构。

    ############# config ##################
    # 定义基础目录
    set base_path /data/apt_mirror
    # 定义镜像存储位置
    set mirror_path $base_path/mirror
    # 定义临时下载目录
    set skel_path $base_path/skel
    set var_path $base_path/var
    set cleanscript $var_path/clean.sh
    # 架构,通常只需要 amd64
    set defaultarch amd64
    # 进程数
    set nthreads 20
    set _tilde 0
    ############# end config ##############

    # 替换为你想要同步的上游源(推荐使用国内源加速下载)
    # Ubuntu 20.04 代号 focal
    deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    # deb-src 开头的是源码包,如果不需要可以注释掉以节省大量空间
    # deb-src http://mirrors.aliyun.com/ubuntu/ focal main …

    clean http://mirrors.aliyun.com/ubuntu

    3. 开始同步 (漫长的等待):

    切换到 apt-mirror 用户执行同步(或直接用 root,注意权限):

    apt-mirror

    这个过程可能会持续几个小时甚至几天,取决于你的网速和同步的数据量。

    PixPin_2025-11-30_03-25-27

    4.2 数据迁移与内网服务

    同步完成后,数据通常位于 /data/apt_mirror/mirror/mirrors.aliyun.com/ubuntu/ 目录下。将这个 ubuntu 目录完整迁移到内网服务器的 /data/apt_repo/ 下。

    内网 Nginx 配置与 YUM 类似,指向 /data/apt_repo/。

    4.3 内网客户端配置

    在内网 Ubuntu 机器上,修改 /etc/apt/sources.list:

    # 注释掉原来的源,添加内网源
    # 假设内网仓库地址是 http://apt.intra.example.com/ubuntu/
    deb [trusted=yes] http://apt.intra.example.com/ubuntu/ focal main restricted universe multiverse
    deb [trusted=yes] http://apt.intra.example.com/ubuntu/ focal-security main restricted universe multiverse
    deb [trusted=yes] http://apt.intra.example.com/ubuntu/ focal-updates main restricted universe multiverse

    注意: 由于我们是离线镜像,通常没有同步官方的 GPG 签名密钥,或者内网机器无法验证签名。简单粗暴的方法是在源地址前加上 [trusted=yes] 告诉 APT 信任此源。

    最后测试:

    apt update
    apt install nginx


    五、 总结与进阶

    搭建离线软件源是企业级内网环境的基础设施建设。虽然初期搭建比较繁琐,数据搬运量大,但一旦建成,将极大提升整个团队的运维效率和开发体验。

    进阶思考:

    • 增量更新: 第一次全量同步后,如何定期进行增量同步?(Review reposync 的参数和 apt-mirror 的机制)。
    • 版本冻结: 对于追求极度稳定的生产环境,如何利用离线源实现软件版本的冻结,避免意外升级带来的 Bug?
    • CI/CD 集成: 如何将自研的软件打包成 RPM/DEB,发布到这个私有仓库中,供自动化部署使用?

    掌握了这些,你才算真正掌控了内网服务器的“生杀大权”。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 内网服务器的“求生之路”:手把手搭建企业级离线 YUM/APT 仓库(告别 U 盘拷包)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!