使用 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 访问的路径。之后linux培训班,内部计算机就不需要连接到互联网,可以通过 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-firmware
deb http://mirrors.ustc.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware
deb 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 根目录linux系统下载软件,该目录通常位于 /var/www/html
可以从镜像目录创建符号链接到 Web 根目录。例如,使用以下命令链接 Linux 存档和安全镜像:
sudo ln -s /var/spool/apt-mirror/mirror/archive.debian.com/debian /var/www/html/debian
sudo ln -s /var/spool/apt-mirror/mirror/security.debian.com/ubuntu /var/www/html/debian-security
链接完成后,测试一下镜像是否正常工作,打开浏览器访问:
。将 your-server-ip 替换为镜像服务器的实际 IP 地址。

配置本地网络客户端使用自建本地仓库
本地 APT 镜像设置完成并通过 HTTP 提供服务后,配置客户端机器使用本地自建仓库,而不是从互联网获取软件包,需要编辑每个客户端上的 sources.list 文件,告诉系统从哪里获取更新和软件。
sudo nano /etc/apt/sources.list
# 编辑本地客户端 apt 下载更新源
假设自建本地仓库的服务器IP是linux系统下载软件,则sources.list文件内容修改如下:
# 本地局域网镜像源
deb http://192.168.1.100/debian bookworm main contrib non-free non-free-firmware
deb http://192.168.1.100/debian bookworm-updates main contrib non-free non-free-firmware
deb 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手机,重要的是定期保持其更新。
Linux 仓库会频繁更新新软件包、安全补丁和错误修复。如果本地镜像过时,客户端系统将无法得到这些更新,也就失去了维护镜像的初衷。
可以安排任务(称为 cron 作业 )在特定时间或间隔运行。
sudo crontab -e
# 编辑定时作业计划
设置crontab任务计划:
0 1 * * * /usr/bin/apt-mirror > /var/log/apt-mirror.log
每天凌晨1点更新本地自建仓库,并将结果存为日志以方便检查同步结果
