乐于分享
好东西不私藏

Linux 离线安装软件完全指南(增强版)

Linux 离线安装软件完全指南(增强版)

     在工作中我们内外网是隔离的所以需要把软件刻录到光盘或者U盘中导入到内网服务器中。

1. 准备工作

1.1 确认系统信息

在外网电脑或内网电脑上先确认:

# 查看系统版本cat /etc/os-releasecat /etc/redhat-release    # CentOS/RHELlsb_release -a             # Ubuntu/Debian# 查看系统架构uname -m# x86_64 = 64 位 Intel/AMD# aarch64 = 64 位 ARM# i686 = 32 位# 查看包管理器类型which yum dnf apt apt-get rpm dpkg 

1.2 准备工具

工具 用途
U 盘/移动硬盘 传输文件(建议 FAT32/exFAT 格式)
外网电脑 下载软件和依赖
内网电脑 目标安装机器
刻录光驱(可选) 刻录 ISO 到光盘
网络带宽 大文件建议使用高速网络或离线硬盘快递

1.3 评估所需空间

场景 预估空间
单个软件 RPM/DEB 10-100 MB
完整 YUM 仓库镜像 50-100 GB
完整 APT 仓库镜像 100-200 GB
Docker 镜像(如 Zabbix) 500 MB – 2 GB
源码编译临时空间 源码包的 5-10 倍



2. 方式一:RPM/DEB 包 + 依赖离线安装

2.1 CentOS/RHEL (RPM 包)

步骤 1:外网电脑下载软件及依赖

# 方法 A:使用 yumdownloader(需要安装 yum-utils)sudo yum install -y yum-utils# 下载单个包(不含依赖)yumdownloader nginx# 下载包及所有依赖yumdownloader --resolve nginx# 下载到指定目录yumdownloader --resolve --destdir=/tmp/nginx-offline nginx# 批量下载多个软件yumdownloader --resolve --destdir=/tmp/offline-packages \    nginx mysql-server php git vim# 下载特定版本yumdownloader --resolve nginx-1.20.1-9.el8
方法 B:手动从网站下载CentOS 包仓库:https://mirrors.aliyun.com/centos/EPEL 仓库:https://dl.fedoraproject.org/pub/epel/CentOS Vault(旧版本):https://vault.centos.org/# 下载后检查依赖rpm -qpR package.rpm  # 查看包依赖

步骤 2:复制到 U 盘

# 挂载 U 盘(通常自动挂载到 /run/media/ 或 /mnt)lsblkdf -h# 复制文件cp -r /tmp/nginx-offline /mnt/usb/# 生成文件清单(便于内网核对)find /mnt/usb/nginx-offline -name "*.rpm" | sort > /mnt/usb/nginx-offline/package-list.txtmd5sum /mnt/usb/nginx-offline/*.rpm > /mnt/usb/nginx-offline/md5sums.txt

步骤 3:内网电脑安装

# 挂载 U 盘mkdir -p /mnt/usbmount /dev/sdb1 /mnt/usb   # sdb1 根据实际设备名调整# 验证文件完整性cd /mnt/usb/nginx-offlinemd5sum -c md5sums.txt# 进入包目录cd /mnt/usb/nginx-offline# 批量安装所有 RPM 包sudo rpm -ivh *.rpm# 或忽略依赖强制安装(不推荐)sudo rpm -ivh --nodeps --force package.rpm# 使用 yum 本地安装(推荐,自动处理依赖)sudo yum localinstall -y *.rpm# 验证安装rpm -qa | grep nginxnginx -v

2.2 Ubuntu/Debian (DEB 包)

步骤 1:外网电脑下载软件及依赖

# 方法 A:使用 apt-get download# 下载单个包apt-get download nginx# 下载包及依赖(需要 apt-rdepend)sudo apt-get install -y apt-rdependapt-rdepend --download=deb nginx# 批量下载apt-get download $(apt-rdepend --depends nginx | grep -v "^$" | grep -v "^Conflicts" | grep -v "^Replaces")
# 方法 B:使用 apt-offline(推荐)sudo apt-get install -y apt-offline# 在内网电脑生成签名文件apt-offline set /tmp/signature.sig --update --upgrade# 或指定包apt-offline set /tmp/nginx.sig --install-package nginx# 复制到 U 盘后,在外网电脑下载apt-offline get /tmp/signature.sig --bundle /tmp/offline-bundle.zip --threads 5
方法 C:手动从网站下载Ubuntu 包仓库:https://packages.ubuntu.com/Debian 包仓库:https://packages.debian.org/

步骤 2:内网电脑安装

# 挂载 U 盘mount /dev/sdb1 /mnt/usb# 安装 DEB 包cd /mnt/usb# 使用 dpkg 安装(可能需要手动处理依赖)sudo dpkg -i *.deb# 如果有依赖问题,尝试修复sudo apt-get install -f -y# 或使用 gdebi(推荐,自动处理依赖)sudo apt-get install -y gdebi-coresudo gdebi -n package.deb

2.3 依赖问题处理

# RPM 查看依赖rpm -qpR package.rpm# RPM 查看包信息rpm -qpi package.rpm# 查找提供某个文件的包rpm -qf /path/to/file# RPM 查找哪个包提供某个命令yum provides */nginx# DEB 查看依赖dpkg -I package.deb# DEB 查看内容dpkg -c package.deb# DEB 查找提供某个文件的包dpkg -S /path/to/file



3. 方式二:ISO 光盘挂载安装

3.1 准备 ISO 镜像

下载对应系统的 ISOCentOS: https://mirrors.aliyun.com/centos/CentOS Stream: https://mirrors.aliyun.com/centos-stream/Ubuntu: https://mirrors.aliyun.com/ubuntu/Rocky Linux: https://mirrors.rockylinux.org/AlmaLinux: https://mirrors.almalinux.org/RHEL: 需要订阅访问 https://access.redhat.com/# 验证 ISO 完整性sha256sum CentOS-7-x86_64-DVD-2009.iso对比官网提供的 SHA256 值

3.2 挂载 ISO 到内网电脑

方法 A:物理光盘

# 插入光盘后查看设备lsblk# 挂载光盘sudo mount /dev/cdrom /mnt/cdrom# 或sudo mount /dev/sr0 /mnt/cdrom# 查看内容ls -la /mnt/cdrom/# 卸载sudo umount /mnt/cdrom

方法 B:ISO 文件挂载

# 将 ISO 复制到内网电脑(如果 U 盘空间足够)cp /mnt/usb/centos7.iso /tmp/# 创建挂载点sudo mkdir -p /mnt/iso# 挂载 ISOsudo mount -o loop /tmp/centos7.iso /mnt/iso# 查看内容ls -la /mnt/iso/Packages/# 永久挂载(/etc/fstab)echo '/tmp/centos7.iso /mnt/iso iso9660 loop 0 0' | sudo tee -a /etc/fstab

3.3 配置本地 YUM 源(CentOS/RHEL)

# 备份原有配置sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak# 创建本地源配置sudo tee /etc/yum.repos.d/local.repo << 'EOF'[local]name=Local Repositorybaseurl=file:///mnt/isoenabled=1gpgcheck=0gpgkey=file:///mnt/iso/RPM-GPG-KEY-CentOS-7[packages]name=Packagesbaseurl=file:///mnt/iso/Packagesenabled=1gpgcheck=0EOF# 清理并重建缓存sudo yum clean allsudo yum makecache# 验证yum repolist# 从本地源安装sudo yum install -y nginx vim git

3.4 配置本地 APT 源(Ubuntu/Debian)

# 挂载 ISO(Ubuntu)sudo mount -o loop ubuntu-20.04.iso /mnt/iso# 备份原配置sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak# 创建本地源sudo tee /etc/apt/sources.list << 'EOF'deb file:///mnt/iso focal main restricted universe multiverseEOF# 或添加光盘源sudo apt-cdrom add# 更新缓存sudo apt-get update# 安装软件sudo apt-get install -y nginx vim



4. 方式三:源码包编译安装

4.1 准备工作

外网电脑下载源码和依赖

# 创建下载目录mkdir -p /tmp/offline-source/nginxcd /tmp/offline-source/nginx# 下载主程序源码# Nginx: https://nginx.org/download/wget https://nginx.org/download/nginx-1.24.0.tar.gz# 下载依赖库源码wget https://zlib.net/zlib-1.3.tar.gzwget https://www.openssl.org/source/openssl-3.0.0.tar.gzwget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz/download# 下载编译工具(如果需要)# 对于完全离线环境,需要下载 gcc、make 等源码或 RPM 包# 打包所有文件tar -czf nginx-offline.tar.gz \    nginx-1.24.0.tar.gz \    zlib-1.3.tar.gz \    openssl-3.0.0.tar.gz \    pcre-8.45.tar.gz# 生成校验和sha256sum nginx-offline.tar.gz > nginx-offline.tar.gz.sha256

内网电脑安装编译工具

# 如果内网完全离线,需要预先下载好这些包# CentOS/RHEL - 下载以下 RPM 包及依赖:gcc gcc-c++ make pcre-devel zlib-devel openssl-devel patch wget# Ubuntu/Debian - 下载以下 DEB 包及依赖:build-essential libpcre3-dev libssl-dev zlib1g-dev patch wget# 使用 yumdownloader/apt-offline 预先下载到 U 盘

4.2 编译安装步骤

# 1. 验证文件完整性sha256sum -c nginx-offline.tar.gz.sha256# 2. 解压源码tar -xzf nginx-offline.tar.gzcd nginx-1.24.0# 3. 编译依赖库(如果需要静态链接或自定义版本)# zlibcd ../zlib-1.3./configure --prefix=/usr/local/zlibmake && sudo make install# OpenSSLcd ../openssl-3.0.0./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlibmake && sudo make install# PCREcd ../pcre-8.45./configure --prefix=/usr/local/pcremake && sudo make install# 4. 编译主程序cd ../nginx-1.24.0# 配置编译选项./configure \    --prefix=/usr/local/nginx \    --sbin-path=/usr/local/nginx/sbin/nginx \    --conf-path=/usr/local/nginx/conf/nginx.conf \    --pid-path=/usr/local/nginx/logs/nginx.pid \    --lock-path=/usr/local/nginx/logs/nginx.lock \    --error-log-path=/usr/local/nginx/logs/error.log \    --http-log-path=/usr/local/nginx/logs/access.log \    --with-http_ssl_module \    --with-http_gzip_static_module \    --with-pcre=../pcre-8.45 \    --with-zlib=../zlib-1.3 \    --with-openssl=../openssl-3.0.0 \    --with-threads \    --with-file-aio \    --with-stream \    --with-mail# 编译(-j 指定并行编译数,根据 CPU 核心数调整)make -j$(nproc)# 安装sudo make install# 5. 验证/usr/local/nginx/sbin/nginx -v/usr/local/nginx/sbin/nginx -t

4.3 配置系统服务

# 创建 systemd 服务sudo tee /etc/systemd/system/nginx.service << 'EOF'[Unit]Description=The NGINX HTTP and reverse proxy serverAfter=syslog.target network-online.target remote-fs.target nss-lookup.targetWants=network-online.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStartPre=/usr/local/nginx/sbin/nginx -tExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/local/nginx/sbin/nginx -s reloadExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=trueLimitNOFILE=65535[Install]WantedBy=multi-user.targetEOF# 启用服务sudo systemctl daemon-reloadsudo systemctl enable nginxsudo systemctl start nginxsudo systemctl status nginx

4.4 常用编译选项

# Nginx 常用选项--prefix=/usr/local/nginx          # 安装路径--with-http_ssl_module             # HTTPS 支持--with-http_v2_module              # HTTP/2支持--with-http_realip_module          # 真实 IP--with-http_gzip_static_module     # 静态 gzip--with-stream                      # TCP/UDP 代理--with-mail                        # 邮件代理--add-module=/path/to/module       # 第三方模块--with-cc-opt='-O3 -march=native'  # 性能优化# 通用选项--prefix=PATH                      # 安装目录--exec-prefix=PATH                 # 二进制文件目录--bindir=PATH                      # 用户命令目录--sbindir=PATH                     # 系统命令目录--libdir=PATH                      # 库文件目录--includedir=PATH                  # 头文件目录# 性能优化选项--with-ld-opt='-Wl,-rpath,/usr/local/lib'--with-cpu-opt=core-i7             # CPU 优化

4.5 编译优化技巧

# 1. 使用更多 CPU 核心加速编译make -j$(nproc)# 2. 优化编译参数(在 configure 时设置)CFLAGS="-O3 -march=native -pipe" \CXXFLAGS="-O3 -march=native -pipe" \./configure ...# 3. 使用 ccache 加速重复编译sudo yum install -y ccacheexport CC="ccache gcc"export CXX="ccache g++"# 4. 清理编译缓存make clean# 或完全清理make distclean



5. 方式四:创建本地 YUM/APT 仓库

5.1 创建本地 YUM 仓库(CentOS/RHEL)

外网电脑准备

# 1. 同步完整仓库(需要大空间)mkdir -p /tmp/centos-repocd /tmp/centos-repo# 使用 reposync(需要 yum-utils)sudo yum install -y yum-utils createrepo# 同步指定仓库reposync -r base -p /tmp/centos-reporeposync -r updates -p /tmp/centos-reporeposync -r extras -p /tmp/centos-reporeposync -r epel -p /tmp/centos-repo# 或同步所有启用的仓库reposync -a -p /tmp/centos-repo# 2. 创建仓库元数据for dir in /tmp/centos-repo/*/; do    createrepo "$dir"done# 3. 复制到 U 盘/移动硬盘(使用 rsync 保留结构)rsync -av /tmp/centos-repo /mnt/usb/# 4. 生成仓库清单find /tmp/centos-repo -name "*.rpm" | wc -l > /mnt/usb/repo-package-count.txtdu -sh /tmp/centos-repo > /mnt/usb/repo-size.txt

内网电脑配置

# 1. 连接存储设备mount /dev/sdb1 /mnt/usb# 2. 创建仓库配置sudo tee /etc/yum.repos.d/offline.repo << 'EOF'[base]name=Offline Base Repositorybaseurl=file:///mnt/usb/centos-repo/baseenabled=1gpgcheck=0priority=1[updates]name=Offline Updates Repositorybaseurl=file:///mnt/usb/centos-repo/updatesenabled=1gpgcheck=0priority=1[extras]name=Offline Extras Repositorybaseurl=file:///mnt/usb/centos-repo/extrasenabled=1gpgcheck=0priority=1[epel]name=Offline EPEL Repositorybaseurl=file:///mnt/usb/centos-repo/epelenabled=1gpgcheck=0priority=2EOF# 3. 测试yum clean allyum repolistyum install -y nginx# 4. 验证仓库优先级yum repolist all

5.2 创建本地 APT 仓库(Ubuntu/Debian)

外网电脑准备

# 1. 使用 apt-mirror 同步sudo apt-get install -y apt-mirror# 配置 /etc/apt/mirror.listcat > /etc/apt/mirror.list << 'EOF'set base_path /tmp/ubuntu-mirrorset arch amd64,i386set nthreads 10set _tilde 0# Ubuntu 20.04 Focaldeb http://archive.ubuntu.com/ubuntu focal main restricted universe multiversedeb http://archive.ubuntu.com/ubuntu focal-updates main restricted universe multiversedeb http://archive.ubuntu.com/ubuntu focal-backports main restricted universe multiversedeb http://archive.ubuntu.com/ubuntu focal-security main restricted universe multiverse# 清理clean http://archive.ubuntu.com/ubuntuEOF# 2. 执行同步(可能需要数小时)sudo apt-mirror# 3. 创建仓库索引cd /tmp/ubuntu-mirrorapt-ftparchive packages focal/main/binary-amd64/ > focal/main/binary-amd64/Packagesgzip -c focal/main/binary-amd64/Packages > focal/main/binary-amd64/Packages.gz# 创建 Release 文件apt-ftparchive release focal > focal/Release# 4. 复制到其他机器rsync -av /tmp/ubuntu-mirror /mnt/usb/

内网电脑配置

# 1. 挂载存储mount /dev/sdb1 /mnt/usb# 2. 配置源sudo tee /etc/apt/sources.list << 'EOF'deb file:///mnt/usb/ubuntu-mirror focal main restricted universe multiversedeb file:///mnt/usb/ubuntu-mirror focal-updates main restricted universe multiversedeb file:///mnt/usb/ubuntu-mirror focal-backports main restricted universe multiversedeb file:///mnt/usb/ubuntu-mirror focal-security main restricted universe multiverseEOF# 3. 添加 GPG 密钥(如果需要)# sudo apt-key add /mnt/usb/ubuntu-mirror/_archive.ubuntu.com_ubuntu_dists_focal_Release.gpg# 4. 更新并安装sudo apt-get updatesudo apt-get install -y nginx



# ===== 外网电脑:下载 MySQL =====mkdir -p /tmp/mysql-offlinecd /tmp/mysql-offline# 方法 A:使用 yumdownloader 下载 MySQL 8.0sudo yum install -y yum-utilsyumdownloader --resolve --destdir=/tmp/mysql-offline mysql-server mysql-client mysql-common# 方法 B:从官网下载 RPM 包# https://dev.mysql.com/downloads/mysql/# 选择 Linux Generic 或对应系统版本wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-1.el8.x86_64.rpm-bundle.tar# 解压 RPM 包tar -xf mysql-8.0.35-1.el8.x86_64.rpm-bundle.tar# 提取需要的包rpm2cpio mysql-community-server-8.0.35-1.el8.x86_64.rpm | cpio -idmvrpm2cpio mysql-community-client-8.0.35-1.el8.x86_64.rpm | cpio -idmvrpm2cpio mysql-community-common-8.0.35-1.el8.x86_64.rpm | cpio -idmvrpm2cpio mysql-community-libs-8.0.35-1.el8.x86_64.rpm | cpio -idmv# 打包tar -czf mysql-offline.tar.gz *.rpm
# ===== 内网电脑:安装 MySQL =====# 1. 解压tar -xzf mysql-offline.tar.gz# 2. 卸载旧版本(如果有)sudo yum remove -y mariadb-libs mysql-libs# 3. 按顺序安装sudo rpm -ivh mysql-community-common-*.rpmsudo rpm -ivh mysql-community-libs-*.rpmsudo rpm -ivh mysql-community-client-*.rpmsudo rpm -ivh mysql-community-server-*.rpm# 或使用 yum 本地安装(推荐)sudo yum localinstall -y *.rpm# 4. 初始化 MySQLsudo mysqld --initialize --user=mysql# 查看临时密码sudo grep 'temporary password' /var/log/mysqld.log# 5. 启动服务sudo systemctl start mysqldsudo systemctl enable mysqld# 6. 修改密码mysql -u root -p> ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword123!';> FLUSH PRIVILEGES;

Ubuntu/Debian

# ===== 外网电脑:下载 MySQL =====# 从官网下载 DEB 包wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb# 下载依赖apt-get download mysql-server mysql-client libmysqlclient21# 打包tar -czf mysql-offline-ubuntu.tar.gz *.deb
# ===== 内网电脑:安装 MySQL =====# 1. 安装sudo dpkg -i mysql-apt-config_0.8.29-1_all.debsudo dpkg -i *.deb# 2. 修复依赖sudo apt-get install -f -y# 3. 安全初始化sudo mysql_secure_installation

6.2 Redis 离线安装

源码编译安装(推荐)

# ===== 外网电脑:下载 Redis =====mkdir -p /tmp/redis-offlinecd /tmp/redis-offline# 下载 Redis 源码wget https://download.redis.io/releases/redis-7.2.3.tar.gz# 下载 systemd 服务文件(可选)wget https://raw.githubusercontent.com/RedisLabs/redis-packaging/main/systemd/redis.service# 打包tar -czf redis-offline.tar.gz redis-7.2.3.tar.gz redis.service
# ===== 内网电脑:编译安装 Redis =====# 1. 解压tar -xzf redis-offline.tar.gzcd redis-7.2.3# 2. 编译(需要 gcc)make -j$(nproc)# 3. 安装sudo make install# 4. 配置sudo mkdir -p /etc/redis /var/lib/redis /var/log/redissudo cp redis.conf /etc/redis/sudo cp redis.service /etc/systemd/system/# 5. 修改配置sudo sed -i 's/bind 127.0.0.1/bind 0.0.0.0/' /etc/redis/redis.confsudo sed -i 's/daemonize no/daemonize yes/' /etc/redis/redis.confsudo sed -i 's|/var/run/redis|/var/lib/redis|' /etc/redis/redis.conf# 6. 创建用户sudo useradd -r -s /bin/false redis# 7. 设置权限sudo chown -R redis:redis /etc/redis /var/lib/redis /var/log/redis# 8. 启动服务sudo systemctl daemon-reloadsudo systemctl enable redissudo systemctl start redis# 9. 验证redis-cli ping# 应返回:PONG

6.3 Docker 离线安装

CentOS/RHEL

# ===== 外网电脑:下载 Docker =====mkdir -p /tmp/docker-offlinecd /tmp/docker-offline# 下载 Docker CE RPM 包# https://download.docker.com/linux/centos/wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-24.0.7-1.el7.x86_64.rpmwget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-24.0.7-1.el7.x86_64.rpmwget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.6.24-3.1.el7.x86_64.rpmwget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-compose-plugin-2.21.0-1.el7.x86_64.rpm# 下载依赖yumdownloader --resolve container-selinux# 打包tar -czf docker-offline-centos.tar.gz *.rpm
# ===== 内网电脑:安装 Docker =====# 1. 卸载旧版本sudo yum remove -y docker docker-client docker-client-latest docker-common \    docker-latest docker-latest-logrotate docker-logrotate docker-engine# 2. 安装依赖sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 3. 安装 Dockersudo rpm -ivh *.rpm# 或sudo yum localinstall -y *.rpm# 4. 启动 Dockersudo systemctl start dockersudo systemctl enable docker# 5. 验证docker --versiondocker run hello-world

Ubuntu/Debian

# ===== 外网电脑:下载 Docker =====mkdir -p /tmp/docker-offlinecd /tmp/docker-offline# 添加 Docker 官方仓库 GPG 密钥curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 添加仓库sudo add-apt-repository \   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \   $(lsb_release -cs) \   stable"# 下载 Docker 包apt-get download docker-ce docker-ce-cli containerd.io docker-compose-plugin# 打包tar -czf docker-offline-ubuntu.tar.gz *.deb
# ===== 内网电脑:安装 Docker =====# 1. 更新缓存sudo apt-get update# 2. 安装依赖sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release# 3. 安装 Dockersudo dpkg -i *.debsudo apt-get install -f -y# 4. 启动sudo systemctl start dockersudo systemctl enable docker# 5. 验证docker --version

6.4 JDK 离线安装

# ===== 外网电脑:下载 JDK =====mkdir -p /tmp/jdk-offlinecd /tmp/jdk-offline# Oracle JDK(需要接受许可协议)# https://www.oracle.com/java/technologies/downloads/wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz# OpenJDK(推荐)wget https://download.java.net/java/GA/jdk21.0.1/415e3f918a1f4062a0074a2794853d0d/12/GPL/openjdk-21.0.1_linux-x64_bin.tar.gz# RPM/DEB 包(可选)# yumdownloader java-21-openjdk java-21-openjdk-devel
# ===== 内网电脑:安装 JDK =====# 1. 解压sudo tar -xzf openjdk-21.0.1_linux-x64_bin.tar.gz -C /usr/local/# 2. 配置环境变量sudo tee /etc/profile.d/java.sh << 'EOF'export JAVA_HOME=/usr/local/jdk-21.0.1export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/libexport PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATHEOF# 3. 生效source /etc/profile.d/java.sh# 4. 配置 alternatives(多版本管理)sudo alternatives --install /usr/bin/java java /usr/local/jdk-21.0.1/bin/java 1sudo alternatives --install /usr/bin/javac javac /usr/local/jdk-21.0.1/bin/javac 1sudo alternatives --config java# 5. 验证java -versionjavac -version

6.5 Kubernetes 组件离线安装

# ===== 外网电脑:下载 K8s 组件 =====mkdir -p /tmp/k8s-offlinecd /tmp/k8s-offline# 下载 kubectlcurl -LO "https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl"chmod +x kubectl# 下载 kubeadm, kubelet, kubernetes-cni# 从 GitHub releases 或镜像站wget https://github.com/kubernetes/kubernetes/releases/download/v1.28.0/kubernetes-server-linux-amd64.tar.gztar -xzf kubernetes-server-linux-amd64.tar.gzcp kubernetes/server/bin/kubeadm .cp kubernetes/server/bin/kubelet .# 下载 CNI 插件wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz# 打包tar -czf k8s-offline.tar.gz kubectl kubeadm kubelet cni-plugins-linux-amd64-v1.3.0.tgz
# ===== 内网电脑:安装 K8s 组件 =====# 1. 解压tar -xzf k8s-offline.tar.gz# 2. 安装二进制文件sudo mv kubectl kubeadm kubelet /usr/local/bin/sudo chmod +x /usr/local/bin/kubectl /usr/local/bin/kubeadm /usr/local/bin/kubelet# 3. 安装 CNI 插件sudo mkdir -p /opt/cni/binsudo tar -xzf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin# 4. 配置 kubelet 服务sudo tee /etc/systemd/system/kubelet.service << 'EOF'[Unit]Description=kubelet: The Kubernetes Node AgentDocumentation=https://kubernetes.io/docs/home/Wants=network-online.targetAfter=network-online.target[Service]ExecStart=/usr/local/bin/kubeletRestart=alwaysStartLimitInterval=0RestartSec=10RestartAttempt=5[Install]WantedBy=multi-user.targetEOF# 5. 配置 kubelet 参数sudo mkdir -p /etc/kubernetessudo tee /etc/kubernetes/kubelet.conf << 'EOF'apiVersion: kubelet.config.k8s.io/v1beta1kind: KubeletConfigurationcgroupDriver: systemdEOF# 6. 启动sudo systemctl daemon-reloadsudo systemctl enable kubelet# 7. 验证kubectl version --clientkubelet --version



7. Docker 镜像离线迁移

7.1 单个镜像保存与加载

# ===== 外网电脑:导出 Docker 镜像 =====# 1. 查看现有镜像docker images# 2. 保存镜像到 tar 文件docker save -o zabbix-server.tar zabbix/zabbix-server:ubuntu-latestdocker save -o zabbix-agent.tar zabbix/zabbix-agent:ubuntu-latestdocker save -o zabbix-web.tar zabbix/zabbix-web-nginx-mysql:ubuntu-latest# 或保存多个镜像到一个文件docker save -o zabbix-all.tar \    zabbix/zabbix-server:ubuntu-latest \    zabbix/zabbix-agent:ubuntu-latest \    zabbix/zabbix-web-nginx-mysql:ubuntu-latest# 3. 压缩(可选,节省空间)gzip zabbix-server.tar# 生成 zabbix-server.tar.gz# 4. 验证文件大小ls -lh zabbix*.tar*du -sh zabbix*.tar*# 5. 生成校验和sha256sum zabbix*.tar* > zabbix-images.sha256
# ===== 内网电脑:导入 Docker 镜像 =====# 1. 确保 Docker 已安装并运行sudo systemctl status docker# 2. 复制镜像文件到内网电脑# 通过 U 盘、scp(如果有跳板机)、或其他方式# 3. 验证文件完整性sha256sum -c zabbix-images.sha256# 4. 解压(如果压缩了)gunzip zabbix-server.tar.gz# 5. 加载镜像docker load -i zabbix-server.tardocker load -i zabbix-agent.tardocker load -i zabbix-web.tar# 或加载合并的文件docker load -i zabbix-all.tar# 6. 验证镜像已导入docker images | grep zabbix# 7. 运行容器docker run -d --name zabbix-server \    -e DB_SERVER_HOST="mysql-server" \    -e MYSQL_USER="zabbix" \    -e MYSQL_PASSWORD="zabbix_pwd" \    -e MYSQL_ROOT_PASSWORD="root_pwd" \    -p 10051:10051 \    zabbix/zabbix-server:ubuntu-latest

7.2 完整 Zabbix 环境迁移示例

# ===== 外网电脑:准备完整 Zabbix 环境 =====# 1. 拉取所有需要的镜像docker pull zabbix/zabbix-server:ubuntu-latestdocker pull zabbix/zabbix-agent:ubuntu-latestdocker pull zabbix/zabbix-web-nginx-mysql:ubuntu-latestdocker pull mysql:8.0# 2. 保存所有镜像docker save -o zabbix-complete.tar \    zabbix/zabbix-server:ubuntu-latest \    zabbix/zabbix-agent:ubuntu-latest \    zabbix/zabbix-web-nginx-mysql:ubuntu-latest \    mysql:8.0# 3. 准备 docker-compose 文件cat > docker-compose.yml << 'EOF'version: '3'services:  mysql-server:    image: mysql:8.0    container_name: mysql-server    environment:      MYSQL_ROOT_PASSWORD: root_pwd      MYSQL_USER: zabbix      MYSQL_PASSWORD: zabbix_pwd      MYSQL_DATABASE: zabbix    volumes:      - mysql-data:/var/lib/mysql    networks:      - zabbix-net    restart: always  zabbix-server:    image: zabbix/zabbix-server:ubuntu-latest    container_name: zabbix-server    environment:      DB_SERVER_HOST: mysql-server      MYSQL_USER: zabbix      MYSQL_PASSWORD: zabbix_pwd      MYSQL_ROOT_PASSWORD: root_pwd    ports:      - "10051:10051"    volumes:      - zabbix-data:/var/lib/zabbix    networks:      - zabbix-net    depends_on:      - mysql-server    restart: always  zabbix-web:    image: zabbix/zabbix-web-nginx-mysql:ubuntu-latest    container_name: zabbix-web    environment:      DB_SERVER_HOST: mysql-server      MYSQL_USER: zabbix      MYSQL_PASSWORD: zabbix_pwd      MYSQL_ROOT_PASSWORD: root_pwd      ZBX_SERVER_HOST: zabbix-server    ports:      - "80:8080"    networks:      - zabbix-net    depends_on:      - zabbix-server    restart: always  zabbix-agent:    image: zabbix/zabbix-agent:ubuntu-latest    container_name: zabbix-agent    environment:      ZBX_SERVER_HOST: zabbix-server    networks:      - zabbix-net    depends_on:      - zabbix-server    restart: alwaysvolumes:  mysql-data:  zabbix-data:networks:  zabbix-net:    driver: bridgeEOF# 4. 打包所有文件tar -czf zabbix-offline-deploy.tar.gz zabbix-complete.tar docker-compose.yml# 5. 生成校验和sha256sum zabbix-offline-deploy.tar.gz > zabbix-offline-deploy.sha256
# ===== 内网电脑:部署 Zabbix 环境 =====# 1. 解压tar -xzf zabbix-offline-deploy.tar.gzsha256sum -c zabbix-offline-deploy.sha256# 2. 加载 Docker 镜像docker load -i zabbix-complete.tar# 3. 验证镜像docker images | grep -E "zabbix|mysql"# 4. 安装 docker-compose(如果未安装)# 下载离线包:https://github.com/docker/compose/releasessudo curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" \    -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose# 5. 启动服务docker-compose up -d# 6. 查看状态docker-compose psdocker-compose logs -f# 7. 访问 Web 界面# http://your-server-ip:80# 默认登录:Admin / zabbix

7.3 Docker 镜像批量迁移脚本

#!/bin/bash# export-images.sh - 批量导出 Docker 镜像# 导出所有镜像echo "=== 导出所有 Docker 镜像 ==="mkdir -p /tmp/docker-export# 获取所有镜像列表docker images --format "{{.Repository}}:{{.Tag}}" | while read image; do    # 跳过 none 标签    if [[ "$image" == *"<none>"* ]]; then        continue    fi    # 生成安全的文件名    filename=$(echo "$image" | sed 's/:/_/g' | sed 's/\//_/g')    echo "导出:$image -> ${filename}.tar"    docker save -o "/tmp/docker-export/${filename}.tar" "$image"done# 生成清单docker images > /tmp/docker-export/image-list.txtsha256sum /tmp/docker-export/*.tar > /tmp/docker-export/checksums.txt# 压缩cd /tmp/docker-exporttar -czf docker-images-backup.tar.gz *.tar checksums.txt image-list.txtecho "=== 导出完成 ==="echo "文件位置:/tmp/docker-export/docker-images-backup.tar.gz"ls -lh /tmp/docker-export/docker-images-backup.tar.gz
#!/bin/bash# import-images.sh - 批量导入 Docker 镜像TAR_FILE=$1if [ -z "$TAR_FILE" ]; then    echo "用法:$0 <镜像压缩包>"    exit 1fiecho "=== 导入 Docker 镜像 ==="# 解压tar -xzf "$TAR_FILE"# 验证if [ -f "checksums.txt" ]; then    echo "验证文件完整性..."    sha256sum -c checksums.txtfi# 导入所有 tar 文件for tar_file in *.tar; do    if [ -f "$tar_file" ]; then        echo "导入:$tar_file"        docker load -i "$tar_file"    fidoneecho "=== 导入完成 ==="docker images

7.4 私有 Docker Registry 离线部署

# ===== 外网电脑:准备 Registry 镜像 =====docker pull registry:2docker save -o registry-offline.tar registry:2# 准备 htpasswd 工具生成密码(可选)docker run --rm httpd:2 htpasswd -Bbn admin your_password > htpasswd.txt# 打包tar -czf registry-offline-deploy.tar.gz registry-offline.tar docker-compose-registry.yml htpasswd.txt
# docker-compose-registry.ymlversion: '3'services:  registry:    image: registry:2    container_name: docker-registry    ports:      - "5000:5000"    environment:      REGISTRY_AUTH: htpasswd      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm      REGISTRY_STORAGE_DELETE_ENABLED: "true"    volumes:      - ./data:/var/lib/registry      - ./auth:/auth    restart: always
# ===== 内网电脑:部署私有 Registry =====# 1. 加载镜像docker load -i registry-offline.tar# 2. 准备认证文件mkdir -p authcp htpasswd.txt auth/htpasswd# 3. 启动 Registrydocker-compose -f docker-compose-registry.yml up -d# 4. 配置 Docker 信任(/etc/docker/daemon.json)sudo tee /etc/docker/daemon.json << 'EOF'{    "insecure-registries": ["your-registry-ip:5000"]}EOF# 5. 重启 Dockersudo systemctl restart docker# 6. 登录 Registrydocker login your-registry-ip:5000# 7. 推送镜像docker tag zabbix/zabbix-server:ubuntu-latest your-registry-ip:5000/zabbix-server:ubuntu-latestdocker push your-registry-ip:5000/zabbix-server:ubuntu-latest  



8. Python/Node.js 离线部署

8.1 Python 包离线安装

# ===== 外网电脑:下载 Python 包 =====mkdir -p /tmp/python-offlinecd /tmp/python-offline# 方法 A:下载单个包及依赖pip download requestspip download flaskpip download django# 方法 B:从 requirements.txt 下载所有依赖# 先在有网机器生成 requirements.txtpip freeze > requirements.txt# 下载所有依赖pip download -r requirements.txt -d ./packages# 方法 C:下载特定平台包pip download -r requirements.txt -d ./packages --platform manylinux1_x86_64 --only-binary=:all:# 打包tar -czf python-packages.tar.gz packages/ requirements.txt
# ===== 内网电脑:安装 Python 包 =====# 1. 解压tar -xzf python-packages.tar.gz# 2. 安装(不连接 PyPI)pip install --no-index --find-links=./packages -r requirements.txt# 或安装单个包pip install --no-index --find-links=./packages requests# 3. 验证python -c "import requests; print(requests.__version__)"

8.2 Python 虚拟环境离线迁移

# ===== 外网电脑:创建可迁移的虚拟环境 =====# 1. 创建虚拟环境python3 -m venv myenv# 2. 安装包source myenv/bin/activatepip install -r requirements.txt# 3. 冻结依赖pip freeze > requirements.txt# 4. 打包(不包含 Python 解释器)tar -czf myenv-portable.tar.gz myenv/lib myenv/bin requirements.txt
# ===== 内网电脑:恢复虚拟环境 =====# 1. 确保已安装 Pythonpython3 --version# 2. 创建新的虚拟环境python3 -m venv myenv# 3. 解压包tar -xzf myenv-portable.tar.gz# 4. 覆盖 lib 和 bincp -r myenv/lib/* myenv/lib/cp myenv/bin/* myenv/bin/# 5. 激活并使用source myenv/bin/activatepython -c "import requests; print('OK')"

8.3 Node.js 包离线安装

# ===== 外网电脑:下载 Node.js 包 =====mkdir -p /tmp/node-offlinecd /tmp/node-offline# 方法 A:使用 npm pack 下载包npm pack expressnpm pack lodashnpm pack react# 方法 B:下载项目依赖# 在项目目录执行npm install --package-lock-onlynpm pack $(cat package.json | jq -r '.dependencies | keys[]')# 方法 C:使用 verdaccio 搭建私有 npm 仓库npm install -g verdaccioverdaccio &npm publish --registry http://localhost:4873# 打包tar -czf node-packages.tar.gz *.tgz package.json package-lock.json
# ===== 内网电脑:安装 Node.js 包 =====# 1. 解压tar -xzf node-packages.tar.gz# 2. 从本地安装npm install --offline *.tgz# 或指定本地目录npm install --prefer-offline --offline-cache ./packages# 3. 验证node -e "console.log(require('express').version)"

8.4 Node.js/Python 解释器离线安装

# ===== Node.js 离线安装 =====# 外网下载wget https://nodejs.org/dist/v20.9.0/node-v20.9.0-linux-x64.tar.xz# 内网安装tar -xJf node-v20.9.0-linux-x64.tar.xz -C /usr/local/ln -s /usr/local/node-v20.9.0/bin/node /usr/local/bin/nodeln -s /usr/local/node-v20.9.0/bin/npm /usr/local/bin/npm# 验证node --versionnpm --version
# ===== Python 源码编译安装 =====# 外网下载wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz# 内网编译安装tar -xJf Python-3.12.0.tar.xzcd Python-3.12.0# 配置(需要 gcc、libssl-dev 等)./configure --prefix=/usr/local/python3.12 --enable-optimizations# 编译安装make -j$(nproc)sudo make install# 验证/usr/local/python3.12/bin/python3 --version




9. 批量部署与多机器同步

9.1 Ansible 离线部署

# ===== 外网电脑:准备 Ansible 离线包 =====mkdir -p /tmp/ansible-offlinecd /tmp/ansible-offline# 下载 Ansible 及依赖# CentOS/RHELyumdownloader --resolve --destdir=/tmp/ansible-offline ansible ansible-core python3-jmespath# Ubuntu/Debianapt-get download ansible python3-jmespath# 准备 playbookcat > playbook.yml << 'EOF'---- hosts: all  become: yes  tasks:    - name: Install nginx      yum:        name: nginx        state: present      when: ansible_os_family == "RedHat"    - name: Start nginx      service:        name: nginx        state: started        enabled: yesEOF# 准备 inventorycat > inventory.ini << 'EOF'[webservers]192.168.1.10192.168.1.11192.168.1.12[dbservers]192.168.1.20EOF# 打包tar -czf ansible-offline.tar.gz *.rpm ansible-offline/ playbook.yml inventory.ini
# ===== 内网电脑:配置 Ansible 离线环境 =====# 1. 安装 Ansiblesudo rpm -ivh *.rpm# 或sudo yum localinstall -y *.rpm# 2. 配置本地仓库(如果有)# 参考第 5 节配置本地 YUM 源# 3. 运行 playbookansible-playbook -i inventory.ini playbook.yml# 4. 批量安装软件ansible all -m yum -a "name=nginx state=present" -i inventory.ini

9.2 Shell 脚本批量部署

#!/bin/bash# deploy-all.sh - 批量部署脚本# 目标机器列表HOSTS=(    "192.168.1.10"    "192.168.1.11"    "192.168.1.12")# 共享目录(NFS 或 Samba)SHARE_DIR="/mnt/share/offline-packages"# SSH 密钥(预先配置免密登录)SSH_KEY="/root/.ssh/id_rsa"# 部署函数deploy_to_host() {    local host=$1    echo "=== 部署到 $host ==="    # 复制文件    scp -i "$SSH_KEY" -r "$SHARE_DIR"/* root@"$host":/tmp/offline/    # 远程执行安装    ssh -i "$SSH_KEY" root@"$host" << 'ENDSSH'        cd /tmp/offline        # 根据系统类型安装        if [ -f /etc/redhat-release ]; then            yum localinstall -y *.rpm        elif [ -f /etc/debian_version ]; then            dpkg -i *.deb            apt-get install -f -y        fiENDSSH    echo "=== $host 部署完成 ==="}# 并行部署(最多 5 个并发)for host in "${HOSTS[@]}"do    deploy_to_host "$host" &    # 控制并发数    if [ $(jobs -r | wc -l) -ge 5 ]; then        wait -n    fidone# 等待所有完成waitecho "=== 所有机器部署完成 ==="

9.3 rsync 多机器同步

#!/bin/bash# sync-to-all.sh - 使用 rsync 同步文件到多台机器HOSTS_FILE="hosts.txt"SOURCE_DIR="/mnt/usb/offline-packages"SSH_KEY="/root/.ssh/id_rsa"# hosts.txt 格式:# 192.168.1.10# 192.168.1.11# 192.168.1.12while read host; do    echo "同步到 $host ..."    rsync -avz -e "ssh -i $SSH_KEY" "$SOURCE_DIR/" root@"$host":/tmp/offline/done < "$HOSTS_FILE"echo "同步完成"

9.4 PXE 网络批量安装(高级)

# 适用于完全无网络环境的大规模部署# 需要一台服务器 + 局域网环境# 1. 配置 PXE 服务器# 安装必要服务yum install -y dhcp tftp-server syslinux# 2. 准备启动镜像# 将系统 ISO 内容复制到 TFTP 目录# 3. 配置 DHCPcat > /etc/dhcp/dhcpd.conf << 'EOF'subnet 192.168.1.0 netmask 255.255.255.0 {    range 192.168.1.100 192.168.1.200;    option routers 192.168.1.1;    option broadcast-address 192.168.1.255;    next-server 192.168.1.1;    filename "pxelinux.0";}EOF# 4. 配置启动菜单cat > /var/lib/tftpboot/pxelinux.cfg/default << 'EOF'default linuxlabel linux    kernel vmlinuz    append initrd=initrd.img ks=ftp://192.168.1.1/ks.cfgEOF# 5. 准备 Kickstart 自动安装文件# /var/ftp/ks.cfg



10. 常见问题与故障排查

10.1 依赖问题深度处理

# 问题 1:循环依赖# 错误:A 需要 BB 需要 A# 解决:同时安装sudo rpm -ivh A.rpm B.rpm# 或使用 yum 本地安装sudo yum localinstall -y A.rpm B.rpm
# 问题 2:版本冲突# 错误:package A requires libX.so.1, but libX.so.2 is installed# 解决 A:安装兼容版本# 找到需要的版本并安装# 解决 B:创建软链接(临时方案)sudo ln -s /usr/lib/libX.so.2 /usr/lib/libX.so.1# 解决 C:重新编译软件适配现有库
问题 3:找不到依赖包使用以下工具查找# RPM 系统yum search <package>yum provides */<command>rpm -qf <file># 在线查询(外网电脑)https://pkgs.org/https://rpmfind.net/

10.2 GPG 签名问题

# 问题:GPG key verification failed# 解决 1:导入 GPG 密钥sudo rpm --import /mnt/iso/RPM-GPG-KEY-CentOS-7sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7# 解决 2:查看已导入的密钥rpm -qa gpg-pubkey*# 解决 3:禁用 GPG 检查(仅测试环境)# 在 repo 文件中设置 gpgcheck=0# 或在命令中添加 --nogpgchecksudo yum install --nogpgcheck -y package

10.3 源码编译错误排查

# 错误 1:configure 失败# 查看 config.logtail -100 config.log# 常见原因:# - 缺少编译器:安装 gcc# - 缺少库:安装 -devel 包# - 路径问题:使用 --with-xxx=/path 指定# 错误 2:make 失败# 查看最后 50 行输出make 2>&1 | tail -50# 常见原因:# - 头文件缺失:检查 CPPFLAGS# - 库文件缺失:检查 LDFLAGS# - 语法错误:可能是编译器版本问题# 错误 3:make install 权限问题# 使用 sudosudo make install# 或指定用户可写的目录./configure --prefix=$HOME/local
# 调试编译过程# 1. 查看详细编译命令make V=1# 2. 只编译不安装make# 3. 清理后重新编译make cleanmake# 4. 完全清理make distclean./configure ...make

10.4 磁盘空间问题

# 检查空间df -hdf -i  # inode 使用率# 查找大文件find / -type f -size +100M -exec ls -lh {} \;# 清理 yum 缓存yum clean allrm -rf /var/cache/yum# 清理 apt 缓存apt-get cleanapt-get autocleanapt-get autoremove# 清理 Dockerdocker system prune -adocker volume prune# 扩展空间(LVM)lvextend -L +10G /dev/mapper/centos-rootxfs_growfs /

10.5 权限问题

# 问题:Permission denied# 检查文件权限ls -la /path/to/file# 修复权限chmod 644 /path/to/filechmod 755 /path/to/directory# 修复所有者chown root:root /path/to/filechown -R www-data:www-data /var/www# SELinux 问题(CentOS/RHEL)# 查看 SELinux 状态getenforce# 临时禁用setenforce 0# 或设置正确的上下文chcon -R -t httpd_exec_t /usr/local/nginx/sbin/restorecon -Rv /usr/local/nginx/

10.6 Docker 镜像导入问题

# 问题 1:docker load 失败# 错误:archive.tar is not a tar archive# 检查文件file archive.tartar -tvf archive.tar | head# 如果是 gzip 压缩gunzip archive.tar.gzdocker load -i archive.tar# 问题 2:镜像加载后无法运行# 检查镜像docker imagesdocker inspect <image-id># 检查架构是否匹配docker inspect <image-id> | grep Architecture# 问题 3:存储空间不足# 清理未使用的镜像docker image prune -a# 更改 Docker 存储位置# 编辑 /etc/docker/daemon.json{    "data-root""/larger/disk/docker"}

10.7 网络完全隔离环境特殊处理

# 1. 时间同步问题# 离线环境无法使用 NTP,手动设置时间date -s "2024-01-15 10:00:00"hwclock --systohc# 2. 证书问题# 复制外网电脑的 CA 证书scp outer:/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem /etc/pki/ca-trust/extracted/pem/# 3. 许可证激活# 某些软件需要离线激活# 保存机器指纹,在外网生成许可证# 4. 日志收集# 定期将日志复制到外网分析rsync -av /var/log/ /mnt/usb/logs/



11. 速查命令

11.1 包管理命令对比

操作 CentOS/RHEL Ubuntu/Debian
安装包 yum install xxx apt-get install xxx
删除包 yum remove xxx apt-get remove xxx
更新包 yum update xxx apt-get upgrade xxx
搜索包 yum search xxx apt-cache search xxx
查看信息 yum info xxx apt-cache show xxx
查看依赖 rpm -qpR xxx.rpm dpkg -I xxx.deb
本地安装 yum localinstall *.rpm dpkg -i *.deb
清理缓存 yum clean all apt-get clean
下载包 yumdownloader xxx apt-get download xxx
查看文件归属 rpm -qf /path dpkg -S /path

11.2 离线安装流程速查

┌─────────────────────────────────────────────────────────────────┐│                      离线安装完整流程                            │├─────────────────────────────────────────────────────────────────┤│                                                                 ││  外网电脑                      传输                    内网电脑   ││  ┌────────────┐              ┌──────┐              ┌──────────┐ ││  │ 1. 确认    │              │      │              │ 1. 挂载  │ ││  │ 系统信息   │─────>U 盘───>│      │─────>        │ 存储设备 │ ││  │ 架构       │   硬盘       │      │              │          │ ││  │            │   光盘       │      │              │ 2. 验证  │ ││  │ 2. 选择    │              │      │              │ 文件     │ ││  │ 安装方式   │              │      │              │          │ ││  │            │              │      │              │ 3. 执行  │ ││  │ 3. 下载    │              │      │              │ 安装     │ ││  │ 软件 + 依赖 │             │      │              │          │ ││  │            │              │      │              │ 4. 处理  │ ││  │ 4. 打包    │              │      │              │ 依赖     │ ││  │ 生成校验和 │              │      │              │          │ ││  │            │              │      │              │ 5. 验证  │ ││  │            │              │      │              │ 启动服务 │ ││  └────────────┘              └──────┘              └──────────┘ ││                                                                 ││  预计时间:30 分钟 - 数小时(取决于软件大小和数量)              │└─────────────────────────────────────────────────────────────────┘

11.3 快速决策树

需要安装什么?├── 常见软件(nginx, mysql, git...)│   ││   ├── 有外网下载条件?│   │   ├── 是 → 方式一:RPM/DEB包 + yumdownloader/apt-offline│   │   └── 否 → 方式二:ISO 挂载│   ││   └── 需要特定版本?│       ├── 是 → 方式三:源码编译│       └── 否 → 方式一├── Docker 容器│   └── Docker 镜像 save/load(第 7 节)├── Python/Node.js 应用│   └── pip download / npm pack(第 8 节)├── 批量部署(>5 台机器)│   ├── 有局域网? → Ansible / rsync│   └── 无网络? → PXE + Kickstart└── 长期离线环境    └── 方式四:创建本地仓库镜像

11.4 文件大小参考

内容 预估大小
Nginx RPM 包 5-10 MB
MySQL 完整包 200-400 MB
Docker CE 100-150 MB
Docker 镜像(应用) 100 MB – 2 GB
完整 YUM 仓库 50-100 GB
完整 APT 仓库 100-200 GB
JDK 150-300 MB
Kubernetes 组件 500 MB – 1 GB

常用下载源镜像

国内镜像站

# CentOS
https://mirrors.aliyun.com/centos/
https://mirrors.tencent.com/centos/
https://mirrors.163.com/centos/

# Ubuntu
https://mirrors.aliyun.com/ubuntu/
https://mirrors.tencent.com/ubuntu/

# Debian
https://mirrors.aliyun.com/debian/

# EPEL
https://mirrors.aliyun.com/epel/

# Docker
https://mirrors.aliyun.com/docker-ce/

# PyPI
https://pypi.tuna.tsinghua.edu.cn/simple/

# NPM
https://registry.npmmirror.com/

官方源

# CentOS Vault(旧版本)
https://vault.centos.org/

# Ubuntu Old Releases
http://old-releases.ubuntu.com/

# Docker
https://download.docker.com/

# Kubernetes
https://dl.k8s.io/

# Python
https://www.python.org/ftp/python/

# Node.js
https://nodejs.org/dist/

自动化脚本模板

1 离线环境检测脚本

#!/bin/bash# check-offline-env.sh - 检测离线环境信息echo "=== 系统信息 ==="echo "系统版本:$(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"echo "内核版本:$(uname -r)"echo "架构:$(uname -m)"echo "主机名:$(hostname)"echo ""echo "=== 包管理器 ==="which yum dnf apt apt-get rpm dpkg 2>/dev/nullecho ""echo "=== 磁盘空间 ==="df -h / /home /tmp 2>/dev/nullecho ""echo "=== 网络状态 ==="ip addr | grep "inet " | head -5ping -c 1 8.8.8.8 2>&1 | head -2echo ""echo "=== 已安装关键软件 ==="rpm -qa | grep -E "gcc|make|wget|curl" 2>/dev/null || \dpkg -l | grep -E "gcc|make|wget|curl" 2>/dev/null

 一键打包脚本

#!/bin/bash# package-offline.sh - 一键打包离线安装包PACKAGE_NAME=$1DEST_DIR=${2:-/tmp/offline-packages}if [ -z "$PACKAGE_NAME" ]; then    echo "用法:$0 <包名> [目标目录]"    exit 1fimkdir -p "$DEST_DIR"# 检测系统类型if command -v yum &> /dev/null; then    echo "检测到 CentOS/RHEL 系统"    yumdownloader --resolve --destdir="$DEST_DIR" "$PACKAGE_NAME"elif command -v apt-get &> /dev/null; then    echo "检测到 Ubuntu/Debian 系统"    apt-get download "$PACKAGE_NAME"    mv *.deb "$DEST_DIR/"else    echo "未检测到支持的包管理器"    exit 1fiecho "打包完成:$DEST_DIR"ls -lh "$DEST_DIR"