在工作中我们内外网是隔离的所以需要把软件刻录到光盘或者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 镜像
# 下载对应系统的 ISO# CentOS: 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 需要 B,B 需要 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"