breed 为 yum, deb, rsync 的都很好做,直接通过 cobbler 内置的 repo 同步很快就可以完成,即使没有 cobbler,一个脚本也能搞定,比如我们线上 Ubuntu 12.04 的就是通过 debmirror 的方式同步完成的。
但是对于 HTTP 的方式,我找了一圈没有找到很好的方式,最初我是使用的 wget,发现效率太低,后来有推友推荐使用 lftp,使用之后发现果真是半个神器,虽然达不到 rsync 那样的智能的增量,但是对于更新的不是那么频繁的资源的同步也基本能够满足要求了。
最初是写了一个 expect 脚本上去跑,后来发现还有 non-interactive 的方式,-c/-f 都可以,放到 cron 里面确实很方便:
$ cat lftp.txt
open http://maven.twttr.com
mirror -c -n –parallel=10 ./ ~/resources/maven
quit
$ lftp -f lftp.txt
除了上面这个问题还有个几年内无法突破的问题,方院士,自己的 PC 遇到,服务器自然也会遇到,同步到本地一是出于上面的考虑,另外一点还是为了节省带宽以及其他的机器资源消耗。目前专门有一台 VPS 供我们线上使用,在线上搞了一个 proxy,实现的方式太多了(shadowsocks + polipo),具体的就不说了,提供 http, https 的方式,基本能满足目前的需求了。