明朗北街七万号·数研工坊|扎根雄安新区中关村科技园,专注受限环境下软件搭建与数据平台落地
一、问题#
服务器装好了操作系统,没有外网。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/cdromplaintextISO 挂载后,里面自带的 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
EOFplaintext此时已经可以用 yum install 安装 ISO 自带的包了。
第 4 步:安装 GCC 和 Nginx 依赖#
yum install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-develplaintext这些基础包 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 installplaintext第 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/nginxplaintext第 8 步:同一局域网的其他服务器修改 repo 地址#
其他服务器只需将 repo 配置改成 Nginx 的 HTTP 地址:
[nginx-base]
name=Nginx Yum Repo
baseurl=http://<你的服务器IP>/
enabled=1
gpgcheck=0plaintext然后就能愉快地 yum install 了。
四、补充:如果只需要几个特定的 RPM 包#
上面说的是搭一个完整的源给整个局域网用。但有些场景你不需要搭源——比如只需要在两台机器上装一个包,不想搞全套 Nginx 暴露。
这时候可以用 dnf 的 download 插件,在外网机器上把某个包和它的依赖一次性拉下来,打包传到内网装:
# 在外网机器上(有网的环境)
dnf install -y dnf-plugins-core
dnf download --resolve --alldeps nginx
# 这会下载 nginx 及其所有依赖的 RPM 包到当前目录plaintext然后把下载下来的一堆 .rpm 打包上传到内网服务器:
# 在内网服务器上
rpm -ivh *.rpm
# 或
yum localinstall *.rpmplaintext这比搭 Nginx 源轻量得多,适合快速解决小范围的包依赖问题。缺点是每台机器都得传一次,机器多了还是老老实实搭源。
五、总结#
整个过程用到的工具全部来自 ISO 自身,形成一个自洽的闭环:
| 步骤 | 工具 | 来源 |
|---|---|---|
| 挂载 ISO | mount | 系统自带 |
| 安装 GCC / Nginx 依赖 | yum | ISO 内的 RPM |
| 编译 Nginx | gcc + make | 上一步 yum 安装 |
| 暴露 HTTP 源 | Nginx | 上一步编译安装 |
| 局域网安装 | yum | 指向 Nginx HTTP 源 |
有同学可能会问:为什么不直接用 file:// 的 repo,还要多此一举搭 Nginx?
因为 file:// 只能本机用。同一局域网的其他服务器没法挂载你的本地路径。Nginx 一转成 HTTP 源,整个局域网都能共用,才叫真正的「内网镜像源」。
本文首发于掘金 | 作者:七万号 扎根雄安新区中关村科技园,专注受限环境下软件搭建与数据平台落地