前言
在某些企业中, 由于私有服务器有不联公网的要求, 但同时也需要更新相关软件包, 这时就需要自建软件镜像源. 而在某些 HomeLab 玩家中, 为了追求极致的速度和极低的延迟, 也会选择自建相关镜像源. 这篇文章将会记录博主自建 Debian 镜像源的全过程, 为有需要的人提供一些帮助.
示例环境
root@Mirror:~# neowofetch
_,met$$$$$gg. root@Mirror
,g$$$$$$$$$$$$$$$P. -----------
,g$$P" """Y$$.". OS: Debian GNU/Linux 13.6 (trixie) x86_64
,$$P' `$$$. Host: KVM/QEMU (Standard PC (i440FX + PIIX, 1996) pc-i440fx-11.0)
',$$P ,ggs. `$$b: Kernel: 6.12.74+deb13+1-amd64
`d$$' ,$P"' . $$$ Uptime: 6 mins
$$P d$' , $$P Packages: 450 (dpkg)
$$: $$. - ,d$$' Shell: bash 5.2.37
$$; Y$b._ _,d$P' Terminal: /dev/pts/0
Y$$. `.`"Y$$$$P"' CPU: Intel Xeon E5-2696 v4 (8) @ 2.1GHz
`$$b "-.__ Memory: 0.32 GiB / 1.92 GiB (16%)
`Y$$ Network: Unknown
`Y$$. BIOS: SeaBIOS 0.0 (04/01/2014)
`$$b.
`Y$$b.
`"Y$b._
`"""注意
搭建软件镜像源需要非常多的磁盘存储, 在操作之前请确认你有足够多的空间去存放软件源. Debian 相关软件源大小可以从 这里 获取
开整
1. 前置工作
用于进行软件源同步的工具有非常多, 具体功能与特色可以参考下表
| 工具 | 核心特点 | 适用场景 |
|---|---|---|
apt-mirror | 简单易用, 配置直观, 适合快速搭建完整镜像. | 希望快速上手, 对功能要求不复杂的个人或小型内网环境. |
apt-mirror2 | apt-mirror 的现代重写版, 使用 Python/asyncio, 性能功耗, 支持数据完整性检查和 GPG 签名校验, 能保证镜像完整不损坏. | 追求更好性能和可靠性, 希望避免同步过程中产生损坏镜像的用户. |
debmirror | 功能强大且灵活, 支持按架构, 发行版, 组件进行精细化同步. 支持 HTTP/HTTPS/FTP/rsync 多种传输方式. | 需要精细控制同步内容, 或者网络环境需要特定协议的场景. |
aptly | 企业级仓库管理工具. 除了镜像, 还支持快照, 合并, 发布等高级功能, 适合需要版本控制和 CI/CD 集成的环境. | 企业级应用, 需要对仓库进行复杂管理和版本控制的场景. |
reprepro | 轻量级的仓库构建和管理工具, 可以从本地 .deb 文件池构建仓库, 也支持镜像功能, 配置灵活. | 希望从本地软件包构建仓库, 或者需要进行更细粒度镜像配置的场景. |
rsync | 最基础的同步工具, 直接镜像整个目录, 增量同步效率高. | 对同步要求内容不高, 仅需简单, 完整地复制整个仓库目录的场景. |
这里我们使用 ftpsync 作为同步工具.
- 首先我们需要安装
ftpsync同步镜像源, Web 服务器(nginx / apache)确保能够被 HTTP 访问
apt update
apt install ftpsync nginx -y- 创建一个专门用于同步镜像的用户, 这是官方推荐的安全做法
adduser mirror- 创建存储目录并配置权限, 用于存放所有镜像文件
mkdir path/to/mirrir
chown mirror:mirror path/to/mirror2. 配置同步
- 创建配置文件
mkdir /etc/ftpsync
vim /etc/ftpsync/ftpsync.conf填入以下参数
########################################################################
# ftpsync.conf - Debian 13 (trixie) amd64 + arm64 镜像配置
########################################################################
# ---- 基础信息 ----
# 镜像主机名,用于生成 trace 文件
MIRRORNAME=$(hostname -f)
# 镜像存放的目标目录(必须为空或仅含 pool 数据)
TO="/srv/mirrors/debian"
# 日志与邮件(日志目录需提前创建)
LOGDIR="/home/mirror/log"
MAILTO="" # 留空则不发送邮件,改为查看日志
# 是否为叶子节点(不向下游推送)
HUB=false
# ---- 上游连接 ----
# 选择一个支持 rsync 的上游镜像
# 国内推荐使用阿里云/腾讯云镜像,但需确认其提供 rsync 服务
# 这里以官方 ftp.debian.org 为例,实际请替换为你的上游
RSYNC_HOST="ftp.debian.org"
RSYNC_PATH="debian"
# ---- 架构过滤 ----
# 只同步 amd64 和 arm64,source 包含在内以便后续需要
ARCH_INCLUDE="amd64 arm64 source"
# ---- 发行版过滤 ----
# 只同步 trixie(Debian 13)及其相关组件
# DIST_INCLUDE 是 ftpsync 支持的过滤选项
DIST_INCLUDE="trixie trixie-updates trixie-backports"
# ---- 日志详细程度 ----
# 开启 FULLLOGS 才能看到 rsync 的详细传输进度
FULLLOGS=true
# ---- 安全删除限制 ----
# 防止误删,设置最大删除数量
MAX_DELETE=1000
# ---- rsync 额外选项 ----
# --info=progress2 用于显示整体进度(配合 FULLLOGS 使用)
RSYNC_EXTRA="--info=progress2"如果想设置同步多个镜像, 则需要在相同目录下按照
ftpsync-<mirrorName>.conf创建配置文件
- 执行同步命令测试配置
ftpsync sync:all如果执行后没有立即报错, 正常开始同步, 则证明配置文件无误. 此时可以 ^C 然后继续进行后续配置
3. 配置 Web 服务器
- 创建 Nginx 配置文件
vim /etc/nginx/site-avaliable/mirrors填入以下内容
server {
listen 80;
listen [::]:80;
server_name <your_domain>;
root path/to/mirror;
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
charset utf-8;
keepalive_timeout 65;
access_log /var/log/nginx/mirrors.access.log;
error_log /var/log/nginx/mirrors.error.log;
location ~* /(dists|pool)/.*(InRelease|Release|Release.gpg|Packages|Sources)(\.gz|\.xz|\.bz2)?$ {
expires 1h;
add_header Cache-Control "public";
}
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
}
server_name服务器名称. 填入您的域名即可root网站根目录. 填写镜像同步目录即可 如果你的 URL 中包含debian, 则需要添加以下内容location /debian/ { alias path/to/mirror; autoindex on; }
- 将配置文件链接到
sites-enabled目录以启用
ln -s /etc/nginx/sites-available/mirror-debian /etc/nginx/sites-enabled/- 测试配置
nginx -t如果输出没有报错, 则正常. 4. 重新加载 Nginx, 使其生效
systemctl reload nginx- 配置相关权限, 使得
www-data也对镜像目录有可读可执行权限
chmod -R a+rX /mnt/Mirror/mirrors/debian4. 创建定时任务
- 安装
crontab,flock
apt install cron flock- 添加互斥锁目录, 编辑权限和配置文件
mkdir /var/run/ftpsync
chown mirror:mirror /var/run/ftpsync
crontab -u mirror -e添加行 0 3 * * * flock -xn /var/run/ftpsync/ftpsync-debian.lock ftpsync sync:all
含义为每天凌晨三点自动运行同步 如果想设置为每隔 n 小时同步一次, 则可以添加
0 */n * * * flock -xn /var/run/ftpsync/ftpsync-debian.lock ftpsync sync:all
保存并退出
5. 进行首次同步
- 运行
ftpsync sync:all进行首次同步
注: 单次全量同步时间较长, 建议使用
screen等类似工具创建虚拟显示器
- 等待同步完成后, 即可在客户机替换软件源
6. 测试
- 替换客户机软件源, 使用
apt update && apt upgrade进行测试.
root@test:~# apt update && apt upgrade
Get:1 http://mirrors.vm.homelab/debian-security trixie-security InRelease [43.4 kB]
Hit:2 http://mirrors.vm.homelab/debian trixie InRelease
Hit:3 http://mirrors.vm.homelab/debian trixie-updates InRelease
Fetched 43.4 kB in 0s (134 kB/s)
All packages are up to date.
Summary:
Upgrading: 0, Installing: 0, Removing: 0, Not Upgrading: 0如果没有报错且速度很快, 那就表明没有问题. 如果有条件的话, 还可以在内网 DNS Server 做单独配置, 给予一个内网可用的专有域名. 至此, 镜像源的搭建就结束了.
结语
本人非专业人士, 如有错误请指出! 感谢您的阅读.