软件源同步

sync, sync, sync!

概述

同步工具运行在 Docker 容器内。

使用 mirror 控制同步任务&报告同步状态。

同步工具为 rsync 以及其他脚本。

同步使用校园网 ipv6,因为 ipv4 限流量。

如何添加新的同步项

  1. mkdir /pool/poolx/example
  2. ln -s /pool/poolx/example /srv/www/mirrors/
  3. ln -s /pool/poolx/example /home/docker/mirror/mirrors/
  4. 编辑 config/mirror.ini
  5. 根据需要添加 rsync/example.txt
  6. docker restart mirror

目录结构

/home/docker/mirror
├── config
│   ├── mirrord.pid
│   ├── mirror.ini # 主配置文件
│   └── plugin.ini
├── mirrors  # 示例
│   ├── debian -> /pool/zfs/debian
│   └── homebrew -> /pool/pool2/homebrew/
├── rsync    # 示例
│   └── debian.txt
├── run.sh
├── scripts  # 示例
│   └── homebrew.sh
└── status
    ├── lsjson.py
    ├── show_formatted_status.sh
    ├── show_formatted_status.sh.bak
    └── status.json #同步状态(被网页前端数据来源)

目录映射

容器外 容器内 权限
/pool /pool rw
/home/docker/mirror/config /etc/mirror rw
/home/docker/mirror/scripts /home/scripts ro
/home/docker/mirror/rsync /home/rsync ro
/home/docker/mirror/mirrors /srv/mirrors ro
/home/docker/mirror/status /srv/status rw
/var/log/mirrord /var/log/mirrord rw

mirror.ini 条目

time 是 UTC,cron 格式: 分 时 日 月 周

[debian]
upstream[] = ipv6.mirrors.ustc.edu.cn
command    = rsync
time       = 30 18 * * *
rsyncdir   = debian
localdir   = /srv/mirrors/debian
args       = -6avSHP --delete --delete-after --delete-excluded --include-from=/home/rsync/debian.txt --timeout=300 -hi
twostage   = 0
timeout    = 0
autoretry  = 0
priority   = 1

[homebrew]
type       = simple
command    = bash
args       = /home/scripts/homebrew.sh
time       = 45 20 * * *
twostage   = 0
timeout    = 0
autoretry  = 0
priority   = 4

rsync --include-from 文件示例

从上往下优先级递减。

+ 同步, - 过滤,* 通配, *** 递归所有。

+ 目录 之后 + 目录/文件 才有效。

这个例子是 rsync/debian.txt,过滤掉了除 i386 和 amd64 之外的架构。

+ pool
+ pool/*
+ pool/*/*
+ pool/*/*/*
+ pool/*/*/*/*_all.deb
+ pool/*/*/*/*_i386.deb
+ pool/*/*/*/*_amd64.deb
- pool/*/*/*/*.deb
- pool/*/*/*/*.udeb
+ pool/*/*/*/*

- *kfreebsd*
- *hurd*

+ zzz-dists
+ zzz-dists/***

+ dists
+ dists/*
+ dists/*/*
- dists/*/*/installer*
+ dists/*/*/*amd64*
+ dists/*/*/*amd64*/***
+ dists/*/*/*i386*
+ dists/*/*/*i386*/***
+ dists/*/*/dep11
+ dists/*/*/dep11/*i386*
+ dists/*/*/dep11/*amd64*
+ dists/*/*/dep11/icons*
+ dists/*/*/dep11/by-hash
+ dists/*/*/dep11/by-hash/***
+ dists/*/*/*source*
+ dists/*/*/*source*/***
+ dists/*/*/i18n
+ dists/*/*/i18n/***

- *

常用命令

启动容器
docker start mirror

关闭容器
docker stop mirror

重启容器
docker restart mirror

在容器内运行 bash
docker exec -ti mirror /bin/bash