使用 apt-mirror 建立 Debian Linux 本地仓库
在网络上管理多台 Linux 机器,为每台系统单独下载更新和软件包确实很耗时费力,应对网络不稳定、离线环境或是内部隔离环境,自建本地仓库,让所有 Linux 系统从自建仓库本地安装是一件值得做的事。
本文介绍 apt-mirror 自建本地仓库的方法。当然,需要准备好大容量硬盘。
安装 apt-mirror
sudo apt update && sudo apt install apt-mirror
默认情况下,所有内容保存到目录 /var/spool/apt-mirror
还需要在 /var/www/html/debian 创建另一个目录,该目录将作为可供公共访问的文件夹,允许网络上的客户端可以通过 Nginx 搭建的 Web 服务器访问镜像仓库。
sudo mkdir -p /var/www/html/ubuntu
将从镜像目录同步内容到这个可通过 Web 访问的路径。之后,内部计算机就不需要连接到互联网,可以通过 HTTP 直接从本地镜像获取 Linux 系统更新。
配置 apt-mirror
安装完 apt-mirror 后,需要配置明确要下载哪些内容、存储位置以及同步过程中出现问题的处理方式。通过配置文件/etc/apt/mirror.list进行控制:
sudo vim /etc/apt/mirror.list编辑配置文件
这里以 Debian 12 (Bookworm) 系统配置为例:
############# config ################ 设置镜像文件存储的本地根目录set base_path /var/spool/apt-mirror## 设置镜像下载的并行线程数set nthreads 20## 设置默认下载的架构 (例如 amd64, i386, arm64)set default_arch amd64## 是否执行清理脚本 (1 为开启,同步完后会自动运行 clean.sh)set _cleanup 1###################################### --- Debian 12 (Bookworm) 官方源 ---# 建议使用离你最近的镜像站,比如阿里云、清华源或华为源# 核心二进制库deb http://mirrors.ustc.edu.cn/debian bookworm main contrib non-free non-free-firmwaredeb http://mirrors.ustc.edu.cn/debian bookworm-updates main contrib non-free non-free-firmwaredeb http://mirrors.ustc.edu.cn/debian bookworm-backports main contrib non-free non-free-firmware# 安全更新库deb http://mirrors.ustc.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware## --- 源码库 (可选) ---# 如果不需要编译软件,可以注释掉以节省空间# deb-src http://mirrors.ustc.edu.cn/debian bookworm main contrib non-free non-free-firmware############# cleanup ################ 这里的地址必须与上面 deb 声明的地址一致,用于清理过期包clean http://mirrors.ustc.edu.cn/debian
开始镜像 APT 软件包
一旦正确配置了包含想要镜像的仓库和组件的 mirror.list 文件,就可以运行 apt-mirror 命令将 Linux 软件包下载到自建本地仓库了。
sudo apt-mirror连接到官方镜像服务器,获取配置文件指定的元数据和软件包,并保存到本地硬盘 /var/spool/apt-mirror 目录下。
注意: 根据包含的组件数量(如 main、universe 等)以及架构数量(如 amd64 或 i386),自建本地仓库可能需要几个小时,并可能占用超过 100 GB 的磁盘空间。因此,在开始之前,确保有足够的可用存储空间。
强烈建议 在 tmux 会话中运行上述命令,因为大文件下载需要时间,如果SSH 会话断开连接或终端关闭,下载会停止。
使用 tmux 可以确保进程在后台继续运行,即使失去连接,还可以再次连接会话。
使用 nginx 提供 WEB 镜像
一旦使用 apt-mirror 完成所有软件包的下载,接下来就是使这些软件包对网络上的其他机器可访问。
为此,需要通过 HTTP 提供镜像文件,这正是搭建 Web 服务器的目的。
sudo apt install nginx安装 nginx WEB服务器
将本地镜像目录设置为默认的 Web 根目录,该目录通常位于 /var/www/html
可以从镜像目录创建符号链接到 Web 根目录。例如,使用以下命令链接 Linux 存档和安全镜像:
sudo ln -s /var/spool/apt-mirror/mirror/archive.debian.com/debian /var/www/html/debiansudo ln -s /var/spool/apt-mirror/mirror/security.debian.com/ubuntu /var/www/html/debian-security
链接完成后,测试一下镜像是否正常工作,打开浏览器访问:http://your-server-ip/ 。将 your-server-ip 替换为镜像服务器的实际 IP 地址。
配置本地网络客户端使用自建本地仓库
本地 APT 镜像设置完成并通过 HTTP 提供服务后,配置客户端机器使用本地自建仓库,而不是从互联网获取软件包,需要编辑每个客户端上的 sources.list 文件,告诉系统从哪里获取更新和软件。
sudo nano /etc/apt/sources.list# 编辑本地客户端 apt 下载更新源
假设自建本地仓库的服务器IP是,则sources.list文件内容修改如下:
# 本地局域网镜像源deb http://192.168.1.100/debian bookworm main contrib non-free non-free-firmwaredeb http://192.168.1.100/debian bookworm-updates main contrib non-free non-free-firmwaredeb http://192.168.1.100/debian bookworm-backports main contrib non-free non-free-firmware# 安全更新(如果在 mirror.list 中配置了 debian-security)deb http://192.168.1.100/debian-security bookworm-security main contrib non-free non-free-firmware
注意路径问题
客户端能否成功访问,取决于你在服务器上的 Web 服务器(如 Nginx)配置。
如果 Nginx 配置中root 指向/var/spool/apt-mirror/mirror/mirrors.ustc.edu.cn/客户端地址直接写 http://192.168.1.100/debian如果 root 指向 /var/spool/apt-mirror/mirror/客户端地址必须包含完整的域名路径:http://192.168.1.100/mirrors.ustc.edu.cn/debian
本地自建仓库及时更新
使用 apt-mirror 完成本地镜像的首次同步后,重要的是定期保持其更新。
Linux 仓库会频繁更新新软件包、安全补丁和错误修复。如果本地镜像过时,客户端系统将无法得到这些更新,也就失去了维护镜像的初衷。
可以安排任务(称为 cron 作业 )在特定时间或间隔运行。
sudo crontab -e# 编辑定时作业计划
设置crontab任务计划:
0 1 * * * /usr/bin/apt-mirror > /var/log/apt-mirror.log每天凌晨1点更新本地自建仓库,并将结果存为日志以方便检查同步结果
检查包更新来源: 可以运行 apt policy 来确认系统是否真的在从你的本地服务器获取包:
apt policy | grep 192.168.1.100
技巧: 由于 apt-mirror 生成的路径非常深(包含完整的域名文件夹),建议创建一个符号链接,让 Web 访问路径更简洁。
# 假设 base_path 是 /var/spool/apt-mirror# 创建一个链接,把深层目录映射到简单的 /var/www/htmlsudo ln -s /var/spool/apt-mirror/mirror/mirrors.ustc.edu.cn/ /var/www/html
nginx 搭建WEB 服务相关
# /etc/nginx/sites-available/apt-repo文件内容如下:server { listen 80; server_name 192.168.1.100; # 或者局域网域名 # 这里的 root 指向我们刚才建立的符号链接目录 # 或者直接指向 apt-mirror 的物理路径 root /var/www/html; # 启用目录列表显示,这是 apt 客户端查找文件必须的 location / { autoindex on; # 开启目录浏览功能 autoindex_exact_size off; # 显示大约大小(MB/GB)而非字节 autoindex_localtime on; # 显示本地时间 # 优化大数据传输 tcp_nopush on; tcp_nodelay on; } # 记录日志,方便排查客户端连接问题 access_log /var/log/nginx/repo_access.log; error_log /var/log/nginx/repo_error.log;}
- 2. 激活虚拟主机配置sudo ln -s /etc/nginx/sites-available/apt-repo /etc/nginx/sites-enabled/
- 4. 重启服务sudo systemctl restart nginx
浏览器访问本地自建仓库:,如果能看到 debian/ 和 debian-security/文件夹列表,说明配置成功。