I am LAZY bones? AN ancient AND boring SITE

架设ubuntu源时的两个脚本

最近在折腾新的ubuntu的源,向公司申请了一台配置一般的服务器,另外买了一块硬盘,硬件就有了。
然后装了个ubuntu 9.04 server,装上ssh,再装上nginx,稍微配置一下,服务就好了,这个过程还是蛮简单的,也很顺利,就不多说了。
接下来就可以开始同步数据了。由于我的目标是一个完整的源,所以就没有用apt-mirror之类的工具,而是直接拿rsync抓取上游的数据了。这个数据量是很大的,所以想尽量选择一个速度最快的带rsync的而且是“Up to date”的源,但是在茫茫的ubuntu官方源列表里,这么多源哪个最快呢?当然没有人会告诉你答案,因为每个人的网络环境都不一样啊。所以,最好的办法还是实地测试,所谓磨刀不误砍柴功啊,后面有300多G的数据要下载呢,这个测试绝对有价值。
上脚本(2009-12-12 更新):

#!/bin/bash
 
rmie(){
while [ -n "$1" ] ; do
        [ -f $1 ] && rm $1
        shift
done
}
 
urls=`curl https://launchpad.net/ubuntu/+archivemirrors | \
tr -d "\n" | sed  's/<\/tr>/\n/g' | grep "Up to date"|grep '>rsync</a>'|awk -F '"' '{print $4}'`
rmie res
{
echo "$urls" | while read url;do 
echo "testing... $url"
rmie T
wget -q --no-cache -O T "$url/ls-lR.gz" &
sleep 5
kill %% 
echo -n "$url " >> res
ls -l T >>res
done
} 2>/dev/null
 
sort -k 6 -n res > fast_mirror_`date +%F`
rmie res T

最后你可以 tail fast_mirror_XXX 看到5秒内下载的字节数最多的一个源。我这还真有一个源,能在3秒把7.4M大的ls-lR.gz给下载完的。
然后,你可以先用这个最快的源把大部分数据先更新下来,完了之后,为了保证数据最新,再向官方源更新一次,我用的是这个脚本:

#!/bin/bash
[[ $UID == 0 ]] || { echo "Must be root to run this script."; exit 0; }
LOCK="/data/sync_sh/lock"
LOG="/data/sync_sh/log"
 
while true; do
echo -e "\nstart sync @ `date`" | tee -a $LOG
 
if [ -f $LOCK ]; then
	echo "another sync is running, I exiting..." | tee -a $LOG
	exit 1
fi
touch $LOCK
 
st=`date +%s`
rsync --timeout=120 --exclude=".~tmp~" -avP --delete-excluded --progress rsync://archive.ubuntu.com/ubuntu/pool/ /data/mirrors/ubuntu/pool/
res=$?
if [ $res -eq 0 ]; then
	echo "rsync pool succ" | tee -a $LOG
	et=`date +%s`
	echo "pool sync use $(( $et-$st )) sec = $(( ($et-$st)/60 )):$(( ($et-$st)%60 ))" | tee -a $LOG
else
	echo "rsync pool failed" $res | tee -a $LOG
fi
 
st=`date +%s`
rsync --timeout=120 --exclude=".~tmp~" -avP --delete-excluded --progress rsync://archive.ubuntu.com/ubuntu/ /data/mirrors/ubuntu/
res=$?
if [ $res -eq 0 ]; then
        echo "rsync all succ" | tee -a $LOG
        et=`date +%s`
        echo "all sync use $(( $et-$st )) sec = $(( ($et-$st)/60 )):$(( ($et-$st)%60 ))" | tee -a $LOG
else
        echo "rsync all failed" $res | tee -a $LOG
fi
 
df | grep "/data" | tee -a $LOG
echo -e "end sync @ `date`" | tee -a $LOG
 
rm $LOCK
 
sleep 7200
done

这个脚本先更新pool目录,再整个目录更新一遍,这样是为了减少出现软件列表里已经有某软件,但是却下载不到的情况。
脚本常驻运行,在上次更新完以后的2小时,启动下一次更新,这样应该算是国内最新的源了吧?
PS: 感谢服务器达人lupa的walkerxk在我架设源时,给我的热心帮助。

最后修改时间: 2009年12月12日 16:33

本文章发表于: 2009年09月18日 23:01 | 所属分类:备忘. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

19 个评论 关于: “架设ubuntu源时的两个脚本”

  1. jx 在 2009年09月19日 13:02 说:回复

    Ubuntu中文社区会员特来感谢

  2. Jandy 在 2009年09月19日 23:48 说:回复

    上海Ubuntu用户前来致谢!

  3. LeoWL 在 2009年09月21日 08:40 说:回复

    ==,我也有同步源的爱好。。。。但是用的是apt-mirror,不知道你的这个速度怎么样。。。
    找个时间研究一下。。。

  4. xiooli 在 2009年09月21日 17:09 说:回复

    骨头架个arch源吧^^

    • bones7456 在 2009年09月21日 17:38 说:回复

      早知道搞个2T的硬盘了,现在的500G不够用了啊。。。

  5. DingWL=LeoWL 在 2009年09月24日 15:34 说:回复

    你建个 Arch的源,我立马sync了,你也知道的,官方的arch需要授权的 ……

    • bones7456 在 2009年09月24日 17:51 说:回复

      我也没官方的授权啊,想不通官方为什么不开放。。。
      再说我目前不用arch。。。

  6. ubuntulover 在 2009年10月28日 21:00 说:回复

    感谢骨头的努力,ubuntu广东用户感谢你!感受开源带来的良好氛围!

  7. XTime 在 2009年11月02日 10:36 说:回复

    兄弟能加个debian的源吗?

    • bones7456 在 2009年11月02日 12:03 说:回复

      服务器硬盘已经到90%了,没空间了哦。。。

  8. tb 在 2009年11月08日 00:05 说:回复

    果然比国内的其他来源全,今晚受用了。

  9. 杰子 在 2009年11月27日 16:22 说:回复

    广西 ubuntu 粉丝 前来道谢!

  10. boy89 在 2010年01月06日 19:49 说:回复

    明白了~300多G~仿佛也不是非常非常的大呵~~ 哈哈

  11. Ubuntu 9.10 安装笔记(1) » 嘉佑中文博客 在 2010年01月26日 18:21 说:回复

    […] ubuntu.srt.cn 这个源,然后点击 Choose Server 。ubuntu.srt.cn 是骨头维护的,服务器在杭州电信,百兆共享带宽,速度还是不错的,骨头的 […]

  12. lds 在 2010年10月29日 13:23 说:回复

    用apt-mirror 架设一个校内的源,软件下载完了,不知道怎么发布。

  13. lds 在 2010年10月29日 20:13 说:回复

    服务器是rhel5.5,安装了lnmp,web服务器是nginx.

    • bones7456 在 2010年10月30日 10:07 说:回复

      只要用http能访问到你的资源,就可以告诉人家地址了。

      • lds 在 2010年10月30日 21:38 说:回复

        非常感谢,源已经能够访问,速度还不错。只是做了10.10的源。如果做其他版本,比如10.04 ,所有的软件包是不是还要下载,与10.10的软件分隔开。

        • bones7456 在 2010年10月31日 13:26 说:回复

          当然要下载,你用apt-mirror的话,只要改下配置就可以了。

发表评论