夜雨聆风学习资料网

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 有没有同样的反查功能?

有,而且分三种情况:

你要干什么
RHEL/CentOS(yum/dnf)
Debian/Ubuntu(apt)
反查命令归哪个包(没装也能查)
yum provides */tcpdumpapt-file search bin/tcpdump
查已装的文件属于哪个包
rpm -qf /usr/sbin/tcpdumpdpkg -S /usr/sbin/tcpdump
按关键字模糊找包
yum search tcpdumpapt 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 挂成本地源解决的。同一件事,做一次和做十次,差的只是有没有提前搭好源。

收藏本文,下次要用时翻出来对照——觉得有用?点赞 + 收藏 + 转发 ❤️

**怦然心动 · 往期推荐** ♥

▶- yum provides,运维圈公认好用的反查命令

▶- 他要 root 密码,我给了他一张清单

▶- 压缩命令用错一次,硬盘多占10G tar gzip zip 一文说透

▶- 告别 VMware 卡顿终端:WinSCP 传文件 + PuTTY 敲命令,远程连接实战

▶- 用户与用户组

▶- Linux 文件系统结构与层次标准(FHS)全解析

相关学习资料