七万号·数据平台实战手记

Back

明朗北街七万号·数研工坊|扎根雄安新区中关村科技园,专注受限环境下软件搭建与数据平台落地


一、问题#

服务器装好了操作系统,没有外网。yum install 全部报错。怎么装软件?

有人说去配互联网镜像源——但内网连不通外网,配了也没用。


二、约束#

  • 服务器无法访问外网
  • 需要安装 GCC、Nginx 等基础软件
  • 同一局域网内有多个服务器需要同样配置
  • 不能使用互联网镜像源

三、方案:ISO 挂载 + Nginx 暴露为 HTTP 源#

我的做法是用操作系统 ISO 镜像作为基础源,结合 Nginx 暴露为 HTTP 协议的内网 Yum 源。步骤如下:

第 1 步:上传 OS ISO 到服务器#

将操作系统 ISO 镜像文件上传到服务器,例如上传到 /root/ 目录。

第 2 步:挂载 ISO 到目录#

mkdir -p /mnt/cdrom
mount -o loop /root/CentOS-7-x86_64-DVD-2009.iso /mnt/cdrom
plaintext

ISO 挂载后,里面自带的 Packages 目录就是完整的 RPM 包仓库。

第 3 步:修改 repo 指向本地 ISO 路径#

cd /etc/yum.repos.d/
mkdir backup
mv *.repo backup/

cat > local.repo << 'EOF'
[local-base]
name=Local ISO Base
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
EOF
plaintext

此时已经可以用 yum install 安装 ISO 自带的包了。

第 4 步:安装 GCC 和 Nginx 依赖#

yum install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-devel
plaintext

这些基础包 ISO 里基本都有。

第 5 步:编译安装 Nginx#

tar -xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0

./configure --prefix=/usr/local/nginx \
  --with-http_stub_status_module \
  --with-http_ssl_module

make && make install
plaintext

第 6 步:拷贝 RPM 包到独立目录#

将 ISO 挂载目录下的所有 RPM 包拷贝到一个独立的目录,用于 Nginx 对外暴露:

mkdir -p /data/yum-repo
cp -r /mnt/cdrom/Packages /data/yum-repo/
plaintext

第 7 步:配置 Nginx 暴露为 HTTP 源#

编辑 Nginx 配置:

server {
    listen       80;
    server_name  _;

    location / {
        root   /data/yum-repo;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}
plaintext

启动 Nginx:

/usr/local/nginx/sbin/nginx
plaintext

第 8 步:同一局域网的其他服务器修改 repo 地址#

其他服务器只需将 repo 配置改成 Nginx 的 HTTP 地址:

[nginx-base]
name=Nginx Yum Repo
baseurl=http://<你的服务器IP>/
enabled=1
gpgcheck=0
plaintext

然后就能愉快地 yum install 了。


四、补充:如果只需要几个特定的 RPM 包#

上面说的是搭一个完整的源给整个局域网用。但有些场景你不需要搭源——比如只需要在两台机器上装一个包,不想搞全套 Nginx 暴露。

这时候可以用 dnfdownload 插件,在外网机器上把某个包和它的依赖一次性拉下来,打包传到内网装:

# 在外网机器上(有网的环境)
dnf install -y dnf-plugins-core
dnf download --resolve --alldeps nginx
# 这会下载 nginx 及其所有依赖的 RPM 包到当前目录
plaintext

然后把下载下来的一堆 .rpm 打包上传到内网服务器:

# 在内网服务器上
rpm -ivh *.rpm
# 或
yum localinstall *.rpm
plaintext

这比搭 Nginx 源轻量得多,适合快速解决小范围的包依赖问题。缺点是每台机器都得传一次,机器多了还是老老实实搭源。

五、总结#

整个过程用到的工具全部来自 ISO 自身,形成一个自洽的闭环:

步骤工具来源
挂载 ISOmount系统自带
安装 GCC / Nginx 依赖yumISO 内的 RPM
编译 Nginxgcc + make上一步 yum 安装
暴露 HTTP 源Nginx上一步编译安装
局域网安装yum指向 Nginx HTTP 源

有同学可能会问:为什么不直接用 file:// 的 repo,还要多此一举搭 Nginx?

因为 file:// 只能本机用。同一局域网的其他服务器没法挂载你的本地路径。Nginx 一转成 HTTP 源,整个局域网都能共用,才叫真正的「内网镜像源」。


本文首发于掘金 | 作者:七万号 扎根雄安新区中关村科技园,专注受限环境下软件搭建与数据平台落地

没有外网,代码怎么装?自建内网 Yum 镜像源实战
https://realcpf.tech/blog/airgapped-yum-mirror
Author 刘佳成
Published at 2026年7月31日