ARTICLE · 1143649
连不上网,软件照样装:离线安装三板斧
场景说明
现场很多生产环境服务器由于安全等原因都不能联网,一根网线都不通外网。厂家说:"装一下我们的采集程序,依赖 libaio 和 perl。"你从哪儿弄这两个包?答案是:同版本的系统 ISO 镜像里全都有。把它挂成本地 yum 源,离线环境和联网一样装软件。这一篇说一下内网运维的吃饭手艺。
先说结论:
◆💿 系统 ISO 镜像 = 离线软件仓库,mount 挂一下就是本地 yum 源
◆📥 有网机器 yum download 把包和依赖下载齐全,打包拷贝进内网
◆🔧 源码安装三步走:configure → make → make install;报错缺 devel 包用 yum provides 反查
目 录
- Part 1 方案一:下载 rpm 及依赖打包
- Part 2 方案二:ISO 搭建本地 yum 源
- Part 3 源码编译安装
- Part 4 动态库依赖:ldd 与排错
- Part 5 apt 有没有同样的反查功能?
01方案一:外网下载依赖打包
思路:找一台同版本能上网的机器(比如你的 Rocky 9 虚拟机),把包和全部依赖下载下来,拷贝进内网安装。
# 下载工具(只下载不安装,自动带依赖) yum install -y yum-utils yumdownloader --resolve --destdir=/tmp/nginx_offline nginx ls /tmp/nginx_offline/ # nginx-xxx.rpm nginx-core-xxx.rpm ...(依赖全齐) # 打包拷进内网 tar -zcf nginx_offline.tar.gz -C /tmp nginx_offline


内网机器上解包后安装:
yum localinstall -y *.rpm # 用本地 rpm 当"临时仓库",依赖自动解析 # 或 dnf install ./*.rpm(同效)⚠️ 关键前提:内外网系统版本必须一致(都是 Rocky 9 x86_64)。版本不同,下载的依赖装不上,白忙。
02方案二:ISO 本地 yum 源(一劳永逸)
内网机器多,台台拷包太麻烦。把系统 ISO 挂成共享仓库,一次搭建全内网受益。
# 1. 挂载 ISO(虚拟机直接挂光驱,或上传 ISO 文件后挂载) mount -o loop /tmp/Rocky-9.4-x86_64-dvd.iso /mnt/cdrom # 2. 写本地仓库配置 cat > /etc/yum.repos.d/local-iso.repo <<EOF [local-baseos] name=Local ISO BaseOS baseurl=file:///mnt/cdrom/BaseOS enabled=1 gpgcheck=0 [local-appstream] name=Local ISO AppStream baseurl=file:///mnt/cdrom/AppStream enabled=1 gpgcheck=0 EOF # 3. 清缓存验证 yum clean all yum repolist # 看到 local-baseos / local-appstream 即成功 yum install -y tcpdump # 离线也能装了!要给别人用,就在这台机器装个 http 服务把 /mnt/cdrom 共享出去,其他机器 baseurl 写 http://IP/,变成真正的"内网软件源服务器"。createrepo 用于自建第三方 rpm 的仓库:createrepo /repo/dir 生成元数据,其他机器指向它即可。
03源码编译安装
有些软件仓库里没有(或版本太旧),就得编译源码。经典三步:
tar -zxf nginx-1.26.0.tar.gz && cd nginx-1.26.0 ./configure --prefix=/usr/local/nginx # ① 检测环境、生成 Makefile make -j2 # ② 编译(-j 用几个核) make install # ③ 安装到 prefix 指定目录编译报错 90% 是缺 devel 包。报错信息长这样:
./configure: error: the HTTP rewrite module requires the PCRE library.反查安装(yum provides 套路再现):
yum provides */pcre.h # → pcre-devel yum install -y pcre-devel zlib-devel openssl-devel gcc make反查命令归哪个包的完整用法,看上一篇《yum provides,运维圈最好用的反查命令》,这里不重复展开。
gcc、make 这俩编译工具链也是 devel 包家族的常客,先装好再 ./configure。configure 通过后会有总结输出,看到 "Configuration summary" 才算过关。
💡 编译版 vs yum 版取舍:yum 版省心、有 systemd 服务、升级方便;编译版版本新、参数可控。能用 yum 就别编译,除非版本/模块有硬性要求。
04动态库依赖:ldd 排错
程序跑起来报这个错,内网运维迟早遇见:
error while loading shared libraries: libxxx.so.1: cannot open shared object file意思是程序运行时找不到需要的动态库(相当于 Windows 缺 DLL)。排查三板斧:
# 1. 看这个程序依赖哪些库、缺了哪个 ldd /usr/local/app/bin/myapp # libxxx.so.1 => not found ← 就是它 # 2. 反查哪个包提供这个库 yum provides */libxxx.so.1 # 3. 装好后刷新动态库缓存 ldconfig库文件装在非标准目录时,把目录写进 /etc/ld.so.conf.d/ 下的 .conf 文件再 ldconfig,别乱改 LD_LIBRARY_PATH 环境变量(全局影响大)。
05:apt 有没有同样的反查功能?
有,而且分三种情况:
yum provides */tcpdump | apt-file search bin/tcpdump | |
rpm -qf /usr/sbin/tcpdump | dpkg -S /usr/sbin/tcpdump | |
yum search tcpdump | apt search tcpdump |
⚠️ apt-file 不是自带的,先 apt install apt-file && apt-file update 把索引建好才能查。如果 update 拉不到数据,多半是镜像源没同步 Contents 索引,换官方源再试——这个坑很多人踩了以为是命令写错。
顺带说一句:Ubuntu 自带一个"作弊器",直接敲一个不存在的命令,它会提示 Command 'tcpdump' not found, but can be installed with: sudo apt install tcpdump——这其实就是 yum provides 的自动版,只不过它只在"命令名恰好等于包名"时好使。
总结
四步判断(按这个顺序来,别一上来就编译)
1. 先测能不能联网:curl -I https://mirrors.rockylinux.org 通,就直接 yum install,别折腾离线。
2. 只有一台机器要装:找台同版本能上网的机器 yumdownloader --resolve 打包,拷进去 yum localinstall *.rpm。
3. 一批机器都要装:ISO mount 挂成本地源,或起个 http 共享 /mnt/cdrom,一次搭建全内网受益。
4. 仓库里没有、或版本太旧:才走源码编译——configure → make → make install,装到--prefix 指定目录,别往系统目录里乱塞。
两个坑
⚠️ 内外网系统版本必须一致(同发行版、同大版本、同架构)。版本不对,下载好的依赖照样装不上,白忙一场。
⚠️ configure 报错 90% 是缺 devel 包,别拿报错原文去瞎搜,直接 yum provides */xxx.h 反查包名;装完库别忘 ldconfig。
那台一根网线都不通外网的服务器,最后是把 ISO 挂成本地源解决的。同一件事,做一次和做十次,差的只是有没有提前搭好源。
收藏本文,下次要用时翻出来对照——觉得有用?点赞 + 收藏 + 转发 ❤️
**怦然心动 · 往期推荐** ♥
▶- 压缩命令用错一次,硬盘多占10G tar gzip zip 一文说透
▶- 告别 VMware 卡顿终端:WinSCP 传文件 + PuTTY 敲命令,远程连接实战
▶- 用户与用户组