内网开发救星:手把手教你用阿里云源+Shell脚本制作Ubuntu 22.04专属离线安装包

张开发
2026/4/22 6:58:56 15 分钟阅读

分享文章

内网开发救星:手把手教你用阿里云源+Shell脚本制作Ubuntu 22.04专属离线安装包
内网开发救星手把手教你用阿里云源Shell脚本制作Ubuntu 22.04专属离线安装包在金融、军工、医疗等对数据安全要求极高的行业开发环境往往需要完全隔离互联网。上周遇到某证券公司的架构师王工他们团队正在为量化交易系统搭建测试环境但公司内网服务器连最基本的gcc都装不上——没有网络连接apt完全成了摆设。这种场景下如何快速构建一个包含完整工具链的离线环境今天分享的这套方案或许能成为你的技术急救包。不同于简单的镜像拷贝我们将通过阿里云源智能脚本组合拳打造一个可定制、可复用的离线安装体系。这个方案最妙的地方在于你可以像搭积木一样自由组合软件包最终生成一个自带依赖解析功能的ISO镜像。下面就从实战角度带你完整走通这个技术闭环。1. 环境准备与源配置工欲善其事必先利其器。我们需要一台能临时联网的Ubuntu 22.04主机作为下载中转站建议选择与目标环境相同的系统版本以避免兼容性问题。内存建议不低于4GB硬盘空间根据软件包规模预留20GB以上。配置阿里云镜像源替代默认海外源加速下载sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo tee /etc/apt/sources.list EOF deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse EOF关键工具安装sudo apt update sudo apt install -y apt-rdepends dpkg-dev genisoimage提示apt-rdepends用于递归获取依赖关系dpkg-dev用于构建仓库索引genisoimage则负责生成最终ISO镜像2. 智能抓包脚本解析下面这个Shell脚本是整套方案的核心它实现了三个关键功能递归下载指定软件包及其所有依赖自动构建符合APT规范的本地仓库结构生成可挂载的ISO镜像和自动配置脚本脚本核心逻辑拆解#!/bin/bash # 定义软件包组合 case $1 in devops) PACKAGESdocker.io k8s helm terraform ansible ;; ai) PACKAGESpython3-tensorflow python3-torch nvidia-cuda-toolkit ;; *) PACKAGESbuild-essential git python3 vim ;; esac # 递归下载函数 download_package_with_deps() { apt-rdepends $1 | grep -v ^ | while read pkg; do if ! ls ${pkg}_*.deb /dev/null; then echo 正在抓取: $pkg apt-get download $pkg || echo 警告: $pkg下载失败 fi done }实际执行示例chmod x offline-builder.sh ./offline-builder.sh devops # 下载DevOps工具链3. 本地仓库构建实战当脚本完成下载后会在当前目录生成以下结构. ├── offline-packages/ │ └── debs/ # 所有下载的deb包 ├── local-repo/ # APT标准仓库结构 │ ├── pool/ # 软件包存储 │ └── dists/ # 元数据索引 └── ubuntu_22.04-devops.iso # 最终生成的镜像仓库元数据生成关键步骤dpkg-scanpackages pool/main /dev/null dists/stable/main/binary-amd64/Packages gzip -k dists/stable/main/binary-amd64/Packages genisoimage -o ubuntu_22.04-custom.iso -R -J local-repo注意如果包含NVIDIA驱动等闭源包需要额外添加non-free组件声明4. 离线环境部署技巧将生成的ISO文件拷贝到目标机器后执行自动配置脚本#!/bin/bash # 挂载ISO镜像 mkdir -p /mnt/local-repo mount -o loop ubuntu_22.04-devops.iso /mnt/local-repo # 配置本地源 cat /etc/apt/sources.list EOF deb [trustedyes] file:///mnt/local-repo stable main EOF # 更新索引 apt update常见问题排查依赖冲突尝试先安装基础库apt install -f签名验证在sources.list中添加[trustedyes]空间不足使用du -sh /mnt/local-repo检查镜像大小5. 高级定制方案对于需要持续更新的场景可以扩展脚本实现增量更新版本控制集成# 在原始下载机执行 rsync -avz --delete /path/to/local-repo/ useroffline-server:/mnt/local-repo/多架构支持ARM/x86混合环境dpkg-scanpackages --arch amd64,arm64 pool/main Packages某智能制造企业实际案例他们用这套方案为50产线设备预装了定制化的工业软件栈部署时间从原来的3天缩短到2小时。关键是在脚本的PACKAGES变量中添加了这些私有包PACKAGES factory-tools plc-driver vision-sdk最后分享一个实用技巧用apt-cache depends命令提前分析复杂依赖关系可以显著减少冗余下载。比如发现某个包依赖了图形界面组件而你的服务器环境根本不需要GUI就可以在脚本中添加过滤规则。

更多文章