uos/deepin系统下构建离线apt源的deb包实战指南

uos/deepin系统下构建离线apt源的deb包实战指南 1. 为什么需要构建离线apt源在日常使用uos或deepin系统时我们经常需要安装各种软件包。但在某些特殊环境下比如企业内网、保密单位或网络条件受限的场景机器可能无法直接连接外部软件源。这时候离线apt源就成了救命稻草。我曾经在一个军工企业的项目上遇到过这种情况。他们的研发机器全部处于物理隔离环境连内网都有限制。每次需要安装新软件都要走繁琐的审批流程由专人从外网下载后刻盘导入。后来我帮他们搭建了本地apt源工作效率直接提升了好几倍。离线apt源的核心价值在于完全脱离外网依赖所有软件包都存储在本地安装速度更快局域网传输比从国外源下载快得多版本可控可以固定特定版本的软件包安全合规满足某些特殊场景的网络隔离要求2. 准备工作获取deb包2.1 选择合适的下载环境构建离线源的第一步是收集所有需要的deb包。这里有个关键技巧一定要在一台干净的机器上进行下载。我吃过亏曾经在一台已经安装过部分依赖的机器上下载结果漏掉了许多间接依赖包。推荐的做法是准备一台全新的uos/deepin虚拟机确保能正常连接官方软件源只安装最基本的系统组件# 示例创建一个干净的docker环境用于下载 docker run -it --name deb_downloader deepin bash2.2 下载deb包的几种方式方法一使用apt下载但不安装这是最常用的方法以libreoffice为例sudo apt --download-only install libreoffice下载的deb包默认存放在/var/cache/apt/archives目录。我建议下载完成后立即将这些文件移动到专用目录避免被系统自动清理。方法二手动下载特定版本有时候我们需要特定版本的软件包apt download libreoffice1:6.1.5-3deb10u6方法三批量下载依赖包对于复杂软件可以使用以下命令递归下载所有依赖apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances libreoffice | grep ^\w | sort -u)3. 构建本地apt源3.1 目录结构规划良好的目录结构能让后续维护更轻松。我的建议方案/local_apt/ ├── dists/ │ └── stable/ │ ├── main/ │ │ ├── binary-amd64/ │ │ └── binary-arm64/ │ └── contrib/ └── pool/ ├── main/ └── contrib/把下载的deb包按类别放入pool目录比如mkdir -p /local_apt/pool/main mv *.deb /local_apt/pool/main/3.2 生成Packages文件Packages文件是apt源的核心索引有两种生成方式方法一使用apt-ftparchivecd /local_apt apt-ftparchive packages pool/main dists/stable/main/binary-amd64/Packages gzip -kf dists/stable/main/binary-amd64/Packages方法二使用dpkg-scanpackages需要先安装dpkg-dev工具sudo apt install dpkg-dev dpkg-scanpackages pool/main /dev/null | gzip -9c dists/stable/main/binary-amd64/Packages.gz我更喜欢第二种方法因为它能生成更完整的依赖关系信息。3.3 创建Release文件Release文件包含源的元数据信息apt-ftparchive release dists/stable/ dists/stable/Release如果需要更详细的Release信息可以创建apt-ftparchive.conf配置文件APT::FTPArchive::Release { Origin Your Company; Label Local Repository; Suite stable; Codename deepin; Architectures amd64 arm64; Components main contrib; Description Company Internal Repository; };然后运行apt-ftparchive -capt-ftparchive.conf release dists/stable/ dists/stable/Release4. 配置客户端使用本地源4.1 修改sources.list备份原有源配置sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑sources.listsudo nano /etc/apt/sources.list添加本地源假设源服务器IP是192.168.1.100deb [trustedyes] http://192.168.1.100/local_apt stable main或者使用本地文件路径deb [trustedyes] file:/local_apt stable main4.2 处理常见问题问题一域名解析错误在内网环境中可能会因为残留的外部源配置导致报错。解决方法sudo mv /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/backup/问题二GPG签名验证失败如果不想处理签名最简单的办法是添加[trustedyes]选项。但更安全的做法是sudo apt-key add repository-key.asc问题三依赖关系冲突有时候会遇到依赖关系问题可以尝试sudo apt --fix-broken install sudo dpkg --configure -a5. 高级技巧与优化5.1 使用nginx搭建HTTP源文件共享方式虽然简单但在多台机器使用时效率较低。可以用nginx搭建HTTP源sudo apt install nginx sudo ln -s /local_apt /var/www/html/local_apt然后修改nginx配置server { listen 80; server_name apt.local; root /var/www/html; autoindex on; location /local_apt { try_files $uri $uri/ 404; } }5.2 定期更新策略对于需要定期更新的环境可以设置cron任务自动同步0 3 * * * /usr/bin/rsync -azP userexternal-host:/path/to/packages/ /local_apt/pool/main/5.3 空间优化随着时间的推移deb包会占用大量空间。建议定期清理旧版本rm /local_apt/pool/main/*1.0.0*使用硬链接节省空间cp -al /var/cache/apt/archives/*.deb /local_apt/pool/main/6. 实际案例构建完整办公环境以构建完整的LibreOffice环境为例展示完整流程在联网机器上创建下载脚本download_office.sh#!/bin/bash PACKAGESlibreoffice-writer libreoffice-calc libreoffice-impress mkdir -p /tmp/office_deps cd /tmp/office_deps for pkg in $PACKAGES; do apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances $pkg | grep ^\w | sort -u) done将下载的包复制到离线环境scp -r /tmp/office_deps useroffline-machine:/local_apt/pool/main/在离线机器上重建索引dpkg-scanpackages pool/main /dev/null | gzip -9c dists/stable/main/binary-amd64/Packages.gz apt-ftparchive release dists/stable/ dists/stable/Release安装测试sudo apt update sudo apt install libreoffice-writer这个案例我在三家不同企业成功实施过最大的环境包含200台离线机器每年节省的审批时间超过500人天。